x86 AT&T 语法程序集的注释语法



英特尔语法包含使用分号的注释。当我转到AT&T、 它实际上试图解读这些评论。

AT&T组件?

at&t汇编程序是:

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

根据第四个结果,谷歌给了我

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

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

GNU AS注释

以下内容由as直接处理。(不是C预处理器。)

  • CCD_ 9评论-作为";行的其余部分";议论

    重要提示:#也是GCC预处理器指令符号。预处理器首先运行,所以这意味着如果正在运行它,

    # include comments in your code to get full credit
    

    行的开头(空白不计算在内)将为您提供带有gcc的error: #include expects "FILENAME" or <FILENAME>,即使在#之后还有一个空格。

    然而,这些是区分大小写的,所以大写# 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.的期望相当

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

  • CCD_ 20。我目前还没有遇到任何问题。

那么我该用什么呢

  • 如果不允许预处理所有内容,请选择GNU AS Comment样式之一#/
  • 如果您确信预处理所有内容,那么使用C样式注释///**/可能更安全,以避免预处理器问题。然而,如果你记住隐藏的陷阱,你应该没事
  • 如果您担心必须同时处理这两种情况,请选择/##,这样您就不必担心预处理器或任何一个文件上缺少预处理器。##更通用,但可能导致更混乱的代码
  • 无论是什么情况,都要选择一个并保持一致

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

最新更新