NASM(英特尔)与AT&T语法:有什么优势?

6 assembly nasm att

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

长期来说:

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

我也很感激您可以与我分享的任何偏好.

Lel*_*mbo 5

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

无论您愿意与谁一起工作

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

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

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

AFAIK Intel 语法使用更广泛。您可以检查支持 Intel 和 AT&T 的汇编器数量。

  • 嗯……有些人的想法确实是简洁=可读,但这种可读性只适用于那些有足够经验的人。即使是经验丰富的人有时也会忘记(曾经用 APL 编写过代码吗?)。虽然可读,我的意思是字面上可读。 (3认同)
  • 我觉得这个经验点很奇怪,因为我不到一个月前开始学习汇编,几乎没有经验,而且我发现 AT&T 语法从一开始就更直观。一个小例外是 32 位操作数使用“l”后缀,而不是使用更符合逻辑的“d”来缩短“dword”。 (2认同)
  • 我觉得很奇怪,您觉得有必要对两个问题发表相同的评论,而不是指出这是[另一个问题](http://stackoverflow.com/questions/972602)的重复。:P 至于你的疑虑,并不是 AT&T 可读性较差,而是 Intel 对 C[类] 程序员更熟悉,模仿赋值表达式、强制转换、中缀运算符等。 (2认同)

Gun*_*iez 5

  • 关注哪种语法更好?

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

  • 这些语法有哪些优缺点?

在AT&T语法中%,如果需要使用宏,则会有更多甚至更多.OTOH我更喜欢源,目的地排序,但那是个人品味,其他人可能更喜欢它,因为它类似于C中的赋值运算符的写入顺序(以及更多).

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

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

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