Assembly x86上是否有偏移量写回?

Assembly x86上是否有偏移量写回?,assembly,x86,arm,addressing-mode,Assembly,X86,Arm,Addressing Mode,使用ARM,我可以访问如下内存位置: LDR r0, [r1, #4]! 这意味着我要加载r1指向的值,偏移量为4字节,并且!意味着我希望r1的值在此指令之后用新值更新,即+4 如果可能的话,x86 AT&T语法是否有等效的语法?例如: movl 4(%ebx), %eax 这将把偏移量为4字节的%ebx指向的值加载到%eax中。但是,如何在加载后更新%ebx的值 谢谢。我想您要找的指令是从字符串加载DWORD。不过,您不需要选择寄存器:指针位于ESI中,目标寄存器是EAX 字节、字或双字从

使用ARM,我可以访问如下内存位置:

LDR r0, [r1, #4]!
这意味着我要加载r1指向的值,偏移量为4字节,并且!意味着我希望r1的值在此指令之后用新值更新,即+4

如果可能的话,x86 AT&T语法是否有等效的语法?例如:

movl 4(%ebx), %eax
这将把偏移量为4字节的%ebx指向的值加载到%eax中。但是,如何在加载后更新%ebx的值


谢谢。

我想您要找的指令是从字符串加载DWORD。不过,您不需要选择寄存器:指针位于ESI中,目标寄存器是EAX

字节、字或双字从内存位置传输到 AL、AX或EAX寄存器,ESI寄存器自动递增或递减- 根据EFLAGS寄存器中DF标志的设置进行校准。如果DF标志为 0,ESI寄存器递增;如果DF标志为1,则ESI寄存器递减- 曼蒂德。对于字节操作,ESI寄存器递增或递减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

我想你要找的指令是从字符串加载DWORD。不过,您不需要选择寄存器:指针位于ESI中,目标寄存器是EAX

字节、字或双字从内存位置传输到 AL、AX或EAX寄存器,ESI寄存器自动递增或递减- 根据EFLAGS寄存器中DF标志的设置进行校准。如果DF标志为 0,ESI寄存器递增;如果DF标志为1,则ESI寄存器递减- 曼蒂德。对于字节操作,ESI寄存器递增或递减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

我想你是说4%的ebx,对吧?除此之外,我不知道英特尔是否有自动递增寻址模式。我将快速查看文档…4%ebx不等于%ebx,4吗?我的汇编程序不会接受它:示例。s:3:没有索引寄存器的比例因子4。明白了。我认为在括号内,您可能只包含另一个寄存器作为偏移量。Thanks@DanielS:AT&T语法x86汇编括号内的数字表示比例因子;你说偏移量%basereg,%indexreg,scale意味着要使用的地址是offeset+basereg+scale*indexreg。比例值的唯一选项是0/1/2/4/8。地址的写入方式是AT&T语法中最奇怪的一点;按照英特尔的风格,你实际上写的是[basereg+scale*indexreg+offset]。我想你是说4%ebx,对吧?除此之外,我不知道英特尔是否有自动递增寻址模式。我将快速查看文档…4%ebx不等于%ebx,4吗?我的汇编程序不会接受它:示例。s:3:没有索引寄存器的比例因子4。明白了。我认为在括号内,您可能只包含另一个寄存器作为偏移量。Thanks@DanielS:AT&T语法x86汇编括号内的数字表示比例因子;你说偏移量%basereg,%indexreg,scale意味着要使用的地址是offeset+basereg+scale*indexreg。比例值的唯一选项是0/1/2/4/8。地址的写入方式是AT&T语法中最奇怪的一点;按照英特尔的风格,您实际上编写了[basereg+scale*indexreg+offset]。现在,当此指令存在时。。。序列mov%esi,%eax;lea 4%esi,%esi可能更快。所谓的字符串指令具有相当高的指令延迟,它们与寄存器%edi用于存储和%esi仅用于加载有关。不,这绝对不像ARM的通用post/pre in/DECRUMENT寻址那样灵活。现在,当此指令存在时。。。序列mov%esi,%eax;lea 4%esi,%esi可能更快。所谓的字符串指令具有相当高的指令延迟,它们与寄存器%edi用于存储和%esi仅用于加载有关。不,这肯定不如ARM的通用post/pre in/DECRUMENT寻址灵活。