在 asm 中推送连续字节

push consecutives ubytes in asm

好吧,在汇编中不可能推送一个无符号字节;我们需要推一个词(扩展标志)。

我可以 "push 0x0b00c8f0",但我需要单独创建双字。我可以说,我需要在 00 之后、c8 之后和 f0 之后推送 0b。完成这 4 次推送后,我需要用这些字节构成双字。

我有:

push WORD 0x0b
push WORD 0x00
push WORD 0xc8
push WORD 0xf0
push 0x11111111
movsb [esp], [esp+4]
movsb [esp+1], [esp+8]
movsb [esp+2], [esp+12]
movsb [esp+3], [esp+16]
; Now esp = 0x0b00c8f0

但是ESP不能在一个8位的段中分开,那么,我该怎么做呢?

您的示例无效,因为 x86 处理器没有 "memory to memory move"。但是你可以像对待普通内存一样对待堆栈(没有push):

sub esp, 4
mov BYTE [esp], 0xf0
mov BYTE [esp+1], 0xc8
mov BYTE [esp+2], 0x00
mov BYTE [esp+3], 0x0b