ch09--目标代码生成.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch09--目标代码生成.ppt

第9章 目标代码生成 知识点:基本块、程序流图 下次引用信息 代码生成算法 §9 目标代码生成 9.1 代码生成概述 9.2 基本块与流图 9.3 一个简单的代码生成程序 9.1 代码生成概述 目标代码生成程序的任务 将前端产生的中间代码转换为等价的目标代码 对目标代码生成程序的要求: 正确 高质量 本节内容: 代码生成程序的位置 代码生成程序设计有关的问题 一、代码生成程序的位置 代码生成程序在编译模型中的位置 代码生成程序的输出:目标代码 目标代码形式 绝对机器代码 可把代码放在内存中固定的地方、立即执行 可重定位机器代码 .obj(DOS)、.o(UNIX) 开发灵活,允许各子模块单独编译 由连接装配程序将它们连接在一起,生成可执行文件 汇编代码 二、代码生成程序设计有关的问题 代码生成程序的具体细节依赖于目标机器和操作系统 所有的代码生成程序固有的问题 存储管理 指令选择 寄存器分配 计算顺序的选择 存储管理 从名字到存储单元的转换由前端和代码生成程序共同完成 三地址代码中的名字 指向该名字在符号表中位置的指针 符号表中的信息 在处理声明语句时填入 “类型”决定了它的域宽 “地址”确定该名字在过程的数据区域中的相对位置 上述信息用于确定中间代码中的名字对应的数据对象在运行时的地址 例如:中间代码与目标代码的对应 对于四元式j:goto i ij ij 指令选择 机器指令系统的性质决定了指令选择的难易程度 一致性 完整性 指令的执行速度 机器的特点 对每一类三地址语句,可以设计它的代码框架 如 x:=y+z 的代码框架可以是 MOV y, R0 ADD z, R0 MOV R0, x 寄存器分配 选出要使用寄存器的变量 局部范围内 在程序的某一点上 寄存器指派 可用寄存器 专用寄存器 通用寄存器 寄存器对 把寄存器指派给相应的变量 变量需要什么样的寄存器 操作需要什么样的寄存器 计算次序的选择 计算次序影响目标代码的效率 如: RISC体系结构的一种通用的流水线限制是:从内存中取出存入寄存器的值在随后的几个周期内是不能用的。在这几个周期期间,可以调出不依赖于该寄存器值的指令来执行,如果找不到这样的指令,则这些周期就会被浪费。所以,对于具有流水线限制的体系结构,选择合适的计算次序是必需的。 有些计算顺序可以用较少的寄存器来保留中间结果 代码生成程序的设计原则 能够正确地生成代码 易于实现、便于测试和维护 9.2 基本块与流图 基本块 具有原子性的一组连续语句序列。 控制从第一条语句流入,从最后一条语句流出,中途没有停止或分支 如: t1:=a*a t2:=b*b t3:=t1+t2 基本块的划分方法 确定入口语句,下面的语句是入口语句: 三地址代码的第一条语句 goto语句转移到的语句 紧跟在goto语句后面的语句 确定基本块,与每一个入口语句相应的基本块: 从一个入口语句(含该语句)到下一个入口语句(不含)之间的语句序列 从一个入口语句(含该语句)到停止语句(含该语句)之间的语句序列 Pascal程序片断: i:=1; while (i=10) do begin a[i]:=a[i]+b[i]; i:=i+1 end (1) i:=0 (2) if i=10 goto (4) (3) goto (17) (4) t1:=4*i (5) t2:=a-4 (6) t3:=4*i (7) t4:=a-4 (8) t5:=t4[t3] /* t5=a[i] */ (9) t6:=4*i (10) t7:=b-4 (11) t8:=t7[t6] /* t8=b[i] */ (12) t9:=t5+t8 (13) t2[t1]:=t9 (14) t10:=i+1 (15) i:=t10 (16) goto (2) (17) … 流图 把控制信息加到基本块集合中,形成程序的有向图,称为流图(控制流图) 流图的结点是基本块 如果一个结点基本块的入口语句是程序的第一条语句,则称此基本块结点为首结点。 如果在某个执行序列中,基本块B2紧跟在基本块B1之后执行,则从B1到B2有一条有向边,B1是B2的前驱,B2是B1的后继。即如果: 有一个条件/无条件转移语句从B1的最后一条语句转移到B2的第一条语句; B1的最后一条语句不是转移语句,并且在程序的语句序列中,B2紧跟在B1之后。 流图示例: 举例 流图: 9.3 一个简单的代码生成程序 依次处理基本块中的每条三地址语句 考虑在基本块内充分利用寄存器的问题 当生成计算某变量值的目标代码时,尽可能让变量的值保存在寄存器中(而不产生把

文档评论(0)

xinshengwencai + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档