汇编中的“%”有什么用?例如,有时一条指令写成:
movl %eax, %ebx
其他时候它写成:
movl eax, ebx
(没有百分号)有什么区别?
对于所有的汇编程序,当您需要引用一个恰好与寄存器同名的符号时,就会出现问题。例如,如果你有一些包含函数“int eax()”的 C 代码,并且你将它与一些执行“mov ebx,eax”的汇编代码链接,那么汇编器需要知道“eax”是否是寄存器还是函数。
为了解决不同的汇编程序做不同的事情。一些(例如 NASM)会假设“eax”是寄存器,并且需要某种前缀用于模棱两可的符号(例如,“$eax”指的是符号而不是寄存器)。其他人(例如 GAS)则相反,并在寄存器名称中添加前缀;有时即使完全没有歧义(例如,“%eax”指代寄存器,“eax”指代符号)。
X86 汇编语法有不同的风格。带有 % 的那个叫做 AT&T。另一个叫英特尔。不同的汇编器使用不同的语法。一些(气体)可以同时使用。