我读Professional Assembly Language通过Richard Blum,当你输入一个电话你应该ESP
寄存器的值复制到EBP
,他还提供了下面的模板:为什么要在呼叫中保持EBP中的ESP?
function_label:
pushl %ebp
movl %esp, %ebp
< normal function code goes here>
movl %ebp, %esp
popl %ebp
ret
我不明白为什么这个是必要的。当你在功能内部推动某个东西时,你显然打算将其弹回来,从而将ESP
恢复为原始值。
那么,为什么这个模板?
无论如何,EBP
注册的用途是什么?
我明显错过了一些东西,但它是什么?
这被称为堆栈框架,它可以用于创建从函数完成后被破坏的局部变量。 – 2013-04-07 13:22:07
@Sp。为什么我不弹出这些局部变量? /为什么弹出不会摧毁它们?对不起,有点慢。 – MasterMastic 2013-04-07 13:23:30
也许你需要看看这个答案,更好地解释,http://stackoverflow.com/questions/3699283/what-is-stack-frame-in-assembly#answer-3700219 – 2013-04-07 13:27:32