x86 AT&T 语法汇编的注释语法

问题描述 投票:0回答:4

Intel 语法使用分号进行注释。当我切换到 AT&T 时,它实际上试图解释这些评论。

AT&T 汇编的注释语法是什么?

assembly comments gnu-assembler att intel-syntax
4个回答
19
投票

at&t 汇编器的评论是:

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

根据Google给我的第四个结果

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

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

@


9
投票

GNU AS 评论

以下由

as
直接处理。 (不是 C 预处理器。)

  • #
    注释 - 用作“其余行”注释。

    重要警告:

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

    # include comments in your code to get full credit
    

    在行首(空格不算在内)会给你

    error: #include expects "FILENAME" or <FILENAME>
    与 gcc,即使在
    #
    之后有一个空格。

    但是,这些是区分大小写的,因此大写

    # 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 风格注释 //
    /**/
     可能会更安全,以避免预处理器问题。然而,如果你记住隐藏的陷阱,你应该没问题。
  • 如果您担心必须处理两者,请选择
  • /
    ##
    ,这样您就不必担心任何一个文件上的预处理器或缺少预处理器。 
    ##
     更通用,但可能会导致代码更混乱。
  • 无论情况如何,选择其中之一并保持一致。

1
投票
尝试#或//或/* */。可能有用


0
投票
Intel 语法使用分号进行注释。

实际上,在 Clang 和 GNU 汇编器的

.intel_syntax noprefix

 模式中,注释字符与 
.att_syntax
 模式中的相同,并且 
;
 仍然是语句分隔符(允许您将多个指令放在同一源代码行上)。

不同的

汇编器有不同的注释字符。 NASM / FASM / MASM 都使用 ;

 作为注释字符。  它们仅支持
(不同风格的)Intel 语法,所以您可能是指从其中一种语法切换到 GAS,而不仅仅是从 GAS Intel 语法切换到 GAS AT&T 语法。

(YASM 显然支持 GAS 语法以及默认的 NASM 风格,但我还没有尝试过。)

© www.soinside.com 2019 - 2024. All rights reserved.