编译原理第12章代码生成题稿.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理之 代码生成 华东交通大学软件学院 万仲保 代码生成 概述 目标代码的主要目标 目标代码的主要形式 生成目标代码衡量指标 计算机模型 简单的代码生成器 全局寄存器分配 代码生成概述 代码生成是把经过语法分析或优化后的中间代码作为输入,将其转换成特定机器的机器语言或汇编语言作为输出,这样的转换程序称为代码生成器。 代码生成的任务是在编译前端生成的中间代码的基础上,生成等价有效的目标代码,这也是一种程序变换,变换的结果是产生目标代码。 等价是任一种程序变换的基本要求,因此讨论将集中在目标代码和如何产生有效的目标代码上。 有效,是指目标代码占用的空间要省,运行的时间要短,这涉及充分利用寄存器和生成优化的代码序列的问题。 目标代码的主要目标 第一.使所生成的目标代码尽可能地短。 第二,能较充分地发挥目标计算机可用资源的效率,如尽可能地使用执行速度较快的指令;充分利用计算机的寄存器或变址器,以节省访问内存的时间,等等。 目标代码的主要形式 具有绝对地址的机器语言程序 可浮动的机器语言程序 汇编语言形式的程序 绝对地址的机器语言程序 优点:最为有效,因为它们在存储空间中有固定的位置,一旦产生出此种形式的目标程序之后,便可直接投入运行。 缺点:不能独立地完成源程序各程序块的编译,即使是供源程序调用的子程序也必须同时进行编译,因而灵活性较差。 通常是在程序较短,而调试工作量较大的情况下,采用此种方式。 可浮动的机器语言程序 有较大的灵活性,故为许多编译程序所采用,只有执行连接装入程序本身需耗费一些时间。 目标程序由若干个目的模块组成,各个模块中都包含目标程序中的一部分代码,且这些代码可在存储空间进行浮动(即可将它们装入到存储空间的任何位置)。 此外,在各目的模块中还含有一些连接信息(如本模块需引用的其它模块中的符号名或子程序入口名)。 对此种形式的目标代码,需经过连接装入程序把它们和所需的运行子程序的目的模块连接起来之后,才能投入运行。 汇编语言形式的程序 汇编语言形式较容易实现一些,但需在编译完毕之后额外增加一个汇编目标程序的阶段。 尽管此种方式有某些优点,但并不是一种最好的方案。 计算机模型 假定一个计算机具有n个通用寄存器为R0,R1,…,R n-l。它们既可作为累加器又可作为变址器,设定: 用“op”表示运算符; 用“M”表示内存单元; 用变量名表示该变量所在的单元; “C”表示常量; “*”表示间址方式存取。 模型机的指令形式 模型机主要指令的意义 模型机寻址方式 模型机的指令形式 模型机主要指令的意义 模型机寻址方式 生成目标代码衡量指标 目标程序(指令条数); 执行目标程序所占的机器时间; 目标程序所有指令执行代价的总和。 简单的代码生成器 寄存器分配的原则 待用信息链表法 代码生成算法 寄存器分配的原则 (1)当生成某变量的目标代码时,尽量让变量的值或计算结果保留在寄存器中直到寄存器不够分配时为止,这样引用变量值时可减少对内存的存取次数,以提高运行速度。 (2)当到基本块出口时,将变量的值存放在内存中,因为一个基本块可能有多个后继结点或多个前驱结点,同一个变量名在不同前驱结点的基本块内出口前存放的R可能不同,或没有定值,所以应在出口前把寄存器的内容放在内存中,这样从基本块外入口的变量值都在内存中。 (3)对于在一个基本块内后边不再被引用的变量所占用的寄存器应尽早释放,以提高寄存器的利用效率。 待用信息链表法 待用信息: 在基本块B中,变量A在i点的值,j点引用,并且i→j的通路上没有A的其他定值和引用,则j为i处A的下一个引用点,即待用信息。 计算变量待用信息的步骤 示例 计算变量待用信息的步骤 (1)对各基本块的符号表中的“待用信息”栏和“活跃信息”栏置初值,即把“待用作息”栏置“非待用”,对“活跃信息”栏按在基本块出口处是否为活跃而置成“活跃”或“非活跃”。这里假定变量都是活跃的,临时变量都是非活跃的。 (2)从基本块出口到基本块入口由后向前依次处理每个四元式 i:A:=B op C,依次执行下述步骤: a)把符号表中变量A的待用信息和活跃信息附加到四元式i上。 b)把符号表中变量A的待用信息栏和活跃信息栏分别置为“非待用”和“非活跃”。(由于在i中对A的定值只能在i以后的四元式才能引用,因而对i以前的四元式却说,A是不活跃也不可能是待用的) c)把符号表中B和C的待用信息和活跃信息附加到四元式i上。 d)把符号表中B和C的待用信息栏置为“i”,活跃信息栏置为“活跃”。 注意,以上a)和b),c)和d)的次序不能颠倒。 计算变量待用信息的示例 例 若用A,B,C,D表示变量,用T,U,V表示中间变量,有四元式如下: (1)T:=A-B (2)U:=A-C (3

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档