编译原理与技术讲义-第10章

编译原理与技术讲义-第10章

ID:42329382

大小:234.06 KB

页数:43页

时间:2019-09-12

编译原理与技术讲义-第10章_第1页
编译原理与技术讲义-第10章_第2页
编译原理与技术讲义-第10章_第3页
编译原理与技术讲义-第10章_第4页
编译原理与技术讲义-第10章_第5页
资源描述:

《编译原理与技术讲义-第10章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理与技术第10章目标代码生成青岛大学信息工程学院主要内容代码生成器设计的基本问题虚拟计算机模型语法制导的目标代码生成基本块和待用信息一个简单代码生成器代码生成技术小结编译原理与技术210.1代码生成器设计的基本问题代码生成在整个编译过程的位置符号表代码生成中间代码生成与优化语法树目标程序中间代码中间代码语义分析中间代码编译原理与技术310.1代码生成器设计的基本问题目标程序绝对机器代码,程序所有的内存地址,特别是程序的起始地址,在编译时都已经固定。这种代码的优点是装入机器后就可以立即执行,

2、对于小程序可以快速编译和运行。可重定位机器代码(可重定位目标模块),代码装入内存的起始地址可以任意改变。一组可重定位的若干目标模块,经过连接和装配后才可以运行。尽管这些工作增加了程序运行的代价,但是,可重定位机器代码的优点是灵活性。这种技术允许程序分模块编写,独立地编译成目标模块,并且从目标模块库中调用其它已经编译好的模块,便于程序开发。通常,可重定位机器代码中包含可重定位信息和连接信息。如果目标代码是汇编语言程序,还需要汇编后才能运行。只要地址可以由偏移址及符号表中的其它信息计算得到,代码生成

3、器就可以产生程序中名字的绝对地址或可重定位地址。这样生成代码的好处是不用生成二进制的机器代码,而是产生符号指令并用宏机制来帮助产生机器代码,使得代码生成过程变得容易。为了可读性,本章采用汇编语言作为目标语言。编译原理与技术410.1代码生成器设计的基本问题指令选择一个编译程序可以看成是一个转换系统,它把源程序转换成等价的目标代码,也就是说,对源语言种各种语言结构,依据语义确定相应的目标代码结构,即确定源语言于目标语言之间的对应关系,确保正确实现语义。显然,能否建立这样的关系直接影响到编译程序的质

4、量。目标机器指令系统的性质决定了指令选择的难以程度,指令系统的一致性和完备性直接影响到这种对应关系的建立。如果目标机器能一致地支持各种数据类型和寻址方式,不需特别处理例外,这种对应关系的建立就容易得多。指令执行速度和机器特点对产生目标代码的质量也十分重要。显然,如果指令集合丰富的目标机器对于某种操作可提供集中处理的时候,应该选择效率高、执行速度快的一种。编译原理与技术510.1代码生成器设计的基本问题寄存器选择计算机存储单元之间通常都是通过寄存器联系。寄存器可以保存计算的中间结果,而且运算对象在

5、寄存器的指令一般都比运算对象在内存的指令要短且运算的快。因此,充分合理地利用寄存器对生成高质量的代码十分重要。对于寄存器的使用,应该考虑程序中的哪些变量驻留在寄存器中、驻留多长时间。进一步,哪个变量驻留在哪个寄存器。这些问题可以划分成两个子问题:在寄存器分配期间,为程序的某一点选择驻留在寄存器中的一组变量;在随后的寄存器指派阶段,选择变量要驻留的具体寄存器。选择最优的寄存器指派方案极其困难,从数学以上讲,这是一个NP完全问题。如果考虑到目标机器的硬件、操作系统对寄存器使用的一些要求时,这个问题就

6、变得更加复杂。编译原理与技术610.1代码生成器设计的基本问题计算顺序的选择计算执行的顺序会影响目标代码的质量。改变运算的执行顺序可以减少需要用来保存中间结果的寄存器的个数,从而提高代码的效率。计算顺序最优选择也是一个非常困难的问题,一个NP完全问题。本书不讨论求值顺序问题,简单地就按照源程序或中间代码生成的顺序生成目标代码。编译原理与技术710.2虚拟计算机模型作为目标代码生成阶段地址分配的依据这个目标计算机模型具有n个通用寄存器R0,R1,…,Rn-1,它们既可以作为累加器,也可以作为变址器

7、。假设目标机器按字节编址,4个字接组成一个字。我们用op表示运算符,用字母M表示内存单元,用字母C表示常量,用星号*表示间址方式存取。这台机器指令的一般形式为操作码op源数据域,目的数据域的二地址指令,表示源数据域和目的据域经过op运算以后的结果存到目的数据域。编译原理与技术810.2虚拟计算机模型指令按照地址模式分为四类,见表10.1类型指令形式含义(假设op是二元运算符)直接地址型opM,Ri(M)op(Ri)Ri寄存器型opRi,Rj(Ri)op(Rj)Rj变址型opC(Ri),Rj(

8、(Ri)+C)op(Ri)Rj间接型opM,Ri((M))op(Ri)RiopRi,Rj,((Ri))op(Rj)RjopC(Ri),Rj,(((Ri)+C))op(Rj)Rj立即数#C常数C如果op是一元运算符,则指令“opM,Ri”的含义为:op(M)Ri,其余类型可以类推。上述指令中的运算符(操作码op)包括一般计算机上常见的一些运算符,如加法ADD、减法SUB、负号NEG、乘法MUL、除法DIV、加1INC、减1DEC以及逻辑运算AND、NOT、OR等等。编译原理与技术9

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。