assembly x86 AT&T语法汇编的注解语法

cgvd09ve  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(191)

Intel的语法有使用分号的注解。当我切换到AT&T时,它实际上试图解释注解。
AT&T汇编的注解语法是什么?

pgccezyw

pgccezyw1#

AT&T汇编程序的注解为:

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

根据the fourth result Google gave me
///* */注解只在.S文件中受支持,因为GCC在汇编之前会在它们上运行C预处理器。对于.s文件,实际汇编器本身(as)只将#作为注解字符处理,对于x86。
对于某些其他ISA,GAS使用其他注解字符,例如@表示ARM。

qfe3c7zg

qfe3c7zg2#

GNU AS注解

以下代码由as直接处理(而不是C预处理程序)。

  • #注解-用作“行的其余部分”注解。

重要警告:#也是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的期望非常接近。

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

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

那么,我应该使用什么呢?

  • 如果您 * 不 * 允许预处理所有内容,请选择一种GNU AS注解样式,#/
  • 如果你确信你 * 会 * 预处理所有的东西,那么使用C风格的注解///**/可能会更安全,以避免预处理器问题。
  • 如果您担心必须同时处理这两个文件,请选择/##,这样您就不必担心预处理程序或任何一个文件缺少预处理程序。##的功能更丰富,但可能导致代码更混乱。
  • 不管是什么情况,选择一个,并保持一致。
kpbwa7wx

kpbwa7wx3#

请尝试#或//或/* */。可能有效

相关问题