编译原理第12章 代码生成

编译原理第12章 代码生成

ID:44962164

大小:351.50 KB

页数:36页

时间:2019-11-06

编译原理第12章 代码生成_第1页
编译原理第12章 代码生成_第2页
编译原理第12章 代码生成_第3页
编译原理第12章 代码生成_第4页
编译原理第12章 代码生成_第5页
资源描述:

《编译原理第12章 代码生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理之代码生成华东交通大学软件学院万仲保代码生成概述目标代码的主要目标目标代码的主要形式生成目标代码衡量指标计算机模型简单的代码生成器全局寄存器分配代码生成概述代码生成是把经过语法分析或优化后的中间代码作为输入,将其转换成特定机器的机器语言或汇编语言作为输出,这样的转换程序称为代码生成器。代码生成的任务是在编译前端生成的中间代码的基础上,生成等价有效的目标代码,这也是一种程序变换,变换的结果是产生目标代码。等价是任一种程序变换的基本要求,因此讨论将集中在目标代码和如何产生有效的目标代码上。有效,是指目标代码占用的空间要省,运行的时间要短,这涉及充分利用寄存器和生成

2、优化的代码序列的问题。目标代码的主要目标第一.使所生成的目标代码尽可能地短。第二,能较充分地发挥目标计算机可用资源的效率,如尽可能地使用执行速度较快的指令;充分利用计算机的寄存器或变址器,以节省访问内存的时间,等等。目标代码的主要形式具有绝对地址的机器语言程序可浮动的机器语言程序汇编语言形式的程序绝对地址的机器语言程序优点:最为有效,因为它们在存储空间中有固定的位置,一旦产生出此种形式的目标程序之后,便可直接投入运行。缺点:不能独立地完成源程序各程序块的编译,即使是供源程序调用的子程序也必须同时进行编译,因而灵活性较差。通常是在程序较短,而调试工作量较大的情况下,采用

3、此种方式。可浮动的机器语言程序有较大的灵活性,故为许多编译程序所采用,只有执行连接装入程序本身需耗费一些时间。目标程序由若干个目的模块组成,各个模块中都包含目标程序中的一部分代码,且这些代码可在存储空间进行浮动(即可将它们装入到存储空间的任何位置)。此外,在各目的模块中还含有一些连接信息(如本模块需引用的其它模块中的符号名或子程序入口名)。对此种形式的目标代码,需经过连接装入程序把它们和所需的运行子程序的目的模块连接起来之后,才能投入运行。汇编语言形式的程序汇编语言形式较容易实现一些,但需在编译完毕之后额外增加一个汇编目标程序的阶段。尽管此种方式有某些优点,但并不是一

4、种最好的方案。计算机模型假定一个计算机具有n个通用寄存器为R0,R1,…,Rn-l。它们既可作为累加器又可作为变址器,设定:用“op”表示运算符;用“M”表示内存单元;用变量名表示该变量所在的单元;“C”表示常量;“*”表示间址方式存取。模型机的指令形式模型机主要指令的意义模型机寻址方式模型机的指令形式类型指令形式意义(设op是二目运算符)直接地址型opRi,M(Ri)opM⇒Ri寄存器型opRi,Rj(Ri)op(Rj)⇒Ri变址型opRi,c(Rj)(Ri)op((Rj)+c)⇒Ri间接型opRi,*M(Ri)op(M)⇒RiopRi,*Rj(Ri)op((Rj)

5、)⇒RiopRi,*c(Rj)(Ri)op(((Rj)+c))⇒Ri模型机主要指令的意义指令意义指令意义LDRi,B把B单元的内容取到寄存器R,即(B)⇒RiJB分别置CT为0或1或2。J>XJ≥X如CT=2转X单元。如CT=2或CT=1转X单元。模型机寻址方式编码名

6、称助记符含义汇编后的情况1寄存器模式R(R)为操作数2间接寄存模式*R(R)为操作数地址3变址模式X(R)(R)+X为操作数地址X之值在本指令之后的单元中4间接变址模式*X(R)(R)+X为存放操作数地址的单元地址X之值在本指令之后的单元中5直接操作数#XX为操作数文字常数X在本指令之后的单元中6绝对地址XX为符号名,其值为操作数X的数据单元地址在本指令之后的单元中7间接地址*XX为符号名,其值为操作数地址X的数据单元地址在本指令之后的单元中生成目标代码衡量指标目标程序(指令条数);执行目标程序所占的机器时间;目标程序所有指令执行代价的总和。简单的代码生成器寄存器分配

7、的原则待用信息链表法代码生成算法寄存器分配的原则(1)当生成某变量的目标代码时,尽量让变量的值或计算结果保留在寄存器中直到寄存器不够分配时为止,这样引用变量值时可减少对内存的存取次数,以提高运行速度。(2)当到基本块出口时,将变量的值存放在内存中,因为一个基本块可能有多个后继结点或多个前驱结点,同一个变量名在不同前驱结点的基本块内出口前存放的R可能不同,或没有定值,所以应在出口前把寄存器的内容放在内存中,这样从基本块外入口的变量值都在内存中。(3)对于在一个基本块内后边不再被引用的变量所占用的寄存器应尽早释放,以提高寄存器的利用效率。待用信息链表法待

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。