第7篇 编译原理目标代码生成.ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 目标代码生成 7.1 一个简单代码生成器 7.2 汇编指令到机器代码的翻译概述 7.1 一个简单代码生成器 我们首先介绍一个简单的代码生成器,此生成器依次把每条中间代码变换成目标代码,并且在一个基本块范围内考虑如何充分利用寄存器的问题。一方面,在基本块中,当生成计算某变量值的目标代码时,尽可能地让该变量的值保留在寄存器中(即不编出把该变量的值存到内存单元的指令),直到该寄存器必须用来存放其它变量的值或已达基本块出口为止;另一方面,后续的目标代码尽可能地引用变量在寄存器中的值而不访问内存。 例如,一C语言语句为A=(B+C)*D+E,把它翻译为四元式G: T1=B+C T2=T1*D A=T2+E 如果不考虑代码的效率,可以简单地把每条中间代码(四元式)映射成若干条目标指令,如将x=y+z映射为: MOV AX, y /*AX为寄存器*/ ADD AX, z MOV x, AX 其中,x、y、z均为数据区的内存变量。 这样,上述四元式代码序列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)两条指令也可删去。所以,在考虑了效率和充分使用寄存器之后,应生成如下代码: (1) ?MOV AX, B (2) ?ADD AX, C (3) ?MUL AX, D (4) ?ADD AX, E (5) ?MOV A, AX 7.1.1 待用信息与活跃信息 在一个基本块内的目标代码中,为了提高寄存器的使用效率,应将基本块内还要被引用的值尽可能地保留在寄存器中,而将基本块内不再被引用的变量所占用的寄存器尽早释放。每当翻译一条四元式如A=B op C时,需要知道在基本块中还有哪些四元式要对变量A、B、C进行引用,为此,需要收集一些待用信息。在一个基本块中,四元式i对变量A定值,如果i后面的四元式j要引用A且从i到j的四元式没有其它对A的定值点,则称j是四元式i中对变量A的待用信息,同时也称A是活跃的;如果A被多处引用,则构成了A的待用信息链与活跃信息链。 为了取得每个变量在基本块内的待用信息和活跃信息,可从基本块的出口由后向前扫描,对每个变量建立相应的待用信息链与活跃信息链。如果没有进行数据流分析并且临时变量不允许跨基本块引用,则把基本块中的临时变量均看作基本块出口之后的非活跃变量,而把所有的非临时变量均看作基本块出口之后的活跃变量。如果某些临时变量能够跨基本块使用,则把这些临时变量也看成基本块出口之后的活跃变量。 假设变量的符号表内有待用信息和活跃信息栏,则计算变量待用信息的算法如下: (1) 首先将基本块中各变量的符号表的待用信息栏置为“非待用”,对活跃信息栏则根据该变量在基本块出口之后是否活跃而将该栏中的信息置为“活跃”或“非活跃”。 (2) 从基本块出口到基本块入口由后向前依次处理各四元式。对每个四元式i:A=B op C依次执行以下步骤: ① 把符号表中变量A的待用信息和活跃信息附加到四元式i上; ② 把符号表中变量A的待用信息和活跃信息分别置为“非待用”和“非活跃”; ③ 把符号表中变量B和C的待用信息和活跃信息附加到四元式i上; ? ④ 把符号表中B和C的待用信息置为i,活跃信息置为“活跃”。 例7.1 考察基本块: (1) ?T=A?B (2) ?U=A?C (3) ?V=T+U (4) ?D=V+U 其中,A、B、C、D为变量,T、U、V为中间变量,试求各变量的待用信息链和活跃信息链。

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档