这确实是我的一个愚蠢的特质,但我无法忍受 GNU AS 用来插入评论的方式。我太习惯于 Sun 方式(在大多数 UNIX 汇编程序中使用的方式相同),它使用一个简单的斜杠“/”来注释代码直到行尾。
你知道有什么方法可以完成我的小奇思妙想吗?
这确实是我的一个愚蠢的特质,但我无法忍受 GNU AS 用来插入评论的方式。我太习惯于 Sun 方式(在大多数 UNIX 汇编程序中使用的方式相同),它使用一个简单的斜杠“/”来注释代码直到行尾。
你知道有什么方法可以完成我的小奇思妙想吗?
在 Gnu 汇编器中,注释开始字符是特定于目标的。对于 i386 和 x86_64,它是 #。对于 ARMv7,它是 @。
其他一些注释约定在某些条件下有效。我不确定细节。// comment starter 和 /* */ 多行注释是我见过的例子。
是的,继续使用#
,你会习惯的。
可能有一些方法可以/
开始工作,但是您的代码不仅是特定于处理器的,而且是特定于计算机的。你最好习惯小事情,而不是完全破坏代码的可移植性来幻想一时兴起。
GNU GAS 文档
在“机器依赖”部分下,进入每个拱门,然后进入“语法”和“字符”。
这记录了每个拱门的评论。
x86
https://sourceware.org/binutils/docs-2.26/as/i386_002dChars.html#i386_002dChars
出现在行中任何地方的“#”表示注释的开始,该注释延伸到该行的末尾。
如果“#”作为一行的第一个字符出现,则整行被视为注释,但在这种情况下,该行也可以是逻辑行号指令(请参阅注释)或预处理器控制命令(请参阅预处理) .
如果没有指定 --divide 命令行选项,那么出现在行中任何位置的“/”字符也会引入行注释。
但是,我要么遗漏了某些东西,要么存在错误,因为我的测试与文档不匹配。
好的:
/ mycomment
# mycomment
nop # mycomment
失败:
nop / mycomment
这表明/
只有当它是第一个字符时才有效。
并且--divide
没有任何区别。
手臂
行中任何地方出现“@”表示注释的开始,该注释延伸到该行的末尾。
如果“#”作为一行的第一个字符出现,则整行被视为注释,但在这种情况下,该行也可以是逻辑行号指令(请参阅注释)或预处理器控制命令(请参阅预处理) .
我的测试arm-linux-gnuabihf-as
证实了文档所说的内容。
好的:
# mycomment
@ mycomment
nop @ mycomment
失败:
nop # mycomment
aarch64
https://sourceware.org/binutils/docs-2.26/as/AArch64_002dChars.html#AArch64_002dChars
行上出现'//' 表示注释的开始延伸到当前行的结尾。如果“#”作为一行的第一个字符出现,则整行都被视为注释。
此外, ARMv8-fb 手册在 C1.2“A64 汇编语言的结构”本身也鼓励了这一点:
在 C1-185 页的示例 C1-1 中,序列 // 用作注释前导符,鼓励 A64 汇编器接受此语法。
我的测试aarch64-linux-gnuabihf-as
证实了文档所说的内容。
好的:
// mycomment
# mycomment
nop // mycomment
失败:
nop # mycomment
个人推荐
如果可以选择,只需始终使用 C 预处理器编译程序集gcc
或cpp
显式使用 C 预处理器,并使用 C 预处理器注释:
/* mycomment */
因为:
#
不好,因为它可能与#
预处理器指令冲突在 Ubuntu 16.04、Binutils 2.26.1 上测试。