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