当前位置: 代码迷 >> 汇编语言 >> 小弟我是汇编新手,有个小疑点
  详细解决方案

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

热度:4346   发布时间:2013-02-26 00:00:00.0
我是汇编新手,有个小问题~
就是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又会变化以保持平衡。
  相关解决方案