代码生成2学时方案.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 12 章 代码生成 ? 代码生成概述 ? 简单的代码生成程序 ? 代码生成程序的开发方法 ? 全局寄存器分配(图着色法) 12.1 代码生成概述 ? 代码生成程序的设计重点:代码生成的质量 (空间 和 时间效率) ? 本章内容 – 简单介绍:代码生成程序的构造方法 – 重点讨论:全局寄存器分配算法 —— 图着 色法(因为执行效率很大程度依赖于寄存 器的使用) 一、代码生成程序在编译系统中的位置 ? 在编译的后端 ? 作用: – 将 中间代码 转换为 目标代码 ? 目标代码的形式: – 能够立即执行的机器语言代码 – 待装配的机器语言模块 – 汇编语言代码 ? 依赖于: 目标机结构、指令系统、操作系统 二、设计代码生成程序的一般问题 1. 代码生成程序的输入 : 中间代码 和 符号表中的信 息 2. 指令的选择 : 寻找一个合适的目标机指令序列 注意:指令集的一致性和完整性;指令速度;机器 用语。 3. 寄存器分配 : 确定在程序的哪个点,将哪些变量或 中间量的值放在寄存器中。 4. 指令调度 : 确定程序指令的执行顺序。 流水线结构中,指令调度是必需的。 二、设计代码生成程序的一般问题 代码生成程序的输入 中间代码 : ? 线性表示法:后缀式 ? 三地址表示法:四元式 ? 抽象机表示法:栈式机器码 ? 图形表示法:语法树 符号表中的信息 : ? 所需存储单元个数 ? 静态数据区域中的相对地址(全局变量) ? 动态数据区域中的相对地址(局部变量) 二、设计代码生成程序的一般问题 指令的选择 :寻找一个合适的目标机指令序列 注意: ? 指令集的一致性和完整性 ? 指令速度 ? 机器用语 基本原则:(冲突时折中考虑) ? 减少产生代码的尺寸 ? 减少目标代码的执行时间 ? 降低目标代码的能耗 二、设计代码生成程序的一般问题 寄存器分配 :确定在程序的哪个点,将哪些值放在寄存器中。 寄存器的使用 : ( 1 )在寄存器分配期间,为程序的某一点选择驻留在寄存器中 的一组变量。 ( 2 )在随后的寄存器指派阶段,挑出变量将要驻留的具体寄存 器。 寄存器分配原则 : ( 1 )生成某变量的目标对象值时,尽量让变量的值或计算结果 保留在寄存器中,直到寄存器不够分配为止。 ( 2 )当到达基本块出口时,将变量的值存放在内存中。 ( 3 )在同一基本块内,后面不再被引用的变量所占用的寄存器 要尽早释放。 寄存器分配方法 : 图着色法 二、设计代码生成程序的一般问题 指令调度 :确定程序指令的执行顺序。(流水线结构中, 指令调度是必需的) ? RISC 体系结构的通用流水线调度限制 :从内存中取入寄存器 中的值在随后的某几个周期中是不能用的。 ? 提高执行效率的方法 :尽可能找出一条或若干条指令(与被 取值无关),在取值指令之后能够立即执行。 ? 举例:参见 P277 表 12.1 12.2 一个简单的代码生成程序 重点讨论 :在一个基本块内如何充分利用寄存 器,以提高目标代码的运行效率。 本节主要内容 : 一、计算机模型 二、待用信息链表法 三、代码生成算法 一、计算机模型 假定一台计算机 ? 具有 n+1 个通用寄存器R0,R1,…,Rn。即可作累加器又可作变址器。 ? 运算器用 op 表示 ? 内存单元用 M 表示 ? 变量所在的内存单元用变量名表示 ? 常量用 C 表示 ? 间址存取用 * 表示 ? 指令形式包含四种类型:间接地址型、寄存器型、变址型、间接 型(参见 P278 表 12.2 ) 二、待用信息链表法 寄存器分配原则之一: ? 在同一基本块内,后面还要被引用的变量值尽可能保存在寄 存器中;后面不再被引用的变量所占用的寄存器要尽早释放 。 为确定后面哪些变量被引用,哪些不被引用,需要确定每个变量的: ? 待用信息 ? 活跃信息 在符号表中设置每个变量的“待用信息”和“活跃信息”的栏目,计 算方法参见 P279 。 ? 举例参见 P279-280 三、代码生成算法 分配操作存储器 R:GETTEG(i: A := B op C) 取 B 和 C 现行值存放的位置 B' 和 C' B'=A V ALUE[B] C'=A V ALUE[C] 生成目标码 OP R,C' 生成目标码 LD R,B'

文档评论(0)

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

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

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档