MENU

1994世界杯_1954年世界杯 - hengshuifu.com

不同汇编语言的对比

不同汇编语言的对比

在学习汇编语言的过程中, 我们会听到很多很多关于汇编语言的名词, 比如NASM汇编, AT&T风格汇编, ARM汇编, 而大多国内教材教授的都是基于x86平台的MASM汇编语言, 由于缺少对其他汇编语言的介绍, 我们学习完教材后仍然对其他汇编语言的概念和名词不太了解, 导致见到这些名词时一头雾水, 本文旨在通过整理各种资料解释这些名词的含义及区别

文章目录

不同汇编语言的对比

1. 语言/编译器

1. MASM:

2. NASM:

3. FASM:

4. GoASM:

2. 汇编风格

Intel风格, AT&T风格差异对比:

1. 寄存器命名 %

2. 立即数格式 $

3. 操作数顺序

4. 内存操作数的寻址方式

5. 数据宽度表示

3. 指令集架构(ISA)

1. x86

2. x86-64/x64/amd64/Intel64

3. IA-64

4. ARM64/AArch64

实际上我们看到的汇编语言都是 编译器+风格+架构的组合

比如大部分国内教材使用的基于x86平台的MASM汇编语言就是:MASM+Intel风格(涵盖在MASM里)+x86架构

因此我以这三个范畴来区分我们看到的汇编语言的概念和名词

1. 语言/编译器

举例masm, nasm, tasm, yasm

主要区别: 编译器不同, 输出格式不同, 伪指令不同, 宏不同, 支持操作系统平台不同

1. MASM:

微软经典产品,仅支持Windows平台,唯一完美支持按需编译的编译器,不支持输出bin格式。非绿色软件,受版权限制不能二次发行(SASM二次发行了多个汇编编译器唯独没有MASM)。

2. NASM:

一直在持续更新的经典产品,跨平台,支持多种输出格式(bin/coff/omf/elf/…)。有不少衍生品如YASM,可那些衍生品还不如本尊NASM命长。

3. FASM:

还在更新,跨平台,支持多种输出格式(包括bin)。作者在汇编GUI领域走的非常远(参见Fresh IDE及其freshlib),我个人感觉有点偏离汇编正途,用力用错了方向,嘿嘿(我用C++/QT写GUI都嫌麻烦更不要说汇编)。

4. GoASM:

仅支持Windows平台,不支持输出bin格式。作者很有想法,做了大量工作简化Windows应用开发。缺点是加入太多自己的东西,有绑架用户的嫌疑,不利于编写可移植代码。JMP label生成长跳转(E9)而不是短跳转(EB)让我挺无语(见下文代码,其文档中视之为unique label)。

2. 汇编风格

举例Intel风格, AT&T风格

主要区别: 立即数,寄存器的表示方式不同, 数据宽度的表示方式不同,

Intel风格, AT&T风格差异对比:

Win家一般使用Intel风格, 开源界和类Unix系统一般使用AT&T风格

1. 寄存器命名 %

在AT&T风格中,寄存器会加上%作为前缀.而Intel汇编中寄存器名是不需要加前缀的.可以直接使用.

AT&T风格

Intel风格

说明

Copyright © 2022 1994世界杯_1954年世界杯 - hengshuifu.com All Rights Reserved.
最新发表
友情链接