2015-04-22 67 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) –