编译原理简明教程(第2版)第9章.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文档。上传文档
查看更多
编译原理简明教程(第2版)第9章

《编译原理简明教程》 普通高等教育“十二五”规划计算机教材 ---太原理工大学 ---计算机科学与技术学院 ---冯秀芳、崔冬华、段富等 第一章 引言 第二章 形式语言理论基础 第三章 自动机理论基础 第四章 词法分析 第五章 语法分析—自顶向下分析方法 第六章 语法分析—自底向上分析方法 第七章 语义分析及中间代码的生成 第八章 代码优化 第九章 目标代码的生成 第十章 符号表 第十一章 目标程序运行时的存储组织与分配 第十二章 出错处理 第十三章 编译程序自动生成工具简介 第十四章 面向对象语言的编译 第十五章 并行编译技术 目 录 第九章 目标代码的生成 学习目标 了解和掌握目标代码生成程序中的有关问题 了解和掌握虚拟机       了解和掌握从中间代码生成目标代码       目标代码生成是编译程序的最后一个工作阶段。它取先行阶段所产生的源程序的中间语言或优化后的中间语言表示作为输入,产生等价的目标代码作为输出,如下图9.1所示。 图9.1 目标代码生成过程 第九章 目标代码的生成 9.1 目标代码生成程序中的有关问题 9.2 一个计算机模型——虚拟机 9.3 从中间代码生成目标代码 第九章 目标代码的生成 9.1 目标代码生成程序中的有关问题 对于一个好的代码生成程序,要求其使所生成的目标代码尽可能地短,并能较充分地发挥目标计算机可用资源的效率。如充分利用计算机的寄存器或变址器,以节省访问内存的时间,尽可能使用执行速度较快的指令,存储管理合理,等等。 熟悉目标机器和它的指令系统是设计一个好的代码生成程序的先决条件,但在代码生成的一般性讨论中,不能对目标机器细节描述到足够详细的程度,以便对一个完整的语言产生好的代码。本章不以某一台具体的计算机做背景,只是针对一个假想的计算机模型——虚拟机给出生成目标代码的算法。 9.1.1 目标代码生成程序的输入、输出 编译程序的最终输出是目标代码,这在编译程序的代码生成阶段完成,也可在语义分析阶段生成。一般地,代码生成部分称为代码生成程序。代码生成程序的功能是为源程序生成与之等价的目标机器代码。也就是说,其输入是由先行端产生的源程序的中间表示,输出是目标代码。 假定在代码生成前,编译的先行端已扫描、分析和翻译源程序,成为足够详细的中间表示,这样,中间语言中名字的值可以表示为目标机器能够直接操作的量(位、整数、实数、指针等),还假定必要的类型检查与插入类型转换等已完成,不仅语法上正确,语义也是正确的,这样代码生成阶段可以认为它的输入是正确的。 9.1.2 目标代码 ① 能够立即执行的机器语言代码,所有地址均已定位。即具有绝对地址的机器语言代码。 这种形式(即已定位的机器语言代码作为输出)的好处是,它可以放在内存固定的地方,可以立即执行,这样对于小的程序可以迅速编译和执行。但由于不可重定位,其灵活性比较差。在编译过程中,通常要把整个源程序一起编译。而不能独立地完成源程序各程序块的编译,即使是供源程序调用的子程序也必须同时进行编译。 ② 待装配的机器语言模块。当需要执行时,由连接装配程序把它们和某些运行程序连接起来,装配成可以执行的机器语言代码。即可浮动的机器语言代码。 这种形式是可浮动的机器语言代码,又称相对目标代码,允许子程序分别编译,在具体执行前必须确定代码运行时在存储器中的位置,即给代码定位,从而形成可执行代码。这种代码比较灵活,可以分别编译以及从目标模块中调用先前已编译好的其他程序模块。常用的编译程序大多采用这种可浮动的代码形式。 代码生成程序的输出的形式一般有以下三种形式: ③ 汇编语言形式的代码。需要经过汇编程序汇编转换成可执行的机器语言代码。 这种形式比前两种更具有灵活性。它的主要优点是可以产生符号指令和利用宏机制来帮助生成代码,目前不少编译程序采用这种代码形式。 9.1.2 目标代码 本章采用汇编语言代码作为目标代码,但不针对某种特定的目标机指令系统或汇编语言来生成目标代码,而是假设有一台计算机,其指令系统等均按某种需要而设定,为教学目的往往采取这种虚拟机目标代码形式。 下面就以一种虚拟机指令系统来讨论目标代码的生成。 9.1.3 寄存器分配 通常,计算机存储之间不直接打交道,而是通过寄存嚣。寄存器可以用来保存中间计算结果,而且运算对象在寄存器中的指令一般比运算对象在内存的指令短些,执行速度也快些,因此,充分利用寄存器对生成高质量目标代码尤其重要。寄存器的分配也自然成为目标代码生成中的主要问题。 寄存器的分配策略与目标机的资源密切相关。有些机器中的寄存器分为变址器和数据寄存器,还有些机器的寄存器可以通用。 按用途不同,寄存器可分为作为变址器使用、专供操作系统使用、用于目标代

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档