概念 函数调用的过程中计算器需要为函数开辟空间,用于本次函数的调用中临时变量的保存、现场保护,这块栈空间称为函数栈帧。栈帧维护需要esp和ebp这两个寄存器,分别存放了这个栈的栈底指针和栈顶指针。 调用过程 创建栈帧并初始化 创建局部变量,push参数(从右向左顺序依次压入) push下条指令的地址 再次创建栈帧,取参数计算,将返回值放入寄存器返回 销毁栈帧,pop寄存器,找到对应上个函数的下条指令的地址 示例代码 #include <stdio.h> int Add(int x, int y) { int z = 0; z = x + y; return z; } int main() { int a = 10; int b = 20; int ret = Add(a, b); printf("ret = %d\n", ret); return 0; } main函数的汇编代码 Add函数的汇编代码 函数调用栈帧图