首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

小弟我根据只用esp就能保存栈帧结构,为什么一定要用ebp呢

2013-12-29 
我根据只用esp就能保存栈帧结构,为什么一定要用ebp呢?C/C++代码通常进入函数的时候会有push ebpmov ebp,es

我根据只用esp就能保存栈帧结构,为什么一定要用ebp呢?
C/C++代码通常进入函数的时候会有


push ebp
mov ebp,esp

函数退出的时候

mov esp,ebp
pop ebp
ret

我个人的感觉似乎有esp就够了,函数开始的时候push esp,函数结束的时候pop esp;ret;
这样的话有什么问题呢?

为什么一定要弄个ebp来?
谢谢。
[解决办法]
这是函数局部变量的构造方法。用ebp是为了使用局部变量,因为esp在函数中进行栈操作时是会变的,ebp只是记录了进入函数时栈顶(栈数据为:参数->IP->ebp)位置,当函数有局部变量时,编译器会向下移动esp,为变量预留位置,你在函数中使用局部变量时,编译器会编译成[ebp+XXXX]的形式。若只用esp,当函数内有栈操作时,你怎么去访问局部变量呢?mov esp,ebp;pop ebp;这两条可以用leav代替。
[解决办法]
ESP指向栈顶,EBP指向基址。像楼上所说,ESP加上EBP组合起来能更方便的在会变语言里面使用临时变量。

热点排行