Intel 语法使用分号进行注释。当我切换到 AT&T 时,它实际上试图解释这些评论。
AT&T 汇编的注释语法是什么?
at&t 汇编器的评论是:
# this is a comment
/* this is a comment */
//
和 /* */
注释仅在 .S
文件中受支持,因为 GCC 在汇编之前对它们运行 C 预处理器。 对于 .s
文件,实际的汇编程序本身 (as
) 仅将 #
作为注释字符(对于 x86)。
对于其他一些 ISA,GAS 使用其他注释字符,例如 ARM 的
@
。
以下由
as
直接处理。 (不是 C 预处理器。)
#
注释 - 用作“其余行”注释。
重要警告:
#
也是 GCC 预处理器指令符号。预处理器首先运行,所以这意味着如果您正在运行它,
# include comments in your code to get full credit
在行首(空格不算在内)会给你
error: #include expects "FILENAME" or <FILENAME>
与 gcc,即使在 #
之后有一个空格。
但是,这些是区分大小写的,因此大写
# Include
实际上有效:
# Include comments in your code to get full credit
虽然将评论的第一个字母大写通常是一个好习惯,但您可以使用
##
作为以防万一的措施。 (只是不要在属于 #define
宏一部分的任何行上使用它,因为 ##
也是标记粘贴运算符。)
/
评论 - 行首评论
这些只能用在行首(删除空格后)。
/ This is OK
xor %eax, %eax / This is *not* ok
在大多数架构中,支持以下内容:
// Rest of line comment
的效果与您对 C 的期望非常相似。在极少数情况下,这会导致
.
伪操作出现问题。为了解决这个问题,我只需使用块注释或将注释移至前一行。
/* Use this for block comments */
。我目前还没有遇到任何问题。
#
或
/
。
//
和
/**/
可能会更安全,以避免预处理器问题。然而,如果你记住隐藏的陷阱,你应该没问题。
/
或
##
,这样您就不必担心任何一个文件上的预处理器或缺少预处理器。
##
更通用,但可能会导致代码更混乱。
Intel 语法使用分号进行注释。实际上,在 Clang 和 GNU 汇编器的
.intel_syntax noprefix
模式中,注释字符与
.att_syntax
模式中的相同,并且
;
仍然是语句分隔符(允许您将多个指令放在同一源代码行上)。不同的
汇编器有不同的注释字符。 NASM / FASM / MASM 都使用 ;
作为注释字符。 它们仅支持(不同风格的)Intel 语法,所以您可能是指从其中一种语法切换到 GAS,而不仅仅是从 GAS Intel 语法切换到 GAS AT&T 语法。 (YASM 显然支持 GAS 语法以及默认的 NASM 风格,但我还没有尝试过。)