为什么pop会在程序集中使用参数?

时间:2010-03-31 15:14:12

标签: assembly pop

popl   %ebp

似乎%ebp是不必要的,因为堆栈的pop操作不需要参数。

为什么有意义?

3 个答案:

答案 0 :(得分:9)

来自http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

  

pop - Pop stack

     

pop指令将4字节数据元素从硬件支持的堆栈顶部移除到指定的操作数(即寄存器或存储器位置)。它首先将位于存储单元[SP]的4个字节移动到指定的寄存器或存储单元中,然后将SP递增4。

     

语法
  pop< reg32>
  pop< mem>

     

实施例
  pop edi - 将堆栈的顶部元素弹出到EDI中   pop [ebx] - 从位置EBX开始的四个字节将堆栈的顶部元素弹出到内存中。

另一个不错的参考是http://en.wikibooks.org/wiki/X86_Assembly,它可以在PDF form中找到。

答案 1 :(得分:6)

此参数设置目的地。

答案 2 :(得分:3)

要扩展Andrey的答案,除了在弹出元素上增加堆栈指针外,弹出元素也会复制到目标地址或寄存器。你给出的指令或多或少等同于两条指令(intel语法)

add esp,4
mov [ss:esp-4],ebp

我认为这是att(gas)语法

add $4, %esp
mov %ss-4(%esp), %ebp