11

Intel 语法有使用分号的注释。当我切换到 AT&T 时,它实际上试图解释这些评论。

AT&T 程序集的注释语法是什么?

4

3 回答 3

15

at&t 汇编器的注释是:

 # this is a comment
 /* this is a comment */

根据谷歌给我的第四个结果

///* */注释仅在.S文件中受支持,因为 GCC 在汇编之前对它们运行 C 预处理器。对于.s文件,实际的汇编程序本身 ( as) 仅#作为注释字符处理,对于 x86。

对于其他一些 ISA,GAS 使用其他注释字符,例如@ARM。

于 2013-07-03T07:51:46.303 回答
8

GNU AS 评论

以下由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
    

C 风格的注释(预处理器)

如果 C 预处理器在源文件上运行,这些将起作用。

在大多数架构中,支持以下内容:

  • // Rest of line comment与您对 C 的期望几乎一样。

    在极少数情况下,这会导致.伪操作出现问题。要解决此问题,我只需使用块注释或将注释移至前一行。

  • /* Use this for block comments */. 我目前没有遇到任何问题。

那我用什么?

  • 如果您不允许对所有内容进行预处理,请选择一种 GNU AS 注释样式,#/.
  • 如果您确定要对所有内容进行预处理,那么使用 C 风格的注释///**/避免预处理器问题可能会更安全。但是,如果您牢记隐藏的陷阱,则应该没问题。
  • 如果您担心必须同时处理两者,请选择其中一个/##这样您就不必担心预处理器或任何一个文件上缺少预处理器。##更通用,但可能导致代码更混乱。
  • 不管是什么情况,选择一个并保持一致。
于 2015-04-30T04:48:37.150 回答
1

尝试 # 或 // 或 /* */。可能工作

于 2013-07-03T07:49:51.253 回答