TOP

汇编概念辨析(Intel/AT&T syntax、GAS、NASM)

写在前面

本文并不详细介绍Intel syntax、AT&T syntax、GAS、NASM的具体内容和具体区别,而是从概念辨析的角度说明这些专有名词的含义,以便为初学者扫清疑惑。有兴趣深入了解相关知识的读者请自行学习。

正文

1. Intel syntax vs AT&T syntax

  1. 这是两种不同的汇编语法,可以简单地认为是两种不同的汇编语言[1]
  2. Intel syntax主要用于DOS和Windows,而AT&T syntax主要用于UNIX[1,2]
  3. AT&T是American Telephone and Telegraph的缩写,AT&T是贝尔实验室的创建者之一,而UNIX系统在贝尔实验室诞生,因此UNIX下的汇编语言称为AT&T syntax[3,4,5]
  4. GNU的汇编器(即下文中的GAS)采用AT&T syntax,如 gcc -S filename.c 会生成AT&T syntax风格的汇编代码文件filename.s,如果想要生成Intel syntax风格的汇编代码,可以使用 gcc -S -masm=intel filename.c 命令。
  5. Intel syntax和AT&T syntax在编码上最大也是最应引起注意的区别是:两者指令的原操作数和目的操作数的位置正好是相反的。例如,Intel syntax下的指令 mov eax, 5 转换为AT&T syntax下的对应指令应为 movl $5, %eax [1]

2. GAS vs NASM

这是两种不同的汇编器,

  1. GAS是GNU Assembler的简写,基于AT&T syntax指令,生成.s文件[6]
  2. NASM是Netwide Assembler的简写,基于Intel syntax指令,生成.asm文件[6]
  3. 还有其它汇编器,如MASM (Microsoft Macro Assembler)、FASM (Flat Assembler)、TASM (Turbo Assembler)、YASM (Yet Another Assembler)等。常见汇编器的对比如下图所示(图片来自参考资料7)[1,7]

 

参考资料:

[1] Intel syntax vs AT&T syntax——wiki

[2] Intel syntax vs AT&T syntax——stackoverflow

[3] AT&T Corporation——wiki

[4] 贝尔实验室——wiki

[5] 贝尔实验室——知乎

[6] GAS vs NASM——CSDN

[7] Hacker Disassembling Uncovered, 2nd ed——google book

结束语

本文未生产知识,只是知识的搬运工。但由于在下才疏学浅,错误纰漏之处依然在所难免,如果您在阅读的过程中发现了本文的错误和不足,请您务必指出。您的批评指正就是在下前进的不竭动力!

posted @ 2021-06-01 22:00  同勉共进  阅读(2486)  评论(0编辑  收藏  举报