《编译原理》第10章-目标代码生成.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文档。上传文档
查看更多
《编译原理》第10章-目标代码生成

第十章 目标代码生成 目标代码 临时变量的存储空间分配 寄存器的分配和释放 基于三地址中间代码的目标代码生成 目标代码生成概述 目标代码生成器的输入和输出 输入:中间代码/TokenList+[符号表] 输出: 绝对机器代码:执行速度快,缺乏灵活性 可重定位机器代码:可分模块编译,需连接和装入 汇编代码:必须经过汇编程序汇编 衡量目标代码质量的标准 在保证语义相等的情况下,生成的目标指令的条数越少和执行速度越快 虚拟机 指令格式为:op destination source 其中destination和source不能同为存储字 虚拟机的寻址方式和相应的汇编语言表示形式 虚拟机的指令系统 LD R,Source 从Source 读出送入R Op R,Source Source op R结果 送入R ST Target,R R的内容送入Target 三种硬件地址模式 硬件地址模式:#c ----立即式 d(R) ----变址式 R ----寄存式 指令格式: Op #C R (立即-----寄存器) Op d(R1) R2 (存储器-----寄存器) Op R1 R2 (寄存器-----寄存器) 几个常见指令的含义 : Load Source R 从Source 读出送入R Op Source R Source op R结果 送入R Store Target R R的内容送入Target. 临时变量 临时变量的静态分配 定值点:如果i中间代码给临时变量T定值, 则称i为临时变量T的定值点。 引用点:如果j中间代码使用T,则称j为T的 引用点。 活动区间:如果i是T的定值点,j是T的最后 引用点,则称[i, j]是T的活动区间。 活动区间[i, j]和[m, n]不严格相交:如果m?j或i ?n。 空间分配: 如果两个临时变量的活动区间不严格相交,则可以 共享单元 变量的状态描述 变量:源变量和临时变量 描述内容: 变量是否在寄存器中: 变量的现行值是否在内存中: 变量的值在其后是否还使用: 变量的下次引用距离: 状态描述形式(DL, SNS) DL: 如果从下一位置开始,到变量A重新被赋值或基本块结束,没有A的当前值的引用,则定义当前该变量的DL为D;否则定义为L。表示此后变量的状态。 SNS: 如果A的值在寄存器但不在内存,而且当该寄存器被剥夺时需要保存变量的值,则当前该变量的SNS的值为S(Store),否则取NS。 寄存器 寄存器的分类: 可分配寄存器 保留寄存器 零用寄存器 寄存器的使用准则: 寄存器先行准则 寄存器活跃准则 寄存器多载准则 寄存器的状态描述: 占有该寄存器的所有变量状态描述的集合。 寄存器的状态变化 如果现行值已在内存中,则不需回送 现行值不在内存,但该值没有下次引用。不需回送 生成代码 Load B, R 时:构造R:{B(L/D, NS)} 生成(Op , A, B, T)的目标代码为: Load A,B Op B,R 时: 把T(L, NS) 加入R的状态表中,从R中删除A项 申请寄存器时R的状态表为空,释放时表也为空(可能生成一些store指令)。 寄存器的分配 分配原则:选择代价最小的寄存器 寄存器的选择代价:Store代价、Load代价 把寄存器中的现行值回送内存的Store指令总代价; 由于寄存器被剥夺,下次重新装入寄存器的Load指令的总代价; 如果申请到的是未分配过的新寄存器,则代价为0。 释放代价: X (D, NS) ----0 X(D, S) ----0 X(L, NS) ----2 X(L, S) ----4 分配算法: 选择最小释放代价,下次引用距离最远 的寄存器 四元式到目标代码的翻译 翻译过程:从头到尾逐条扫描四元式,每扫描完一条四元式就把它翻译成对应的目标代码(一条四元式可能会对应若干

文档评论(0)

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

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

1亿VIP精品文档

相关文档