从零开始打造我的计算机系统【交叉汇编器】

从零开始打造我的计算机系统

交叉汇编器

一、一些主要概念

如同所有书中介绍的那样,汇编源文件经过汇编之后生成目标文件,目标文件经过链接器链接之后生成可执行文件,所以我们做如下的描述。

目标文件:如同a.out的文件格式,有文件头,文本区,数据区,文本重定位区,数据重定位去,符号表,字符串表。

可执行文件:除了动态链接之外,一个可执行文件不包含任何重定位信息,也不要符号表。只有文件头,文本区,数据区。

二、本汇编器设计要点

由于时间有限,所以本汇编器不再支持多源文件汇编。

只有一个汇编源文件,没有静态库,也没有动态库,汇编器采用两趟汇编器。

第一趟给所有的标号记载LC地址。

第二趟汇编成二进制代码。

生成的代码之中不应该包含任何没有解析的符号,也没有重定位信息,生成的目标代码加载到0x000010000地方。本编译器仅仅是作为实验用途。

三、汇编指令格式

汇编指令由 标号,操作码,目的操作数,源操作数,源操作数,注释五个部分组成。

 

无论文本区,数据区的标号都要以冒号显示。

 

四、两趟汇编过程

第一趟汇编:记录所有的标号,并且记录下标号地址。

 

第二趟汇编:生成二进制文件,所有未解析的引用视为错误,共用了四个伪指令,分别如下:

 

.asciiz

.byte

.word

Load

数据区,和代码区都是从低地址到高地址,记住这一点。

posted @ 2014-02-16 17:12  李可以  阅读(676)  评论(0编辑  收藏  举报