我在研究IA32。當我想到什麼popl DEST
指令是做我認爲以下幾點:在組裝中描繪流行音樂
movl (%esp), DEST
addl $4, %esp
但後來我開始的第二個猜測自己,當我想到popl %esp
。儘管這可能是一個毫無意義的指令,但我認爲可能有更好的方法去思考一般描述popl DEST
指令。你會如何描述它?
我在研究IA32。當我想到什麼popl DEST
指令是做我認爲以下幾點:在組裝中描繪流行音樂
movl (%esp), DEST
addl $4, %esp
但後來我開始的第二個猜測自己,當我想到popl %esp
。儘管這可能是一個毫無意義的指令,但我認爲可能有更好的方法去思考一般描述popl DEST
指令。你會如何描述它?
下面是來自英特爾的文檔,以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寄存器遞減之前計算操作數的地址。
因此,看起來我選擇描述它的方式就像來自英特爾的文檔。對於'pop%esp'只有一個特別的說明,那就是它首先增加堆棧指針。 – 2013-02-18 03:37:00
對不起有人沒有發現我的問題有用。請隨時對此發表評論,以便我可以在將來改進問題。 – 2013-02-18 03:38:09