2015-04-22 23 views
6

它说,“离开”指令类似:大会86 - “离开”指令

movl %ebp, %esp 
popl %ebp 

我明白movl %ebp, %esp的一部分,它的作用是释放存储内存(如this question讨论) 。

但是popl %ebp代码的目的是什么?

+3

它弹出'ebp'。 – immibis

+0

“重复问题”实际上并不回答这个问题;投票重新开放...... – immibis

回答

13

LEAVEENTER的对应物。所述ENTER指令由第一推EBP到堆栈中,然后复制到ESPEBP建立一个堆栈帧,所以LEAVE具有做相反,即复制EBPESP,然后恢复旧EBP从堆栈。

见命名程序段中的调用块结构语言Intel's Software Developer's Manual第1卷,如果你想了解更多关于如何ENTERLEAVE工作。

+0

看来我不理解EBP和ESP的概念。你能为我解释这两个条款吗? – alexswo

+0

'EBP'和'ESP'都只是32位通用寄存器。虽然'ESP'有一个特殊的函数,它作为堆栈指针,并且通过某些指令(例如'push','pop','call')被隐式修改。按照约定,“EBP”通常用作函数内的堆栈帧指针。 – Michael

+0

[在分解代码中的ebp和esp是什么意思?](http://stackoverflow.com/questions/26684506/what-does-ebp-and-esp-in-a-dissembly-code-means)[什么是ESP和EBP注册?](http://stackoverflow.com/questions/21718397/what-are-the-esp-and-the-ebp-registers?rq=1) –