- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 目标代码生成
第9章 目标代码生成 以源程序的中间代码作为输入,产生等价的目标代码作为输出,如图。 源程序 编译前端 中间代码 代码优化 中间代码 代码生成器 符号表 目标程序 代码生成器的输入包括中间代码和符号表中的信息; 代码生成是把语义分析后或优化后的中间代码变换成目标代码。 9.1 概述 1. 代码生成器的输入: 源程序的中间表示:如三地址代码; 符号表中的信息:在数据区中的相对地址 2. 目标程序: 绝对机器语言代码; 可再定位机器语言代码; 汇编语言程序。 代码生成着重考虑两个问题:( 优化 ) 如何使生成的目标代码较短; 如何充分利用寄存器,减少目标代码访问存储单元的次数。 9.1 概述 9.2 假想的目标机器模型 采用一个模型作为目标机器: 1、具有多个寄存器,regs可作为累加器或变址器;具有四种类型的指令形式 类型 指令形式 直接地址型 op Ri,M 寄存器型 op Ri, Rj 变址型 op Ri,c(Rj) 间址型 op Ri,*M op Ri, *Rj op Ri,*c(Rj) 运算符op包括:ADD、SUB、MUL、DIV等 2、其它指令的意义: 指令 意义 LD Ri,B (B)?Ri ST Ri,B (Ri) ? B J X 无条件转移到X单元 CMP A,B 比较A、B单元的值,并根据AB分别置CT为0或1或2 JX CT=0 则转移 J?X CT=0 或 CT=1 则转移 J=X CT=1 则转移 J?X CT ? 1 则转移 JX CT=2 则转移 J ? X CT=2或 CT=1则转移 9.3 简单代码生成器 功能:依次把每条中间代码变换成目标代码,并且在一个基本块的范围内考虑充分利用寄存器。 例:A=(B+C)*D+E 中间代码: T1=B+C T2= T1 *D A= T2 +E (1) LD R,B (2) ADD R,C (3) ST R, T1 (4) LD R, T1 (5) MUL R,D (6) ST R, T2 (7)LD R, T2 (8)ADD R,E (9)ST R,A 例: (1) LD R,B (2) ADD R,C (3) ST R, T1 (4) LD R, T1 (5) MUL R,D (6) ST R, T2 (7)LD R, T2 (8)ADD R,E (9)ST R,A (1) LD R,B (2) ADD R,C (5) MUL R,D (8)ADD R,E (9)ST R,A 优化 为了能够进行上述优化,代码生成器必须了解一些信息: 9.3.1 待用信息与活跃信息 变量在基本块内的待用信息:从基本块的出口由后向前扫描,对每个变量建立相应的待用信息链和活跃变量信息链。 简化:基本块中的所有临时变量均看作基本块出口之后的非活跃变量;所有非临时变量均看作基本块出口之后的活跃变量。 计算变量待用信息的算法: 例 考察基本块 (1)T=A-B (2)U=A-C (3)V=T+U (4)W=V+U (1)开始时,符号表中各变量为“非待用”,变量在出口之后是否活跃填入活跃信息栏; (2)从基本块出口到入口由后向前依次处理各个中间代码。对每一条代码 i: A:=B op C,执行步骤: ?把符号表中变量A的待用和活跃信息附加到中间代码i上; ?把符号表中A的待用和活跃信息置为“非待用”、“非活跃”; ?把符号表中变量B.C的待用和活跃信息附加到中间代码i上; ?把符号表中B.C的待用信息置为i,活跃信息置为“活跃”。 寄存器描述和变量地址描述 1、在代码生成过程中,建立寄存器描述数组RVALUE,动态地记录各reg是空闲的、已分配给某个变量、或已分配给某几个变量。 2、在代码生成过程中,建立变量地址描述数组AVALUE,动态地记录各变量现行值的存放位置:是在某个reg中、在某主存单元中、或在某reg和主存单元中。 9.3.2 代码生成算法 假设基本块中每个中间代码形式为 A=B op C。 对每条中间代码 i:A=B op C依次执行如下步骤: (1)调用函数GETREG(i:A=B op C); (2)利用地址描述数组AVALUE[B]和AVALUE[C]确定变量B和C的现行值存放位置B’和C’; (3)如果B’?R,则生成目标代码: LD R,B’ op R,C’ ;否则生成目标代码 op R,C’
您可能关注的文档
最近下载
- 装饰图案概述.ppt VIP
- 香港中學會考試題(甲部).doc VIP
- 德阳市城市道路更新技术导则(2022).pdf
- 2023年香港亚洲国际数学奥林匹克公开赛(AIMO)竞赛复赛数学试卷.doc VIP
- “双减”背景下家长的教育焦虑及消解路径.docx VIP
- 装饰图案第6章 装饰图案色彩.ppt VIP
- 海尔基于工业4.0智能制造工厂服务平台智能柔性生产线方案(224页).ppt VIP
- 装饰图案第8章 装饰图案与应用设计.ppt VIP
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)危险性较大的分部分项工程专项施工方案严重缺陷清单解读.pdf VIP
- 装饰图案第5章 装饰图案的造型、构图及组织形式.ppt VIP
文档评论(0)