assembly - jmp 指令 *%eax

标签 assembly x86 att

在 Google Native Client 的论文中,作者定义了一个 nacljmp如这两条指令:

and   $0xffffffe0, %eax   # Clears the 5 least significant bits in %eax.
jmp   *%eax

首先,我可以看到他们清除了 5 个最低有效位,以便在跳转到指针之前将指针向下舍入到 32 字节对齐边界。也许对于使用低 5 位数据的标记指针实现。

但是,%eax之前的星号是什么意思? ?

我搜索了许多关于 x86 程序集的教程,但运气不佳。

最佳答案

jmp *%eaxjmp eax 的 AT&T 语法,这是 jmp r/m32 的一种形式.它将跳转到寄存器 eax 中包含的地址。 :

Jump near, absolute indirect, address given in r/m32.



同类型跳转指令的另一种形式是jmp *(%eax)对应于 jmp [eax]在英特尔语法中。它将跳转到存储在寄存器 eax 指向的 32 位内存位置的地址。 .

关于assembly - jmp 指令 *%eax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30802831/

相关文章:

程序集 - 程序按预期工作,但第二次运行时,打印出乱码

assembly - MIPS计算跳转指令的机器编码

linux - ASM 调用 Printf

assembly - 如何遍历汇编中的字符串,直到到达null? (strlen循环)

assembly - 如何在 SSE 寄存器末尾添加 "remove"字节?

c - 内联汇编程序 : What scratch registers can be used?

c - ATtiny2313 上的初始化堆栈指针

linux - 在 64 位 Linux 上从 32 位模式切换到 64 位(长模式)

javascript - 在 OdinMonkey 中优化 asm.js

linux - 如何在程序集中创建具有动态指定文件路径的文件?