英特尔汇编语法与AT&T相比的局限性

对我来说,英特尔语法更容易阅读。 如果我只通过英特尔语法去集合森林,我会错过任何东西吗? 是否有任何理由我想切换到AT&T(除了能够读取其他AT&T组件)? 我的第一个线索是gdb默认使用AT&T。

如果这件事情,我的重点只是任何关系汇编和语法可能要Linux / BSD和C语言。

其中一个真的没有优势。 我同意英特尔语法容易阅读。 请记住,AFAIK,所有的GNU工具都可以select使用英特尔语法。

看起来你可以让GDB使用Intel语法:

设置拆卸风味英特尔

GCC可以使用-masm=intel来执行Intel语法。

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

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

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

其中一个真的没有优势。 我不同意,虽然英特尔语法更容易阅读,因为个人讨厌英特尔语法 。 请记住,AFAIK,所有的GNU工具都可以select使用英特尔语法。

 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] 

…随着更复杂的指令变得更复杂

“nuff说。

PS:这个答案主要是为了强调(恕我直言)在其他答案,其实是不是答案,但意见的弱点。 当然这个答案实际上只是我的愚见。

PPS:我不讨厌英特尔语法,我只是不在乎。

这是“相同的语言”,因为它编译到相同的机器代码,具有相同的操作码等。另一方面,如果你使用GCC,你可能会想学习AT&T的语法,只是因为它默认 – 没有改变的编译器选项等来获取它。

我也在英特尔语法的x86 ASM(DOS上也是如此)中断了它,并且在切换到C / UNIX时发现它更直观。 但是一旦你学习了AT&T,它就会变得如此简单。

我不会那么想 – 一旦你了解了英特尔,学习AT&T很容易,反之亦然。 实际的语言比语法要困难得多。 所以一定要把注意力集中到一个,然后在出现时学习另一个。

这是一个专业的标志,你愿意适应任何使用。 其中一个或另一个没有真正的优势。 英特尔语法在微软世界中很常见,AT&T是Linux / Unix中的标准。 既然没有任何一方面的优势,人们往往会先看到他们所看到的东西。 也就是说,一个专业程序员提出这样的事情。 使用他们在工作中使用的任何东西,或在你工作的领域。

英特尔语法涵盖了所有内容(假设汇编/反汇编程序是最新版本的英特尔添加到他们的指令集)。 我确定&t是一样的。

 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]

…随着更复杂的指令变得更复杂

“nuff说。

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