Intel的语法有使用分号的注解。当我切换到AT&T时,它实际上试图解释注解。AT&T汇编的注解语法是什么?
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。
//
/* */
.S
.s
as
#
@
qfe3c7zg2#
以下代码由as直接处理(而不是C预处理程序)。
重要警告:#也是GCC预处理器指令符号。预处理器首先运行,这意味着如果你 * 正在 * 运行它,
# include comments in your code to get full credit
在行首(空格不算在内),即使在#后面有空格,也会给予带有gcc的error: #include expects "FILENAME" or <FILENAME>。但是,它们区分大小写,因此大写# Include实际上是有效的:
error: #include expects "FILENAME" or <FILENAME>
# Include
# Include comments in your code to get full credit
尽管通常最好将注解的首字母大写,但也可以使用##作为以防万一的措施(只是不要在#define宏的任何行中使用它,因为##也是标记粘贴操作符)。
##
#define
/
它们 * 只能 * 用于行首(删除空格后)。
/ This is OK xor %eax, %eax / This is *not* ok
如果C预处理器在源文件上运行,则这些方法有效。在大多数体系结构中,支持以下内容:
// Rest of line comment
在极少数情况下,这会导致.伪操作出现问题。要解决此问题,我只需使用块注解或将注解移到前一行。
.
/* Use this for block comments */
/**/
kpbwa7wx3#
请尝试#或//或/* */。可能有效
3条答案
按热度按时间pgccezyw1#
AT&T汇编程序的注解为:
根据the fourth result Google gave me
//
和/* */
注解只在.S
文件中受支持,因为GCC在汇编之前会在它们上运行C预处理器。对于.s
文件,实际汇编器本身(as
)只将#
作为注解字符处理,对于x86。对于某些其他ISA,GAS使用其他注解字符,例如
@
表示ARM。qfe3c7zg2#
GNU AS注解
以下代码由
as
直接处理(而不是C预处理程序)。#
注解-用作“行的其余部分”注解。重要警告:
#
也是GCC预处理器指令符号。预处理器首先运行,这意味着如果你 * 正在 * 运行它,在行首(空格不算在内),即使在
#
后面有空格,也会给予带有gcc的error: #include expects "FILENAME" or <FILENAME>
。但是,它们区分大小写,因此大写
# Include
实际上是有效的:尽管通常最好将注解的首字母大写,但也可以使用
##
作为以防万一的措施(只是不要在#define
宏的任何行中使用它,因为##
也是标记粘贴操作符)。/
注解-行首注解它们 * 只能 * 用于行首(删除空格后)。
C样式注解(预处理器)
如果C预处理器在源文件上运行,则这些方法有效。
在大多数体系结构中,支持以下内容:
// Rest of line comment
的工作方式与您对C的期望非常接近。在极少数情况下,这会导致
.
伪操作出现问题。要解决此问题,我只需使用块注解或将注解移到前一行。/* Use this for block comments */
。我目前还没有遇到任何问题。那么,我应该使用什么呢?
#
或/
。//
和/**/
可能会更安全,以避免预处理器问题。/
或##
,这样您就不必担心预处理程序或任何一个文件缺少预处理程序。##
的功能更丰富,但可能导致代码更混乱。kpbwa7wx3#
请尝试#或//或/* */。可能有效