Assembly 降低组件中的pop
我正在学习IA32。当我想到Assembly 降低组件中的pop,assembly,x86,cpu-registers,Assembly,X86,Cpu Registers,我正在学习IA32。当我想到popl DEST指令在做什么时,我想到了以下几点: movl (%esp), DEST addl $4, %esp 但是当我想到popl%esp时,我开始怀疑自己。尽管这可能是一条毫无意义的指令,但我认为可能有更好的方法来概括描述popl DEST指令。您如何描述它?以下是英特尔文档中POP指令的一小部分伪代码: IF StackAddrSize = 32 THEN IF OperandSize = 32 THEN DEST
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
类似地,在推送xSP上也有一些文本:
PUSH ESP指令按指令执行前的状态推送ESP寄存器的值。如果推送指令使用内存操作数,其中ESP寄存器用于计算操作数地址,则在ESP寄存器递减之前计算操作数地址
以下是英特尔文档中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
类似地,在推送xSP上也有一些文本:
PUSH ESP指令按指令执行前的状态推送ESP寄存器的值。如果推送指令使用内存操作数,其中ESP寄存器用于计算操作数地址,则在ESP寄存器递减之前计算操作数地址
因此,我选择的描述方式似乎与Intel的文档一样。对于
pop%esp
,这里有一个特别的注释,说明它首先递增堆栈指针。因此,我选择的描述方式似乎与Intel的文档一样。对于pop%esp
,这里有一个特别的提示,说明它首先递增堆栈指针。很抱歉,有人没有发现我的问题有用。请随时发表评论,以便我将来改进问题。add
指令修改状态标志。因此,leaesp,[esp+4]
与pop
的功能更匹配。很抱歉,有人认为我的问题没有用。请随时发表评论,以便我将来改进问题。add
指令修改状态标志。因此,leaesp,[esp+4]
将更符合pop
的功能。