汇编程序的任务是把汇编语言源程序模块转换为二进制的目标模块。
汇编程序把源文件转换为目标文件的过程需要对源文件进行两遍扫视。
汇编程序的输入是源文件(ASM),而主要输出是OBJ文件和LST文件。
第一遍扫视要确定源程序每一行的偏移地址,扫视后应提供一张符号表(或称标识符表),它把源程序所定义符号的偏移地址记录下来。第二遍扫视则产生所要求的OBJ、LST和CREF文件。下面将简单介绍汇编程序的两遍扫视过程。
10.1.1 汇编程序的主要工具
汇编程序在两遍扫视的过程中用到的主要工具有:
10.1.1.1 地址计数器(Location counter)
汇编的第一遍扫视过程中,地址计数器的值可以用来确定每条指令的第一个字的偏移地址及数据段中变量名的值,这样就可以建立一张符号表。
当开始汇编或在每一段开始时,把地址计数器初始化为零,以后在汇编程序扫视源文件的过程中,每处理一条指令,地址计数器就增加一个值,此值为该指令所需要的字节数。所以,在汇编过程中,对于被汇编的每一段来说,地址计数器可以看作是动态地指向被汇编指令的相对位置的一个指针。也就是说,在汇编过程中,地址计数器的内容就是当前正被汇编指令的偏移地址。
例10.1 其中左部为源程序的一段,右部为汇编每个语句时地址计数器的值以及以字节为单位的语句长度。这其中的ORG伪操作使地址计数器置成其后表达式所规定的值。
|