我知道这是一个非常基本的问题,但是在这里:
我开始学习汇编程序,并且试图了解堆栈的工作原理。
首先,当我将值传递给汇编器函数时,我将像这样访问它:
movl 4(%esp),%eax # first parameter
movl 8(%esp),%ebx # second parameter
但是后来我被告知最好这样做:
push %ebp
movl %esp,%ebp
# and then I'd access the values on %ebp:
movl 8(%ebp),%eax
movl 12(%ebp),%eax
pop %ebp
好的,这有什么区别?当我直接从%esp访问值时,它们不是已经在堆栈中吗?使用push再次执行操作有什么好处?
有没有人为一个好的学习工具(傻瓜型)提供有关如何学习堆栈如何工作的技巧,以便人们可以学习这些堆栈指针,返回地址等等?我还没有找到任何有关其工作原理的良好视觉演示。谢谢!
区别和原因都与堆栈帧有关。以下链接有一个不错的摘要(如果我自己说的话)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句