popl %ebp
似乎%ebp
是不必要的,因为堆栈的pop
操作不需要参数。
为什么有意义?
答案 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