使用ARM,我可以访问这样的内存位置:
LDR r0, [r1, #4]!
意思是我想加载r1指向的值,偏移量为4个字节,并且!表示我希望在该指令之后使用新值(即+4)更新r1的值。
x86上是否存在等价物(如果可能,还有AT& T语法)?例如:
movl 4(%ebx), %eax
这会将%ebx指向的值加载到%eax中,偏移量为4个字节。如何在加载后更新%ebx的值?
感谢。
答案 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