92

对我来说,英特尔语法更容易阅读。如果我只专注于英特尔语法的汇编森林,我会错过任何东西吗?我有什么理由想切换到 AT&T(除了能够阅读其他人的 AT&T 程序集之外)?我的第一个线索是 gdb 默认使用 AT&T。

如果这很重要,那么我的重点只在于 Linux/BSD 和 C 语言可能具有的任何关系汇编和语法。

4

7 回答 7

85

一个比另一个真的没有优势。我同意英特尔语法容易阅读。请记住,AFAIK,所有 GNU 工具也可以选择使用 Intel 语法。

看起来您可以通过以下方式使 GDB 使用 Intel 语法:

设置拆解-风味intel

GCC 可以使用-masm=intel.

于 2009-06-09T21:32:12.557 回答
46

GNU 汇编器 (GAS) 的主要语法是 AT&T。英特尔语法是一个相对较新的补充。Linux 内核中的 x86 程序集采用 AT&T 语法。在 Linux 世界中,这是常见的语法。在 MS 世界中,Intel 语法更为常见。

就个人而言,我讨厌 AT&T 语法。有很多免费的汇编程序(NASM、YASM)以及支持 Intel 语法的 GAS,因此在 Linux 中执行 Intel 语法不会有任何问题。

除此之外,这只是句法上的差异。两者的结果将是相同的 x86 机器代码。

于 2009-06-09T21:36:13.703 回答
36

一个比另一个真的没有优势。我不同意 Intel 语法更容易阅读,因为我个人讨厌 Intel 语法。请记住,AFAIK,所有 GNU 工具也可以选择使用 Intel 语法。

at&t noprefix                   intel
mov eax, -4(ebp,edx,4)          mov DWORD PTR[-4 +ebp +edx *4], eax
mov eax, -4(ebp)                mov DWORD PTR[-4 +ebp], eax
mov edx, (ecx)                  mov DWORD PTR[ecx], edx
lea (   ,eax,4), eax            lea eax, DWORD PTR[8 + eax*4]
lea (eax,eax,2), eax            lea eax, DWORD PTR[eax*2+eax]

...并且随着更复杂的指令变得更加复杂

'纳夫说。

PS:这个答案的存在主要是为了突出其他一些答案中的(恕我直言)弱点,这些实际上不是答案,而是意见。当然,现实中的这个答案只是我的拙见。

PPS: I do not hate Intel syntax, I just don't care.

于 2012-03-31T18:22:50.290 回答
25

它是“相同的语言”,因为它编译成相同的机器代码,具有相同的操作码等。另一方面,如果您使用 GCC,您可能想要学习 AT&T 语法,因为它是默认值——不更改编译器选项等来获取它。

我也开始使用 Intel-syntax x86 ASM(也在 DOS 上),并在最初切换到 C/UNIX 时发现它更直观。但是一旦你学会了 AT&T,它看起来就一样简单了。

我不会多想——一旦你了解了英特尔,就很容易学习 AT&T,反之亦然。实际的语言比语法更难进入你的脑海。因此,无论如何,只要专注于一个,然后在出现另一个时学习另一个。

于 2009-06-09T21:37:22.390 回答
20

这是专业精神的标志,你愿意适应正在使用的任何东西。两者都没有真正的优势。intel 语法在 Microsoft 世界中很常见,AT&T 是 Linux/Unix 中的标准。由于两者都没有优势,人们倾向于在他们首先看到的任何东西上留下印记。也就是说,一个专业的程序员会提出这样的事情。使用他们在工作中或在您工作的领域中使用的任何东西。

于 2011-06-21T06:25:02.223 回答
13

英特尔语法涵盖了所有内容(假设汇编器/反汇编器是最新的,最新的垃圾英特尔添加到他们的指令集中)。我敢肯定 at&t 是一样的。

美国电话电报公司
movl -4(%ebp, %edx, 4), %eax mov eax, [ebp-4+edx*4]
movl -4(%ebp), %eax mov eax, [ebp-4]
movl (%ecx), %edx mov edx, [ecx]
leal 8(,%eax,4), %eax lea eax, [eax*4+8]
leal (%eax,%eax,2), %eax lea eax, [eax*2+eax]

...并且随着更复杂的指令变得更加复杂

'纳夫说。

于 2012-03-31T00:24:11.977 回答
3

我的第一个汇编语言是 MIPS,我注意到它与 ATT 语法非常相似。所以我更喜欢 ATT 语法,但只要你能读懂它并不重要。

于 2010-11-07T19:14:20.840 回答