汇编语言是机器语言或机器代码的一种人类可读形式,它是处理器逻辑在其上操作的位和字节的实际序列。通常,与二进制,八进制或十六进制相比,人类用助记符进行阅读和编程更为容易,因此人类通常以汇编语言编写代码,然后使用一个或多个程序将其转换为处理器可以理解的机器语言格式。
例:
mov eax, 4 cmp eax, 5 je point
汇编程序是一种程序,可读取汇编语言程序,对其进行解析并生成相应的机器语言。重要的是要了解,不同于像C ++这样的语言是标准文档中定义的单一语言,它有许多不同的汇编语言。每种处理器体系结构,ARM,MIPS,x86等都有不同的机器代码,因此有不同的汇编语言。此外,对于同一处理器体系结构,有时会有多种不同的汇编语言。特别地,x86处理器家族具有两种流行的格式,通常被称为gas语法(gas是GNU汇编器可执行文件的名称)和Intel语法。(以x86处理器家族的创建者命名)。它们不同,但等效,因为通常可以使用任何一种语法编写任何给定的程序。
通常,处理器的发明者记录处理器及其机器代码并创建汇编语言。唯一使用一种特定的汇编语言是很常见的,但是与试图遵循某种语言标准的编译器作者不同,处理器的发明者定义的汇编语言通常但并非总是编写汇编器的人所使用的版本。 。
处理器有两种常规类型:
CISC(复杂指令集计算机):具有许多不同且通常是复杂的机器语言指令
RISC(精简指令集计算机):相比之下,指令更少且更简单
对于汇编语言程序员而言,不同之处在于,CISC处理器可能有很多要学习的指令,但通常有适合于特定任务的指令,而RISC处理器中的指令则更少且更简单,但是任何给定的操作都可能需要汇编语言程序员写更多的指令来完成同样的事情。
其他编程语言的编译器有时会首先生成汇编器,然后通过调用汇编器将其编译为机器代码。例如,gcc在编译的最后阶段使用其自己的气体汇编器。产生的机器代码通常存储在目标文件中,该文件可以由链接器程序链接为可执行文件。
完整的“工具链”通常由编译器,汇编器和链接器组成。然后可以直接使用该汇编器和链接器以汇编语言编写程序。在GNU世界中,binutils软件包包含汇编程序和链接程序以及相关工具。那些只对汇编语言编程感兴趣的人不需要 gcc或其他编译器软件包。
小型微控制器通常仅以汇编语言或以汇编语言和一种或多种高级语言(例如C或C ++)的组合进行编程。这样做是因为人们通常可以将指令集体系结构的特定方面用于此类设备,以编写比更高级语言可能更紧凑,高效的代码,并且此类设备通常具有有限的内存和寄存器。嵌入式系统中使用了许多微处理器是除通用计算机之外的其他设备,这些设备恰好内部装有微处理器。这种嵌入式系统的示例是电视,微波炉和现代汽车的引擎控制单元。许多这样的设备没有键盘或屏幕,因此程序员通常在通用计算机上编写程序,运行交叉汇编程序(之所以这样称呼,是因为这种汇编程序会为运行于其上的处理器产生不同类型的处理器产生代码)和/或交叉编译器和交叉链接器以生成机器代码。
有许多此类工具的供应商,其供应商与其为其生成代码的处理器一样。许多(但不是全部)处理器也具有像GNU,sdcc,llvm或其他这样的开源解决方案。