- 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章 目标代码生成 编译程序最后一个阶段是目标代码生成。它通常在语义分析后或者优化后的中间代码上进行,并将中间代码转化为等价的目标代码。 本章主要介绍 简单代码生成器的设计和构造方法 9.1 概述 我们知道,编译程序的最终目的是将源程序翻译成等价的目标程序,为了达到此目的,编译程序除了对源程序进行词法分析、语法分析和语义分析外,还必需将语义分析后或者优化后的中间代码转换为等价的目标代码。 一. 目标代码生成的任务 9.1 概述 代 码 生 成 器 目 标 代 码 程 序 中 间 代 码 程 序 代码生成器的输入除中间代码外还包括符号表中的信息,生成的目标代码一般有如下三种形式 1. 能够立即执行的机器语言代码,它们通常存放在固定的存储区中,编译后可直接执行。 9.1 概述 2. 待装配的机器语言模块,当需要执行时,由连接装配程序把它们与另外一些运行子程序连接起来,组合成可执行的机器语言代码。 3. 汇编语言程序,必须通过汇编程序汇编成可执行的机器语言代码。 9.1 概述 二. 设计代码生成器时要着重考 虑目标代码的质量 9.1 概述 衡量目标代码的质量 1.存储空间: 生成的目标代码短。 2.执行效率: 充分利用寄存器,减少 访问存储单元的次数。 9.2 假想计算机模型 具体设计一个代码生成器需要考虑机器结构、系统指令格式等方面的问题。由于计算机体系结构和操作系统的多样性,我们在这里不做具体介绍,仅仅以一个假想的计算机模型为例,简单讨论代码生成的基本原理。 假想计算机的指令格式见P162 依次把四元式变换成目标代码,并在一个基本块内考虑如何充分利用寄存器。 9.3 简单代码生成器 在设计代码生成器时,为考虑充分利用寄存器,我们须要考虑下面两点: 简单代码生成器功能 (1)把基本块内还要使用的变量的值尽可能地保存在寄存器中; 1. 给出寄存器的分配原则 (2)在基本块内,把不再使用的变量所占用的寄存器及时释放掉; (3)当到基本块出口时,将变量的值存放在内存中。 9.3 简单代码生成器 当翻译一个四元式如A=B op C时,我们需要知道在基本块中还有哪些四元式要对变量A、B、C进行引用。 9.3 简单代码生成器 2. 建立每个变量的待用信息和活跃信息 (1)待用信息 例 ? (i) A=T1 ? ? (j) T2 =A OP X 9.3 简单代码生成器 (j)为四元式(i)变量A的待用信息 A在(i)定值 A在(j)引用 (2) 活跃变量 9.3 简单代码生成器 基本块中所有的非临时变量均看作基本块出口之后的活跃变量,临时变量根据其在基本块出口之后是否被引用来确定它是否为活跃变量。 9.3 简单代码生成器 (3) 计算变量待用信息和活跃信息的算法: 输入:基本块及其入口语句号和出口语句号 输出:附加待用信息和活跃信息的基本块 9.3 简单代码生成器 算法的步骤 (1) 将符号表中每个变量的待用信息栏初始化为“非待用”,对活跃信息栏则根据该变量在基本块出口之后是否活跃,将该栏中的信息置为“活跃”或“非活跃”。 假设变量的符号表内有待用信息和活跃信息栏 见表1 9.3 简单代码生成器 (2) 从基本块出口到基本块入口由后向前依次处理各四元式。对每个四元式 i: A=B op C,依次执行如下骤 ① 把符号表中变量A的待用信息和活跃信息附加到四元式i上; ② 把符号表中变量A的待用信息栏和活跃信息栏分别置为“非待用”和“非活跃”; 见表2 见后 9.3 简单代码生成器 ③ 把符号表中变量B和C的待用信息和活跃信息附加到四元式i上; 见后 ④ 把符号表中B和C的待用信息置为i,活跃信息置为“活跃”。 注意,以上①、②、③、④次序不能颠倒。 见表3 9.3 简单代码生成器 ⑴ T=A-B ⑵ U=A-C ⑶ V=T+U ⑷ D=V+U 我们根据上述算法得到待用信息链和活跃信息链如下: 变 量 名 待用信息 活跃信息 待用信息链 活跃信息链 初值 初值 T A B C U V D F F F F F F F F L L L F F L F (3) (2) (1) (1) (2) (3) (4) F (4) F F L L F L L L F L L L F F 返回1 返回2 返回3 待用信息和活跃信息在四元式上的标记如下: ⑴ T⑶L=A⑵L-BFL ⑵ U⑶L=AFL-CFL ⑶ V⑷L=TFF+U⑷L
您可能关注的文档
最近下载
- 《爆炸和火灾危险场所防雷装置检测技术规范GB/T 32937-2016》知识培训.pptx VIP
- 3.1 波的形成 课件-高二上学期物理人教版(2019)选择性必修第一册.pptx VIP
- 《应用密码学》配套教学课件.ppt VIP
- 演讲台风训练.ppt VIP
- 演讲比赛培训方案.pptx VIP
- 演讲台风适用于演讲训练培训.ppt VIP
- 运输企业安全教育培训制度.docx VIP
- JC-T 2027-2010 高纯石英中杂质含量的测定方法—电感耦合等离子体原子发射光谱法.pdf VIP
- 注册安全工程师考试《管理笔记》.docx VIP
- 宁夏平罗县几种典型土壤修正系数的确定.pdf VIP
文档评论(0)