push dword ptr [eax + 22]是什么意思?
我知道,例如,push eax会将eax保存到堆栈,并将esp递减4. push dword ptr意味着它需要推送4个字节,但后来我感到困惑。 另外,如果它是[esi + 22]这是否是同样的事情?
push
指令与许多其他x86指令非常相似,可以采用各种操作数:即时值,寄存器和内存地址:
push 10 ; pushes the value 10 (32 bits in 32-bit mode)
push eax ; pushes the contents of the 32-bit register eax
push DWORD [ebx + 42] ; pushes 32 bits from the memory location ebx + 42
登记表从寄存器的大小推断出大小。 内存表单需要具有指定的大小(例如,这里以英特尔语法显示)。 对于即时值,操作数大小为16或32位; 当前模式是默认设置,另一个大小可以明确选择(例如,在32位模式下push WORD 10
)。
push dword ptr [eax+22]
会将esp
递减4,然后从内存位置ebx + 22
保存4bytes数据。 和pop eax
做以相反的方式,首先移动在storeed比特esp
到esp + 3
到eax
,并递增esp
由4。