编译原理基础(刘坚)第6章节.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文档。上传文档
查看更多
尚辅网 / 第6章 代 码 生 成 第6章 代 码 生 成 6.1 代码生成的相关问题 6.2 简单的计算机模型 6.3 简单的代码生成器 6.4 本章小结 6.1 代码生成的相关问题 1.中间代码形式 中间代码有多种形式,其中树与后缀式形式适用于解释器,而对于希望生成目标代码的编译器而言,中间代码多采用与一般机器指令格式相近的三地址码形式。 2.目标代码形式 目标代码的形式可以分为两大类:汇编语言和机器指令。而机器指令又可以根据需求的不同分为绝对机器代码和可再定位机器代码。绝对机器代码的优点是可以立即执行,一般应用于一类称为load-and-go形式的编译模式,即编译完成后立即执行,不形成磁盘形式的目标文件,这种形式特别适合于初学者学习语言的情况。可再定位机器代码的优点是目标代码可以被任意链接并装入内存的任意位置,是编译器最多采用的代码形式。 汇编语言作为一种中间输出形式,便于软件开发人员的测试;load-and-go提供给初学者使用;可再定位机器代码用于真正的软件开发。出于教学的目的,此处选择汇编语言作为目标代码。 3.寄存器的分配 由于寄存器的存取速度远远快于内存,一般情况下,总是希望尽可能多地使用寄存器,而寄存器的个数是有限的,因此,如何分配寄存器的使用,是目标代码生成时需要考虑的重要因素之一。 4.计算次序的选择 代码执行的次序不同,会使代码的运行效率有很大差别,在生成正确目标代码的前提下,优化安排计算次序和适当选择代码序列,也是代码生成需要考虑的重要因素之一。 6.2 简单的计算机模型 1.指令系统与寻址方式 计算机模型的寻址方式如表6.1所示。令X代表Ri或者M,则赋值号右边的(X)表示直接取X内容作为操作对象,((X))表示一层间接,即取X的内容作为地址。可以看出,此模型中的指令与三地址码十分相似。基本寻址方式有直接型、寄存器型和变址型,对应这三种寻址方式,均可以间接寻址。 表 6.1 计算机模型的指令系统与寻址方式 表6.1中op均表示二元运算;若为一元运算,则指令op Ri, M的意义为Ri := op (M),对应三地址码形式为x := op y。 2.特殊指令 除了上述的寻址方式和一般的运算指令之外,计算机模型的指令系统中还包括如表6.2所示的特殊指令,主要有两大类:内存与寄存器交换类,包括LD与ST;比较与转移类,如CMP与J X等。 表 6.2 计算机模型的特殊指令 3.指令的代价 由于各指令中操作对象可以是寄存器,也可以是内存地址,可以是直接寻址,也可以是间接寻址,因此,各条指令的执行时间是不同的。每条指令执行的时间称为指令的代价。假设寄存器的代价为1,内存地址的代价为2,则上述计算机模型的指令代价如表6.3所示。代价并不是一个严格的量化指标,只是可以用它大概估算不同类型指令执行时间的差异,因此也可以采用所谓的相对代价,即令代价最小的指令的相对代价为0,则其它指令代价与其的差就是相对代价的值。 表 6.3 计算机模型的指令代价 例6.1 以下是一个三地址码序列和对应的目标代码序列,它们的相对代价被分别列在指令的右边。 t := a + b LD R1, a 0 t := t * c ADD R1, b 1 t := t / d MUL R1, c 1 DIV R1, d 1 6.3 简单的代码生成器 6.3.1 基本块与程序流图 定义6.1 一段顺序执行的语句序列被称为一个基本块,其中,第一条语句被称为基本块的入口,最后一条语句被称为基本块的出口。 由于基本块中的语句是被顺序执行的,因此基本块的控制流总是从入口进入,从出口退出。任何一个复杂的程序控制流,均可以划分为若干个基本块;极端情况下,一条语句构成一个基本块。因此可以将一段完整的程序表示为一个程序流图。 定义6.2 程序流图(简称流图)是一个有向图,基本块构成图的节点。含有程序的第一条语句的基本块被称为流图的首节点。若在程序控制流中,基本块Bj紧接在基本块Bi之后执行,即控制流从Bi流向Bj,则从Bi到Bj有一条有向边,且称Bi是Bj的前驱节点,Bj是Bi的后继节点。 所谓基本块的划分,实际上就是如何找出程序段中所有顺序执行的子序列。将这些基本块作为流图的节点,并且在基本块划分时记录下控制流的转移,即可得到程序

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档