Dan*_*cco 2 x86 assembly arm addressing-mode
使用 ARM,我可以访问这样的内存位置:
LDR r0, [r1, #4]!
Run Code Online (Sandbox Code Playgroud)
意思是我想加载 r1 指向的值,偏移量为 4 个字节,并且 ! 意味着我希望在这条指令之后用新值(即+4)更新r1 的值。
x86 上是否有等效的语法(如果可能的话,AT&T 语法)?例如:
movl 4(%ebx), %eax
Run Code Online (Sandbox Code Playgroud)
这会将 %ebx 所指向的值(偏移量为 4 个字节)加载到 %eax 中。加载后如何更新 %ebx 的值?
谢谢。
我认为您正在寻找的指令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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |