gpt4 book ai didi

c - 当一切都可以通过寄存器完成时,为什么要减少 %rsp 呢?

转载 作者:行者123 更新时间:2023-12-02 02:44:12 34 4
gpt4 key购买 nike

下面是我的代码:

C代码

// this function might look weird, just for demo purpose
void func4(int x, int y, int z) {
int t = z - y;
int k = t >> 31;
t = (t + k) >> 1;
k = t + y;
if(k <= x) {
t = 0;
if(k >= 1) {
return;
}else {
y = k + 1;
func4(x, y, z);
}
}else {
z = k - 1;
func4(x, y, z);
}
}

汇编代码:

// only show relevant code
func4:
subq $8, %rsp // decrement %rsp by 8, but why?
movl %edx, %eax
subl %esi, %eax
... // all operations on registers
addq $8, %rsp
ret

因此,既然每个操作都可以通过寄存器完成,则不会将任何内容推送到堆栈,也不涉及指针,那么为什么 %rsp 首先要递减 8?是为了对齐/偏移吗?

最佳答案

func4 进行传出函数调用(对其自身也同样如此),因此必须遵守函数调用的 ABI,这要求 %rsp 在调用时间(由于返回地址被推送,因此在输入时错位 8)。

关于c - 当一切都可以通过寄存器完成时,为什么要减少 %rsp 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065494/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com