使用Intel语法从寄存器名称中消除标签歧义

Rui*_*ama 5 x86 assembly symbols gnu-assembler intel-syntax

我想知道如何在Intel语法的某些指令中将标签名称与寄存器名称区分开。例如,call rdx通常意味着间接跳转,但是如果我们rdx在同一程序集文件中有标签怎么办?我认为可以将其解释为直接跳转到rdx。是否有任何符号告诉汇编器是哪个?

kal*_*ann 3

有没有任何符号可以告诉汇编器哪个是哪个?

这取决于您使用的汇编器。没有通用的语法可以做到这一点。

然而,一些汇编器具有区分标签和保留字的功能。例如,nasm 文档中的“3.1 NASM 源代码行的布局”部分指出,您可以在标签前加上 a 前缀$以将其与寄存器区分开来:

标识符也可以带有 a 前缀,$以指示它旨在被读取为标识符而不是保留字;因此,如果您链​​接的其他模块定义了一个名为 eax 的符号,您可以在 NASM 代码中引用$eax以区分该符号与寄存器