第7章目标代码生成.ppt
《第7章目标代码生成.ppt》由会员分享,可在线阅读,更多相关《第7章目标代码生成.ppt(40页珍藏版)》请在第壹文秘上搜索。
1、第第7 7章章 目标代码生成目标代码生成 第第7章章 目标代码生成目标代码生成 7.1 一个简单代码生成器一个简单代码生成器 7.2*汇编指令到机器代码的翻译概述汇编指令到机器代码的翻译概述 第第7 7章章 目标代码生成目标代码生成 概述目标代码生成:目标代码生成就是将中间代码程序转换成等价的目标代码程序,完成这一功能的程序称为目标代码生成器。代码生成器:目标代码的常见形式(1)可立即执行的机器语言代码。(.exe或.com)(2)待装配的机器语言模块。(.obj或lib)(3)汇编语言程序生成目标代码的过程中要注意考虑的问题:(1)生成的目标代码较短(2)充分利用寄存器第第7 7章章 目标代
2、码生成目标代码生成 7.1 一个简单代码生成器一个简单代码生成器简单的代码生成器:特点:生成器依次把每条中间代码变换成目标代码,在一个基本块范围内考虑如何充分利用寄存器的问题。一方面生成计算某变量值的目标代码时,尽可能地让该变量的值保留在寄存器中,直到该寄存器必须用来存放其它变量的值或已达基本块出口为止;另一方面,后续的目标代码尽可能地引用变量在寄存器中的值而不访问内存。第第7 7章章 目标代码生成目标代码生成 低效的代码生成器:不考虑代码的效率,可以简单地把每条中间代码(四元式)映射成若干条目标指令 例如,一C语言语句为A=(B+C)*D+E,把它翻译为四元式G:T1=B+C T2=T1*D
3、 A=T2+E代码生成器将形如x=y+z的三地址代码映射为:MOV AX,y /*AX为寄存器*/ADD AX,z MOV x,AX第第7 7章章 目标代码生成目标代码生成 这样,上述四元式代码序列G就可翻译为:(1)MOV AX,B (2)ADD AX,C(3)MOV T1,AX(4)MOV AX,T1 (5)MUL AX,D(6)MOV T2,AX(7)MOV AX,T2(8)ADD AX,E(9)MOV A,AX(4)和(7)两条指令是多余的;T1、T2是中间代码生成时产生的临时变量,它们在出了基本块后将不再使用,故(3)、(6)两条指令也可删去。第第7 7章章 目标代码生成目标代码生成
4、 高效的代码生成器:考虑效率和充分使用寄存器,生成如下代码:(1)MOV AX,B (2)ADD AX,C(3)MUL AX,D(4)ADD AX,E (5)MOV A,AX?如何充分利用寄存器第第7 7章章 目标代码生成目标代码生成 7.1.1 待用信息与活跃信息 在一个基本块内的目标代码中,为了提高寄存器的使用效率,应将基本块内还要被引用的值尽可能地保留在寄存器中,而将基本块内不再被引用的变量所占用的寄存器尽早释放。待用信息:为了将基本块内还要被引用的值尽可能地保留在寄存器中,需要收集变量的待用信息。四元式i:A=B op C四元式j:X=Y op A四元式i对变量A定值,i后面的四元式j
5、要引用A且从i到j的四元式没有其它对A的定值点,则称j是四元式i中对变量A的待用信息活跃信息:为了将不再被引用的变量所占用的寄存器尽早释放,需要收集变量的活跃信息。上例中如在i之后A被不再被引用,则称A为非活跃的,否则称A在i是活跃的;如果A被多处引用,则构成了A的待用信息链与活跃信息链。第第7 7章章 目标代码生成目标代码生成 取得每个变量在基本块内的待用信息和活跃信息算法:从基本块的出口由后向前扫描,对每个变量建立相应的待用信息链与活跃信息链。基本块中的临时变量看作基本块出口之后的非活跃变量,而所有的非临时变量均看作基本块出口之后的活跃变量。如果某些临时变量能够跨基本块使用,则把这些临时变
6、量也看成基本块出口之后的活跃变量。假设变量的符号表内有待用信息和活跃信息栏,则计算变量待用信息的算法如下:第第7 7章章 目标代码生成目标代码生成 (1)将基本块中各变量的符号表的待用信息栏置为“非待用”,对活跃信息栏则根据该变量在基本块出口之后是否活跃而将该栏中的信息置为“活跃”或“非活跃”。(2)从基本块出口到基本块入口由后向前依次处理各四元式。对每个四元式i:A=B op C依次执行以下步骤:把符号表中变量A的待用信息和活跃信息附加到四元式i上;把符号表中变量A的待用信息和活跃信息分别置为“非待用”和“非活跃”;把符号表中变量B和C的待用信息和活跃信息附加到四元式i上;把符号表中B和C的
7、待用信息置为i,活跃信息置为“活跃”。第第7 7章章 目标代码生成目标代码生成 例7.1 考察基本块:(1)T=AB (2)U=AC (3)V=T+U (4)D=V+U 其中,A、B、C、D为变量,T、U、V为中间变量,试求各变量的待用信息链和活跃信息链。第第7 7章章 目标代码生成目标代码生成 表7.1 例7.1的待用信息链和活跃信息链变量名待 用 信 息活 跃 信 息初值待 用 信 息 链初值活 跃 信 息 链TF(3)FF LLFAF (2)(1)L LBF (1)L LCF (2)L L UF(4)(3)F FLLF VF(4)F FLF DFF LF 第第7 7章章 目标代码生成目标
8、代码生成 待用信息和活跃信息在四元式上的标记如下:(1)T(3)L=A(2)LBFL (2)U(3)L=AFLCFL (3)V(4)L=TFF+U(4)L (4)DFL=VFF+UFF 第第7 7章章 目标代码生成目标代码生成 7.1.2 代码生成算法 以下代码生成算法以基本块为单位生成目标代码。优化使用寄存器基本不考虑基本块以外的情况。寄存器描述数组RVALUE:动态地记录各寄存器的当前状况,并用寄存器Ri的编号作为它的下标 变量地址描述数组AVALUE:记录各变量现行值存放的位置,即其是在某寄存器中还是在某内存单元中,或者同时存在于某寄存器和某内存单元中 如:第第7 7章章 目标代码生成目
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 目标 代码 生成