【问题标题】:Telling GAS to use semicolons for comments in Intel syntax mode告诉 GAS 在 Intel 语法模式下使用分号作为注释
【发布时间】:2020-12-25 09:11:16
【问题描述】:

我可以在 GAS 中使用分号作为注释字符吗?

我正在使用 GAS 2.30,Intel 语法如下。

.intel_syntax noprefix

.section .text

# Program entry point
.globl _start

_start:

    # Put the code number for system call
    mov eax, 1

    # Return value
    mov ebx, 0

    # Kernel call
    int 0x80

这很好用,只是我必须使用“#”作为注释字符而不是“;”。

重要的主要原因是我拥有的编辑器(SublimeText 3.2.2,build 3211)只有 ARM 或 NASM 汇编语法的语法高亮,它们都不理解 cmets 的“#”,正如我所关注的那样主要使用英特尔语法的材料,这是我希望与我所阅读的内容保持一致的内容。

我查看了英特尔手册、5000 多页的 PDF 文档,除非我以某种方式错过了它,否则它没有说明 cmets,尽管英特尔的 an introductory page 使用分号表示 cmets。

我的问题是,在这种情况下是否有可能让 GAS 使用分号而不是井号,或者这可能是只是习惯的小差异之一?

我知道 GAS 也会接受 /, // 和 /* */ 但 SublimeText 不理解这些。

有趣的是,告诉 SublimeText 使用 Bash 语法高亮是一个很好的解决方案,如下面的屏幕截图所示,但也许有一种方法可以配置 GAS 也使用分号?谢谢。

【问题讨论】:

  • 您不能切换注释字符,但如果您真的需要,您可以对文件进行预处理。我认为编辑语法高亮配置更简单。如果有适当的突出显示,您也可以只使用nasm。请注意,对于gas,指令也不同,并且可能会破坏突出显示。
  • @Jester - 谢谢。除了各种教程,我正在阅读的主要书籍是“现代 X86 汇编语言编程”,它使用 MASM,而我在 Linux 上。采用 Intel 语法的 GAS 似乎比 NASM 更接近 MASM,这也是我使用 GAS 的原因之一,也就是说,我希望在阅读本书时尽量减少对代码示例所做的更改。
  • 您可以执行类似 ;# 或 #; 的操作。看看你的语法高亮是否更快乐。
  • 英特尔文档将与他们创建或维护的任何英特尔汇编器相关,汇编语言特定于工具而不是目标,因此气体汇编不应与其他任何相同。如果它恰好是那么好,但如果不是那么那是预期的。他们喜欢使用分号来分隔指令 mov eax,1 ; mov ebx 0,可能用于预处理后输入汇编器的内联汇编。尽管历史上很多汇编语言都将它用于 cmets。
  • gas 人似乎有一种习惯,即确保 gas 汇编语言与处理器供应商的本地工具不兼容,只是生活的一部分,要么接受,要么离开。

标签: assembly gnu-assembler att intel-syntax


【解决方案1】:

不,gas 没有用于此的命令行开关或指令。评论字符为hardcoded

但是,如果您真的想要的话,在气源中更改它们并编译自定义版本似乎并不难。乍一看,您可能希望将; 添加到i386_comment_charsline_comment_chars,然后将其从line_separator_chars 中删除。

【讨论】:

  • 修改文本编辑器的语法高亮可能同样容易。作为一个好处,你的源代码可以是标准的 GAS 语法,而不是只能用于 GAS 的修补版本或自定义预处理器。仅仅因为在某些随机文本编辑器中突出显示默认值/选项而发明了另一种 x86 汇编语言的新方言,这是我一段时间以来听到的最糟糕的想法之一。
  • 我知道添加分号到 GAS 的选项只是为了完整性,正如您的答案中“如果你真的想要那个”部分所警告的那样。如果我只是为了自己的利益而编写代码,这不会那么糟糕,因为它会使 GAS 的 Intel 语法看起来更接近 MASM。但是此代码将与其他人共享,因此这不是一个真正的选择。相反,我想向 GAS 作者发送建议,但显然 opening an account 意味着一个人的电子邮件地址是公开的,所以我将不得不跳过它。
  • 这一切都说,是的,@PeterCordes,我知道每个 ISA 都有自己的汇编语法,但我没有意识到环境的碎片包括汇编程序,显然,我默认“英特尔语法”=“MASM 语法”。
  • @Terry:我认为上游 GAS 不太可能接受补丁以添加替代评论选项。 x86 asm 语法的更多碎片并不是一件好事。它不会让 GAS 组装 MASM 源,因为指令语法不同;为此使用 JWASM。
  • 我认为这可能会减少碎片,因为这意味着更统一,但无论如何,通过更改语法高亮显示,我可以更轻松地处理这些问题。顺便说一句,SublimeText 只是我用于非主要工作的编辑器,但纯粹是为了让你知道,它有几百万用户,所以它不像你在其他 cmets 中提到的那样随意。并不是说我真的与它有任何关系,但我只是说它不是一个小众的。
猜你喜欢
  • 1970-01-01
  • 2019-03-23
  • 2023-03-06
  • 2015-07-27
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 2012-11-24
相关资源
最近更新 更多