【问题标题】:NASM (Intel) versus AT&T Syntax: what are the advantages?NASM(英特尔)与 AT&T 语法:有什么优势?
【发布时间】:2012-01-22 21:08:06
【问题描述】:

我正在浏览英特尔处理器文档并同时编写一些基本的汇编代码。我的服务器上有nasmas (GAS),我了解这两个汇编程序的基本区别。

从长远来看:

  • 关注这些语法中的哪一个更好?
  • 这些语法的优缺点是什么?
  • 哪一种被更广泛地使用和理解?

如果您能与我分享任何偏好,我也将不胜感激。

【问题讨论】:

  • 我更喜欢 Intel 语法,而 真的 不喜欢 AT&T 语法,尽管您在 Linux 中看到的 AT&T 语法更多。这个问题和你的类似:AT&T vs Intel Syntax and Limitations?
  • 我似乎也发现 Intel 语法更好。我已经搜索了类似的问题,但没有遇到这个问题,如果它被认为是完全重复的,我很抱歉。

标签: assembly nasm att


【解决方案1】:
  • 关注这些语法中的哪一个更好?

取决于您的项目。并非每个编译器都允许这两种语法。如果您需要在其他平台上组装代码,英特尔可能会更好,即使经过几年的经验,我个人更喜欢英特尔,但这只是一个很小的区别,对我来说并不重要。

  • 这些语法的优缺点是什么?

在 AT&T 语法中,% 的数量略多,如果您需要使用宏,则更多。 OTOH 我更喜欢 source, destination 顺序,但这是个人喜好,其他人可能更喜欢它,因为它类似于 C 中赋值运算符的书写顺序(以及更多)。

我的 INTEL 语法是像 DWORD PTR 这样的猥亵,而在 AT&T 中,一个小的附加 l 就足够了。在许多情况下,助记符的确切拼写不同,我发现 AT&T 更合乎逻辑,而英特尔的方式当然是标准。 Intel 中的寻址模式更具可读性。

  • 哪一种被更广泛地使用和理解?

我相信 AT&T 使用得更多,因为 linux 在嵌入式平台上无处不在,在嵌入式平台上,汇编程序比在其他软件项目中更常用。有更多的汇编程序可以理解 Intel 的语法,这是真的,但我相信 gcc/gas 更多地用于汇编程序很重要/有用的领域。

【讨论】:

    【解决方案2】:

    关注这些语法中的哪一个更好?

    你喜欢和谁一起工作

    这些语法的优缺点是什么?

    对我来说: 优点: - 英特尔:可读 - AT&T:更多平台(因为“as”在许多平台上都可用) 缺点: - 英特尔:许多汇编程序,但很少有共同的相似之处,许多功能是特定于汇编程序的 - AT&T:它为你的眼睛增加了 +/-

    哪一个被更广泛地使用和理解?

    AFAIK 英特尔语法被更广泛地使用。您可以查看支持 Intel 与 AT&T 的组装商数量。

    【讨论】:

    • AT&T 语法的可读性如何?我发现在操作数上使用大小后缀比使用“dword”更简洁。我还有什么遗漏的吗?
    • 嗯...有些人确实有简洁=可读的想法,但这种可读性只适用于那些有足够经验的人。即使是有经验的人有时也会忘记(曾经在 APL 中编码过吗?)。虽然我的意思是可读的,但实际上是可读的。
    • 我发现经验点很奇怪,因为我在不到一个月前开始学习汇编,几乎没有经验,而且我发现 AT&T 语法从一开始就更直观。一个小例外是对 32 位操作数使用 l 后缀,而不是使用更符合逻辑的 d 来缩短 dword
    • 我觉得奇怪的是你觉得有必要在两个问题上发布相同的 cmets,而不是指出这是 another question 的副本。 :P 至于你的疑虑,并不是 AT&T 的可读性差,而是英特尔对 C[-like] 程序员更熟悉,模仿赋值表达式、强制转换、中缀运算符等。
    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2021-02-06
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多