假设这段代码:
int add(int a, int b){
int c = a+b;
return c;
}
int main(){
printf("%d\n", add(3,4));
}
以下是在程序集中通常如何实现的:
1.将4
推入堆栈
1.将3
推入堆栈
- push返回地址,这是下一个指令
print()
的地址,要堆栈
1.调用add
1.执行加法并将c
压入堆栈 - pop
c
from stack(?)
1.返回main
那么返回值会发生什么呢?它不能在add
帧上,因为它将在最后被清除。它会被放到main
的堆栈上吗?
让我们假设值被压入堆栈而不是寄存器。
1条答案
按热度按时间lzfw57am1#
这取决于体系结构和调用约定。在x86-32中,对于64位结果,几乎每个调用约定都有
eax
或edx:eax
中的返回值。所以你的add
函数可能有这样的指令:不需要额外的工作,因为返回值已经假定在
eax
中。也就是说,除非您询问的是特定的架构,否则您不会找到一个“一般情况”的答案,即使这样,也可能有多个不同的调用约定。