Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 降低组件中的pop_Assembly_X86_Cpu Registers - Fatal编程技术网

Assembly 降低组件中的pop

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

我正在学习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
类似地,在推送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
的功能。