ISA指令集是由0和1组成的机器语言,难以记忆和阅读,因此人们发明汇编程序帮助记忆。
汇编基本算是和机器指令一一对应的关系,可以认为是给机器指令的每个部分分别起了别名。
一、汇编程序的组成
- 操作码和操作数: 操作码如ADD表示bit[15:12]=0001,AND表示bit[15:12]=0101,操作数R0表示编号为0的寄存器。
- 标号: 指向内存单元的一个符号名,有两种用途,一种用于跳转命令跳转的地址,另一种用于读取或存储指令时访问的内存位置
- 注释: 以";"开头的字符串,只给人阅读的,汇编翻译程序会忽略
另外,汇编器还定义了一些伪操作,可以让程序员指导汇编编译器的翻译过程。 比如ORIG表示程序起始位置,FILL表示占用这个命令的下一个地址。
二、汇编过程
汇编编译器会做一个叫做两遍扫描的操作。
- 先读一遍汇编程序,找出前面提到的汇编的标号,做出一张符号表把标号和内存地址一一对应。
- 再真正翻译汇编程序成机器指令,遇到标号则通过上一步生成的符号表转化为对应内存地址。
汇编程序文件通常以".asm"结尾,编译后的结果是".obj"结尾的文件,有的汇编编译器还会生成".sym"表示符号表。
最终的".obj"就是机器所要的执行文件啦!