• 汇编概念辨析(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

    结束语

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

  • 相关阅读:
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    node.js&electron$npm的关系
    前端常用相关缩写
    PS通道抠图
    (AOP)理解
    mybatis内置二级缓存。
  • 原文地址:https://www.cnblogs.com/zpcdbky/p/14837963.html
Copyright © 2020-2023  润新知