演示代码
#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 c=0; c = add(a, b); printf("%d\n", c); return 0; }
esp,ebp两个寄存器
esp用来维护栈顶的指针
ebp用来维护栈顶的指针
从这里可以看出来,main函数是被mainCRTStartup函数调用的。
下面执行第一步,push ebp
意思是向栈顶压入一个数值ebp
上面的这个就完成了main函数的栈帧,包括对变量a,b,c的开辟。
下面展示对add函数栈帧的开辟
下面这个是add函数的栈帧的销毁
最后这个是main函数的销毁
pop的意思是出栈。