大多数差异出现在特定的指令格式中,将作为指令涵盖在章节中讨论。Intel 和AT&T 语法的主要区别如下:
- AT&T 立即操作数使用 $ 来表示它们,而 Intel 立即操作数是未定界(udelimited)。因此,在 AT&T 语法中引用十进制值 4 时,您将使用 $4,在 Intel 语法中,您只需使用 4。
- AT&T 在注册名称前加上 %,而 Intel 则没有。因此,引用 EAX 寄存器在 AT&T 语法中,您将使用 %eax。
- AT&T 语法对源操作数和目标操作数使用相反的顺序。移动小数点值 4 到 EAX 寄存器,AT&T 语法将是 movl $4, %eax,而对于 Intel 它将是是 mov eax, 4。
- AT&T 语法在助记符末尾使用一个单独的字符来引用所使用的数据大小在操作中,而在 Intel 语法中,大小被声明为一个单独的操作数。AT&T指令 movl $test, %eax 等同于 Intel 语法中的 mov eax, dword ptr test。
- 长调用和跳转使用不同的语法来定义段和偏移值。AT&T syn tax 使用 ljmp $section, $offset,而 Intel 语法使用 jmp section:offset。
虽然差异可能导致难以在两种格式之间切换,但如果您坚持使用一种或其他你应该没问题。如果您使用 AT&T 语法学习汇编语言编码,您将在大多数可用的 UNIX 系统上舒适地创建汇编语言程序,在大多数任何硬件平台。如果您计划在 UNIX 和 Microsoft Windows 之间进行跨平台工作系统,您可能需要考虑为您的应用程序使用 Intel 语法。
本文链接地址:at&t和intel汇编差异,英雄不问来路,转载请注明出处,谢谢。
有话想说:那就赶紧去给我留言吧。
文章评论