代码之家  ›  专栏  ›  技术社区  ›  Mask

为什么Pop在程序集中接受参数?

  •  7
  • Mask  · 技术社区  · 16 年前
    popl   %ebp
    

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

    为什么有意义?

    3 回复  |  直到 16 年前
        1
  •  9
  •   jschmier    16 年前

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

    流行音乐 弹出堆栈

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

    句法
    pop<reg32>
    弹出<mem>

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

    另一个很好的参考是 http://en.wikibooks.org/wiki/X86_Assembly 它在 PDF form .

        2
  •  6
  •   Andrey    16 年前

    此参数设置目标。

        3
  •  3
  •   Geoff Reedy    16 年前

    为了扩展Andrey的答案,除了在弹出的元素上增加堆栈指针之外,弹出的元素还被复制到目标地址或寄存器。您给出的指令或多或少相当于这两个指令(intel语法)

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

    我认为这是在att(gas)语法中

    add $4, %esp
    mov %ss-4(%esp), %ebp
    
    推荐文章