第11章目标代码生成_第1页
第11章目标代码生成_第2页
第11章目标代码生成_第3页
第11章目标代码生成_第4页
第11章目标代码生成_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第11章章 目标代码生成目标代码生成12 编译程序编译程序 的最后一个阶段是目标代码生的最后一个阶段是目标代码生成,它的主要任务是把源程序的中间代码转成,它的主要任务是把源程序的中间代码转换成依赖具体机器的、等价的目标代码。换成依赖具体机器的、等价的目标代码。 衡量目标代码的质量主要从占用空间和衡量目标代码的质量主要从占用空间和执行效率两个方面综合考虑。执行效率两个方面综合考虑。 代码生成器程序的构造是与输入的中间代码形式和输出的目标代码的机器结构密切相关的。 生成的目标代码尽可能的短。 目标代码运行时间要短。11.1 目标代码的形式目标代码的形式34 目标代码生成是以中间代码作为输入,目标

2、代码生成是以中间代码作为输入,将其转换成特定机器的机器语言或汇编语言将其转换成特定机器的机器语言或汇编语言作为输出。作为输出。 以四元式序列作为它的加工对象,输出以四元式序列作为它的加工对象,输出目标代码的形式有三种:目标代码的形式有三种: 1. 具有绝对地址的机器语言程序;具有绝对地址的机器语言程序; 2. 具有相对地址的机器语言程序;具有相对地址的机器语言程序; 3. 汇编指令程序。汇编指令程序。具有绝对地址的机器语言程序具有绝对地址的机器语言程序5 具有绝对地址的机器语言程序在存储空具有绝对地址的机器语言程序在存储空间中有固定的存储位置,一旦产生此种形式间中有固定的存储位置,一旦产生此种

3、形式的目标代码之后,便可立即执行,因此这种的目标代码之后,便可立即执行,因此这种形式最为迅速有效但。形式最为迅速有效但。 缺点是不灵活,不适合大型程序。缺点是不灵活,不适合大型程序。具有相对地址的机器语言程序具有相对地址的机器语言程序6 具有相对地址的机器语言程序由若干个具有相对地址的机器语言程序由若干个目标模块组成,各个模块中都包含目标程序目标模块组成,各个模块中都包含目标程序中的一部分代码,可将它们装入到存储空间中的一部分代码,可将它们装入到存储空间的任何位置,然后由连接装配程序将它们连的任何位置,然后由连接装配程序将它们连接在一起之后执行。接在一起之后执行。 缺点是连接装配程序增加了开销

4、,但这缺点是连接装配程序增加了开销,但这种形式有较大的灵活性,所以为许多编译程种形式有较大的灵活性,所以为许多编译程序所采用。序所采用。汇编指令程序汇编指令程序7 目标代码生成程序可以产生汇编语言形目标代码生成程序可以产生汇编语言形式的目标代码,这种形式在实现上要比前两式的目标代码,这种形式在实现上要比前两种形式容易。种形式容易。 但缺点是还需汇编后才能成为可执行代但缺点是还需汇编后才能成为可执行代码。码。11.2 目标机器目标机器89 代码生成程序是针对具体的计算机来实代码生成程序是针对具体的计算机来实现的,所以熟悉目标机器和它的指令系统是现的,所以熟悉目标机器和它的指令系统是设计一个好的代

5、码生成程序的先决条件。设计一个好的代码生成程序的先决条件。 在此,对于代码生成的讨论将不局限于在此,对于代码生成的讨论将不局限于一个特定的计算机,而是针对一个抽象的计一个特定的计算机,而是针对一个抽象的计算机,它具有多数实际计算机的某些共同特算机,它具有多数实际计算机的某些共同特征。征。目标机器目标机器10执行代价执行代价11 通常把代码生成程序所产生的目标程序通常把代码生成程序所产生的目标程序的指令条数作为衡量它的工作效率的指标之的指令条数作为衡量它的工作效率的指标之一,但是执行目标程序所需机器时间的长短一,但是执行目标程序所需机器时间的长短往往是更重要的指标。往往是更重要的指标。 对于一条

6、指令来说,它的执行时间主要对于一条指令来说,它的执行时间主要取决于访问内存的次数,所以一般可将一条取决于访问内存的次数,所以一般可将一条指令的执行代价定义为执行该指令所需访问指令的执行代价定义为执行该指令所需访问内存的总次数。内存的总次数。 由于指令本身也是访问内存后才能取得,所以一条指令的执行代价为一次从内存取此指令本身加上该指令存取操作数所需访问内存的次数。11.3 一个简单的代码生成器一个简单的代码生成器1213 对于所产生的每一指令,如果它的运算对于所产生的每一指令,如果它的运算对象正好在寄存器中,则尽可能地引用寄存对象正好在寄存器中,则尽可能地引用寄存器中的内容,而不是产生访问主存的

7、代码,器中的内容,而不是产生访问主存的代码,同时尽可能地使指令的执行结果保存在寄存同时尽可能地使指令的执行结果保存在寄存器中。器中。 当然,寄存器的个数是有限的,所以不当然,寄存器的个数是有限的,所以不再引用的再引用的 变量所占的寄存器应尽早释放,即变量所占的寄存器应尽早释放,即将寄存器的值保存在内存中。将寄存器的值保存在内存中。14 通常,在下面两种情况出现之一时,就通常,在下面两种情况出现之一时,就产生将保留在寄存器中的内容存入内存单元产生将保留在寄存器中的内容存入内存单元的指令:的指令:(1 1)该寄存器要用于其他计算)该寄存器要用于其他计算(2 2)正好在过程调用、转移或标号语句之前)

8、正好在过程调用、转移或标号语句之前待用信息待用信息15 通常把代码生成程序所产生的目标程序通常把代码生成程序所产生的目标程序的指令条数作为衡量它的工作效率的指标之的指令条数作为衡量它的工作效率的指标之一,但是执行目标程序所需机器时间的长短一,但是执行目标程序所需机器时间的长短往往是更重要的指标。往往是更重要的指标。 所以,需要知道各变量在基本块内是否所以,需要知道各变量在基本块内是否还会被应用,以及在何处引用,这些信息可还会被应用,以及在何处引用,这些信息可以通过每一变量的待用信息和活跃信息来得以通过每一变量的待用信息和活跃信息来得到。到。 为了充分、合理地使用寄存器,应把基本块中还将被引用的变量之值尽可能保留在寄存器中,而把不再被引用的变量所占用的其存钱尽早释放。16 假设在基本块假设在基本块B中,变量中,变量A在在i点定值,则点定值,则在基本块内凡是从在基本块内凡是从i所能到达的每一个所能到达的每一个A的引的引用点用点j,都称为在,都称为在i点定值的变量点定值的变量A的待用信息。的待用信息。 可见,一个变量的待用信息就是指在基可见,一个变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论