2013-02-17 36 views
1

我在研究IA32。當我想到什麼popl DEST指令是做我認爲以下幾點:在組裝中描繪流行音樂

movl (%esp), DEST 
addl $4, %esp 

但後來我開始的第二個猜測自己,當我想到popl %esp。儘管這可能是一個毫無意義的指令,但我認爲可能有更好的方法去思考一般描述popl DEST指令。你會如何描述它?

+0

對不起有人沒有發現我的問題有用。請隨時對此發表評論,以便我可以在將來改進問題。 – 2013-02-18 03:38:09

回答

3

下面是來自英特爾的文檔,以POP指令的僞代碼的一小部分:

IF StackAddrSize = 32 
    THEN 
    IF OperandSize = 32 
     THEN 
     DEST ← SS:ESP; (* Copy a doubleword *) 
     ESP ← ESP + 4; 
     ELSE (* OperandSize = 16*) 
     ... 
    FI; 
... 

但這裏是它說具體來說約POP xSP

的POP ESP指令增加堆棧指針(ESP),然後將舊堆棧頂部的數據寫入目標。

這意味着序列

PUSH ESP 
POP ESP 

什麼都不做出來的平凡,就像這樣:

PUSH EAX 
POP EAX 

同樣,對PUSH xSP一些文字:

PUSH ESP指令按照ESP寄存器的值存在在執行指令之前編輯。如果PUSH指令使用ESP寄存器用於計算操作數地址的內存操作數,則在ESP寄存器遞減之前計算操作數的地址。

+0

因此,看起來我選擇描述它的方式就像來自英特爾的文檔。對於'pop%esp'只有一個特別的說明,那就是它首先增加堆棧指針。 – 2013-02-18 03:37:00