汇编 (,%eax,4)

标签 assembly att addressing-mode

如果我的命令行之一显示:

jmp   *0x804a180(,%eax,4)

这是什么意思?我特别询问是因为第一个逗号之前没有任何值,而且我不确定地址之前的 * 到底是什么意思。

最佳答案

该指令跳转到其值位于计算为%eax * 4 + 0x804a180的地址处。

AT&T 语法中使用* 来指示间接跳转和调用。它的基本意思是“跳转到 this 指向的位置,而不是 this 的值”。区分以下指令很有用:

jmp myAddress  # Jumps to the location myAddress
jmp *myPointer # Jumps to the location contained at myPointer

对于空值,它被视为 0。AT&T 寻址的完整形式是 offset(%base, %index, multiplier),但任何这些值都可以省略。除乘数(默认为 1)外,每个值的默认值都是 0。大多数时候,您可以将它们省略,但如果您有索引并且没有基数,则需要在那里使用逗号,以便汇编器可以区分哪个是的。

关于汇编 (,%eax,4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978560/

相关文章:

java - 用于方法入口/导出的 ASM 字节码检测

assembly - "call"切换到保护模式后

gcc - 无法从内核模式更改 CS 寄存器值。无效的操作码 : 0000

assembly - MIPS 中括号的作用是什么?

assembly - 为什么MIPS不能在寻址模式下使用两个寄存器?

c - C 中的非法汇编指令

c - 可执行文件中的符号是什么?

assembly - 为什么我们可以在16位模式下使用eRx,而在32位模式下不能使用rRx?

assembly - 有关 VGA 和 putpixel intel x86 asm AT&T 语法的帮助