如何让GNU汇编程序使用斜杠/注释?

时间:2013-03-27 15:54:07

标签: assembly comments gnu gas

这确实是我的一个愚蠢的特质,但我不能忍受GNU AS用来插入评论的方式。我太习惯了Sun的方式(大多数UNIX汇编程序都使用它),它使用一个简单的斜杠“/”来注释掉代码直到行尾。

你知道如何实现我的一时兴起吗?

3 个答案:

答案 0 :(得分:18)

在Gnu汇编程序中,注释开始字符是特定于目标的。对于i386和x86_64,它是#。对于ARMv7,它是@。

其他一些评论惯例在某些条件下有效。我不确定细节。 //评论启动和/ * * /多行评论是我见过的例子。

答案 1 :(得分:12)

是的,继续使用#,您就会习惯它。

可能有一些方法可以使/工作,但是您的代码不仅仅是特定于处理器的,而是字面上特定于计算机的。你最好习惯于小事,而不是完全破坏你的代码的可移植性,以便随心所欲。

答案 2 :(得分:3)

GNU GAS文档

在“ Machine Dependencies”部分下,进入每个拱门,然后进入“语法”和“字符”。

本文记录了每个拱门的注释。

x86

https://sourceware.org/binutils/docs-2.26/as/i386_002dChars.html#i386_002dChars

  

一行中任何地方出现“#”表示注释的开始,该注释一直延伸到该行的末尾。

     

如果一行中的第一个字符显示为“#”,则将整行视为注释,但在这种情况下,该行也可以是逻辑行号指令(请参见注释)或预处理器控制命令(请参阅预处理。

     

如果未指定--divide命令行选项,则出现在行中任何地方的'/'字符也会引入行注释。

但是,由于我的测试与文档不匹配,我要么丢失了东西,要么有错误。

确定:

/ mycomment
# mycomment
nop # mycomment

失败:

nop / mycomment

这表明/仅在第一个字符时有效。

--divide没有任何作用。

手臂

https://sourceware.org/binutils/docs-2.26/as/ARM_002dInstruction_002dSet.html#ARM_002dInstruction_002dSet

  

一行中任何位置出现“ @”表示注释的开始,该注释一直延伸到该行的末尾。

     

如果一行中的第一个字符显示为“#”,则将整行视为注释,但是在这种情况下,该行也可以是逻辑行号指令(请参见注释)或预处理器控制命令(请参阅预处理。

我对arm-linux-gnuabihf-as的测试证实了文档中的内容。

确定:

# mycomment
@ mycomment
nop @ mycomment

失败:

nop # mycomment

aarch64

https://sourceware.org/binutils/docs-2.26/as/AArch64_002dChars.html#AArch64_002dChars

  

一行上有一个'//'表示注释的开始,该注释一直延伸到当前行的末尾。如果将“#”显示为一行的第一个字符,则将整行视为注释。

我对aarch64-linux-gnuabihf-as的测试证实了文档中的内容。

确定:

// mycomment
# mycomment
nop // mycomment

失败:

nop # mycomment

个人推荐

如果可以选择,只需始终使用gcc编译程序集或显式使用C预处理程序cpp并使用C预处理程序注释:

/* mycomment */

因为:

  • C是标准化的,它将适用于所有拱门
  • 在任何情况下,您都将需要C预处理程序,因为GNU GAS宏不够强大
  • #很糟糕,因为它可能与#预处理程序指令
  • 冲突

在Ubuntu 16.04,Binutils 2.26.1上进行了测试。