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

下载本文档

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

文档简介

第七章目标代码生成 7 1对下列四元式序列生成目标代码 T A BS C DW E FU W TV U S其中 V是基本块出口的活跃变量 R0和R1是可用寄存器 解答 简单代码生成算法依次对四元式进行翻译 我们以四元式T a b为例来说明其翻译过程 汇编语言的加法指令代码形式为ADDR X其中 ADD为加法指令 R为第一操作数 第一操作数必须为寄存器类型 X为第二操作数 它可以是寄存器类型 也可以是内存型的变量 ADDR X指令的含意是 将第一操作数R与第二操作数相加后 再将累加结果存放到第一操作数所在的寄存器中 要完整地翻译出四元式T a b 则可能需要下面三条汇编指令 MOVR aADDR bMOVT R第一条指令是将第一操作数a由内存取到寄存器R中 第二条指令完成加法运算 第三条指令将累加后的结果送回内存中的变量T 是否在翻译成目标代码时都必须生成这三条汇编指令呢 从目标代码生成的优化角度考虑 即为了使生成的目标代码更短以及充分利用寄存器 上面的三条指令中 第一条和第三条指令在某些情况下是不必要的 这是因为 如果下一个四元式紧接着需要引用操作数T 则第三条指令就不急于生成 可以推迟到以后适当的时机再生成 此外 如果必须使用第一条指令 即第一操作数不在寄存器而是在内存中 且此时所有可用寄存器都已分配完毕 这时就要根据寄存器中所有变量的待用信息 也即引用点 来决定淘汰哪一个寄存器留给当前的四元式使用 寄存器的淘汰策略如下 1 如果某寄存器中的变量已无后续引用点且该变量是非活跃的 则可直接将该寄存器作为空闲寄存器使用 2 如果所有寄存器中的变量在基本块内仍有引用点且都是活跃的 则将引用点最远的变量所占用寄存器中的值存放到内存与该变量对应的单元中 然后再将此寄存器分配给当前的指令使用 因此 本题所给四元式序列生成的目标代码如下 MOVR0 ASUBR0 C R0 T MOVR1 CADDR1 D R1 S MOVS R1 S引用点较T引用点远 故将R1的值送内存单元S MOVR1 ESUBR1 F R1 W SUBR1 R0 R1 U MULR1 S R1 V 7 2假设可用的寄存器为R0和R1 且所有临时单元都是非活跃的 试将以下四元式基本块 T1 B CT2 A T1T3 D 1T4 E FT5 T3 T4W T2 T5用简单代码生成算法生成其目标代码 解答 该基本块的目标代码如下 指令后面为相应的注释 MOVR0 B 取第一个空闲寄存器R0 SUBR0 C 运算结束后R0中为T1结果 内存中无该结果 MOVR1 A 取一个空闲寄存器R1 MULR1 R0 运算结束后R1中为T2结果 内存中无该结果 MOVR0 D 此时R0中结果T1已经没有引用点 且临时单元T1是非活跃的 所以 寄存器R0可作为空闲寄存器使用 ADDR0 1 运算结束后R0中为T3结果 内存中无该结果 MOVT2 R1 翻译四元式T4 E F时 所有寄存器已经分配完毕 寄存器R0中存的T3和寄存器R1中存的T2都是有用的 由于T2的下一个引用点较T3的下一个引用点更远 所以暂时可将寄存器R1中的结果存回到内存的变量T2中 从而将寄存器R1空闲以备使用 MOVR1 ESUBR1 F 运算结束后R1中为T4结果 内存中无该结果 MULR0 R1 运算结束后R0中为T5结果 内存中无该结果 注意 该指令将寄存器R0中原来的结果T3冲掉了 可以这么做的原因是 T3在该指令后不再有引用点 且是非活跃变量 MOVR1 T2 此时R1中结果T4已经没有引用点 且临时单元T4是非活跃的 因此寄存器R1可作为空闲寄存器使用 DIVR1 R0 运算结束后R1中为W结果 内存中无该结果 此时所有指令部分已经翻译完毕 MOVW R1 指令翻译完毕时 寄存器中存有最新的计算结果 必须将它们存回到内存相应的单元中去 否则 在翻译下一个基本块时 所有的寄存器被当成空闲的寄存器使用 从而造成计算结果的丢失 考虑到寄存器R0中的T5和寄存器R1中的W 临时单元T5是非活跃的 因此只要将结果W存回对应单元即可 7 3对基本块P S0 2S1 3 S0S2 T CS3 T CR S0 S3H RS4 3 S1S5 T CS6 S4 S5H S6 S2 1 试应用DAG进行优化 2 假定只有R H在基本块出口是活跃的 写出优化后的四元式序列 3 假定只有两个寄存器AX BX 试写出上述优化后的四元式序列的目标代码 解答 1 根据DAG的构造算法构造基本块P的DAG步骤如图7 1所示的 a 到 h 图7 1基本块P的DAG 按图7 1 h 和原来构造结点的顺序 优化后的四元式序列为S0 2S4 2S1 1 5S2 T CS3 T CS5 S3R 2 S3S6 RH S6 S2 2 假定只有R H在基本块出口是活跃的 则上述优化后的四元式序列可进一步优化为S0 T CS3 T CR 2 S3H R S2 3 假定只有两个寄存器AX BX 上述优化后的四元式序列的目标代码为MOVAX TSUBAX CMOVAX S2MOVAX TADDAX CMOVBX 2DIVBXMOVAX S2MULBXMOVBX H 7 4参考附录1和附录2 编译原理教程 一书 将下列汇编程序片段翻译为对应的8086 8088机器语言代码 汇编地址

温馨提示

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

最新文档

评论

0/150

提交评论