x86上有补偿回写吗?

时间:2013-07-02 23:29:12

标签: assembly x86 arm addressing-mode

使用ARM,我可以访问这样的内存位置:

LDR r0, [r1, #4]!

意思是我想加载r1指向的值,偏移量为4个字节,并且!表示我希望在该指令之后使用新值(即+4)更新r1的值。

x86上是否存在等价物(如果可能,还有AT& T语法)?例如:

movl 4(%ebx), %eax

这会将%ebx指向的值加载到%eax中,偏移量为4个字节。如何在加载后更新%ebx的值?

感谢。

1 个答案:

答案 0 :(得分:4)

我认为您正在寻找的指令是LODSD,这意味着“从字符串加载DWORD”。您无法选择寄存器:指针位于ESI,目标寄存器为EAX

  

字节,字或双字从内存位置传输到   AL,AX或EAX寄存器,(E)SI寄存器自动递增或递减   根据EFLAGS寄存器中DF标志的设置。 (如果DF标志是   0,(E)SI寄存器递增;如果DF标志为1,则ESI寄存器将减   对于字节操作,(E)SI寄存器递增或递减1,   2表示单词操作,或4表示双字操作。

抱歉,我现在脑子里已经根深蒂固了Intex语法。假设32位保护模式:

mov   esi, _source_data_       ; ESI points to source data
cld                            ; Clear the direction flag
                               ; (ESI will increment)
lodsd                          ; Essentially   mov eax, [ds:esi]
                               ;               add esi, 4