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

小弟我是汇编新手,有个小疑点

2012-02-21 
我是汇编新手,有个小问题~就是win32汇编定义局部变量时,用local语句,看反汇编代码时有这么几条:1.push ebp

我是汇编新手,有个小问题~
就是win32汇编定义局部变量时,用local语句,看反汇编代码时有这么几条:
1.push ebp
2.mov ebp,esp
3.add esp,fffffff8
4.mov eax,dword ptr[ebp-04](定义的变量)
......
......(剩下的变量)
leave
ret

第三条中的改变esp有什么用处啊,下面的语句都是对ebp而言的啊,第三条不要,对后面语句不是也没有影响吗?
请大牛们帮忙解答一下吧。(书上说是什么预留空间的作用,但是还是感觉第三句不要,丝毫没有影响吧?)

[解决办法]

探讨
啊?为什么 上面的 mov ebp, esp 让 ebp 和 esp 等,那么 mov eax, dword ptr [ebp-04] 就将数据存在了 [esp-04] 处 ? 不是储存在eax上面吗?? 麻烦说的再清楚点咯。 我新手啊~~~

[解决办法]
探讨
那你还没说 要不要它 有什么区别啊 你说那个 我也知道 麻烦你看看一楼的问题 再帮忙解答吧

[解决办法]
esp标记栈的位置,一般在函数的头部进行处理,定义局部变量里,编译器按局部变量的空间调整栈大小,如有4个int型(4字节),那么一般会add esp fffffff0,也就是-16,然后让ebp记住这个位置,对局部变量进行赋值时,比如ebp-4,ebp-8,按照位差,函数返回前,又进行清栈,esp又会变化以保持平衡。

热点排行