从零开始打造我的计算机系统
交叉汇编器
一、一些主要概念
如同所有书中介绍的那样,汇编源文件经过汇编之后生成目标文件,目标文件经过链接器链接之后生成可执行文件,所以我们做如下的描述。
目标文件:如同a.out的文件格式,有文件头,文本区,数据区,文本重定位区,数据重定位去,符号表,字符串表。
可执行文件:除了动态链接之外,一个可执行文件不包含任何重定位信息,也不要符号表。只有文件头,文本区,数据区。
二、本汇编器设计要点
由于时间有限,所以本汇编器不再支持多源文件汇编。
只有一个汇编源文件,没有静态库,也没有动态库,汇编器采用两趟汇编器。
第一趟给所有的标号记载LC地址。
第二趟汇编成二进制代码。
生成的代码之中不应该包含任何没有解析的符号,也没有重定位信息,生成的目标代码加载到0x000010000地方。本编译器仅仅是作为实验用途。
三、汇编指令格式
汇编指令由 标号,操作码,目的操作数,源操作数,源操作数,注释五个部分组成。
无论文本区,数据区的标号都要以冒号显示。
四、两趟汇编过程
第一趟汇编:记录所有的标号,并且记录下标号地址。
第二趟汇编:生成二进制文件,所有未解析的引用视为错误,共用了四个伪指令,分别如下:
.asciiz
.byte
.word
Load
数据区,和代码区都是从低地址到高地址,记住这一点。