目标代码(Object Code)
目录 |
目标代码是指源代码经过编译程序产生的能被CPU直接识别的二进制代码。
目标代码生成是以中间代码作为输入,将其转换成特定机器的机器语言或汇编语言作为输出。在此以四元式序列作为它的加工对象,输出目标代码的形式有三种:具有绝对地址的机器语言程序,具有相对地址的机器码程序和汇编指令程序。
具有绝对地址的机器语言程序在存储空间中有固定的存储位置,一旦产生此种形式的目标代码之后,便可立即执行,因此这种形式最为迅速有效,但它并不灵活,不适合大型程序。
具有相对地址的机器语言程序由若干个目标模块组成,各个模块中都包含目标程序中的一部分代码,可将它们装人到存储空间的任何位置,然后由连接装配程序将它们连接在一起之后执行。显然,连接装配程序增加了开销,但这种形式有较大的灵活性,所以为许多编译程序所采用。
目标代码生成程序可以产生汇编语言形式的目标代码,这种形式在实现上要比前两种形式容易。当然,这种形式的目标代码还需经汇编后才能成为可执行代码。
目标代码生成是编译程序的最后一个工作阶段,其任务是把经优化处理之后的中间代码变换成特定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。由于目标语言依赖于硬件系统,因而如何充分利用现有的寄存器以节省访问内存的时间,合理地选择执行速度快的指令,生成尽可能短且有效的目标代码是这个阶段考虑的主要问题。
如果代码生成程序以四元式形式的中间代码序列作为输入,在其生成目标代码时,可假定每个四元式中的运算符及运算对象的数据类型均已知道,所需的全部类型转换操作均已在中间代码中得到体现。此外,如果出现在程序中的全部符号名运行时所需的存储空间均已得到分配,它们所在的数据区编号及相对地址已分别填人符号表各相应登记项栏中。所以在四元式中,仅出现符号名在符号表中登记项的序号。