函数B中的
ebp
用于存放上一层函数A的栈帧的基指 (上一层函数A的栈帧的栈顶地址值),当由函数B进入到下一层函数C后,需将函数B的ebp
压入函数B的栈帧顶部,并作为函数B的栈帧的栈顶(此时函数B的栈帧结束),同时需将上一层函数B的栈帧的基指(上一层函数B的栈帧的栈顶地址值)esp
赋值给ebp
作为函数c的ebp
。
汇 编 指 令 | 指令说明 |
---|---|
push ebp | 将上一函数A的栈帧(SF Stack Frame)的基指(栈顶地址值)ebp压入上一函数A的栈帧的顶部(作为上一函数A的栈帧的栈顶) |
mov ebp,esp | 将上一函数A的栈帧的栈顶地址值(基址)esp赋值给ebp作为main函数的ebp |
ebp | 将上一函数A的栈帧(SF Stack Frame)的基指(栈顶地址值)ebp压入上一函数A的栈帧的顶部(作为上一函数A的栈帧的栈顶) |
#include<stdio.h>
int Add(int x, int y)
{
int result;
result=x+y;
return result;
}
int main()
{
int a=1,b=2,s;
s=Add(a,b);
printf("s=%d\n",a+b);//可以step into看一下printf函数的具体执行过程
return 0;
}