汇编语言与汇编器分类

-
-
2024-06-01

 

 

一、汇编语言概述

机器指令集(由众多机器码指令构成的集合)是由CPU的设计者制定的,CPU的内部电路设计就是为了实现这些指令集的功能。可以这样理解,机器指令集是一款CPU的硬件抽象,同时也是一款CPU的编程特征,就好像CPU的API接口。

因为机器码指令的可读性很差,于是设计者发明了助记符,这些助记符就形成了汇编语言。

不同的CPU会有不同的机器指令集,从而产生不同种类的汇编语言。汇编语言是一种基于具体CPU硬件的语言,几乎没有移植性。但是使用汇编语言执行效率最高,因为可以充分发挥CPU的设计特点,因此在内核中要求效率极高的地方,需要用汇编代码进行处理。

二、汇编语言分类

CPU架构的简介可知,目前主要的CPU架构有x86架构和ARM架构,因此常见的汇编语言分为两大类:X86汇编语言、ARM汇编语言。

X86汇编语言,根据处理器型号可以分为很多类,比如8086汇编(16位)、80X88汇编(也叫IBM PC汇编,16位)、80X86汇编(X大于3则指32位汇编)。X86汇编语言有两种语法风格,即Intel汇编和AT&T汇编

ARM汇编语言也有两种语法风格,即ARM官方汇编和ARM GNU汇编。前者使用ARM官方提供的汇编器ARM ASM,适合在windows中使用,一般用大写字母编写代码。后者使用GNU提供的汇编器as,适合在linux中使用,一般用小写字母编写代码。两者主要的区别在于伪操作不同,其他相关的指令基本上是一致的。
是不是有点晕乎了呢?是的,那请你看下方的流程发展图:

 

汇编器的分类

汇编器(Assembler)是将汇编语言翻译为机器语言的程序。一般而言,汇编生成的是目标代码,需要经链接器(Linker)生成可执行代码才可以执行。

汇编语言是一种以处理器指令系统为基础的低级语言,采用助记符表达指令操作码,采用标识符表示指令操作数。作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。

常见的汇编器包括ARM ASM、MASM、TASM、GAS等。高级的汇编器如MASM、TASM等,提供了很多类似于高级语言的特征,比如结构化、抽象等,在这些环境中编写的汇编程序,有很大的一部分是面向汇编器的伪指令。

(1)MASM。MASM是Microsoft Macro Assembler 的缩写,是微软公司为x86 微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32汇编,是Windows下开发汇编的利器。不过微软现在不再发行MASM,此功能已经集成在visual studio 中。

(2)TASM。Borland公司开发的汇编器,被广泛用于Turbo C,Quick Basic等编译器,用作中间过渡编译。它也能独立的编译纯汇编或是Win32Asm的代码。具有编译快速,高效的特点,至今依然是汇编开发的首选利器。

(3)GAS。GAS是GNU Assembler的缩写。它是自由软件基金会的产品,可以支持不同的处理器,能够自动探测出实际的处理器架构,以生成相应的代码。另外也支持在某处理器平台上产生另一处理器平台的代码。

 

 

个人理解:

CPU架构决定了其使用的指令集。

同一指令集的CPU,可以采用不同的汇编语言风格,但通过汇编器的处理后,其实还是产生同样的指令。 

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录