汇编语言介绍

汇编语言是机器语言或机器代码的人类可读形式,它是处理器逻辑运行的实际位和字节序列。人类通常比二进制,八进制或十六进制更容易阅读和编程助记符,因此人们通常用汇编语言编写代码,然后使用一个或多个程序将其转换为处理器理解的机器语言格式。

例:

mov eax, 4
cmp eax, 5
je point

汇编程序是一个程序,它读取汇编语言程序,解析它并生成相应的机器语言。重要的是要理解,与 C++之类的语言(标准文档中定义的单一语言)不同,有许多不同的汇编语言。每个处理器体系结构,ARM,MIPS,x86 等具有不同的机器代码,因此具有不同的汇编语言。此外,对于相同的处理器体系结构,有时会有多种不同的汇编语言。特别是,x86 处理器系列有两种流行的格式,通常被称为气体语法gas 是 GNU 汇编程序的可执行文件的名称)和英特尔语法 (以 x86 处理器系列的发起者命名)。它们是不同的但是相同的,因为通常可以用任一语法编写任何给定的程序。

通常,处理器的发明者记录处理器及其机器代码并创建汇编语言。这种特定汇编语言通常是唯一使用的汇编语言,但与编译器编写者试图符合语言标准不同,处理器发明者定义的汇编语言通常但并不总是编写汇编程序的人使用的版本。。

有两种通用类型的处理器:

  • CISC(复杂指令集计算机):有许多不同且通常很复杂的机器语言指令

  • RISC(精简指令集计算机):相比之下,指令更少,更简单

对于汇编语言程序员来说,不同之处在于 CISC 处理器可能需要学习很多指令,但通常有适合特定任务的指令,而 RISC 处理器的指令更少且更简单,但任何给定的操作都可能需要汇编语言程序员写更多指令以完成同样的事情。

其他编程语言编译器有时会首先生成汇编程序,然后通过调用汇编程序将其编译为机器代码。例如, gcc 在编译的最后阶段使用自己的气体汇编程序。生成的机器代码通常存储在目标文件中,目标文件可以通过链接器程序链接到可执行文件中。

完整的工具链通常由编译器,汇编器和链接器组成。然后,可以直接使用汇编程序和链接程序以汇编语言编写程序。在 GNU 世界中, binutils 包包含汇编器和链接器以及相关工具; 那些只对汇编语言编程感兴趣的人不需​​要 gcc 或其他编译器包。

小型微控制器通常仅以汇编语言或汇编语言与一种或多种更高级语言(如 C 或 C++)的组合编程。这样做是因为人们经常可以使用指令集架构的特定方面来为这些设备编写比在更高级语言中更高的紧凑,高效的代码,并且这种设备通常具有有限的存储器和寄存器。许多微处理器用于嵌入式系统这些设备是通用计算机以外的其他设备。这种嵌入式系统的例子是电视机,微波炉和现代汽车的发动机控制单元。许多这样的设备没有键盘或屏幕,因此程序员通常将程序写在通用计算机上,运行交叉汇编程序 (因为这种汇编程序为不同类型的处理器生成代码而不是运行它的处理器)和/或交叉编译器交叉链接器以生成机器代码。

这些工具有许多供应商,它们与生成代码的处理器一样多种多样。许多(但并非所有)处理器都有一个开源解决方案,如 GNU,sdcc,llvm 或其他。