目标代码生成解析ppt课件.ppt

目标代码生成解析ppt课件.ppt

ID:58936586

大小:422.50 KB

页数:52页

时间:2020-09-28

目标代码生成解析ppt课件.ppt_第1页
目标代码生成解析ppt课件.ppt_第2页
目标代码生成解析ppt课件.ppt_第3页
目标代码生成解析ppt课件.ppt_第4页
目标代码生成解析ppt课件.ppt_第5页
资源描述:

《目标代码生成解析ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第11章目标代码生成编译的最后一个阶段是目标代码生成。它从前几个阶段得到的信息包括中间代码或优化后的中间代码,以及带有存储信息的符号表。这一阶段的主要任务是把源程序的中间代码变换成依赖于具体机器的等价的目标代码。代码生成器的输入包括中间代码和符号表,输出目标程序。目标代码可以是:绝对机器代码、可重定位机器代码、汇编代码等。只要地址可由偏移值及符号表中的其它信息来计算,目标代码生成器便可以产生可重定位或绝对的地址。代码生成器着重考虑两个问题:一是如何使生成的目标代码较短;二是如何充分利用计算机的寄存器,减少目标代码中访问存

2、储单元的次数。因为指令对寄存器的操作比对存储单元的操作快。 这两个问题直接影响目标代码的执行速度。代码生成器的最重要的评价标准是它能否产生正确的代码。在此前提下,使代码生成器本身易于实现、测试及维护也是重要的设计目标。设计代码生成器的具体细节依赖于目标机器和操作系统。要考虑内存管理、寄存器分配等。11.1基本问题1.代码生成器的输入代码生成器的输入包括中间代码(四元式)和符号表。在编译前端已对源程序进行了扫描、分析、翻译,并进行了语义检查,产生了合理的(优化过的)中间代码,而且语义正确。在翻译说明语句时已将相关信息填入到

3、符号表中,知道了各个名字的数据类型;在经过存储分配的处理后,可以确定各个名字在所属过程的数据区中的相对地址。因此目标代码生成器可以利用符号表中的信息来决定中间代码中的名字所表示的数据对象在运行时的地址,它是可重定位的。2.代码生成器的输出代码生成器的输出是目标程序(汇编代码)。以汇编语言程序作为输出使代码生成阶段变得容易。在生成符号指令后,可以使用汇编程序来辅助生成目标代码。但需要额外的开销进行汇编。3.指令的选择目标机器指令集的性质决定了指令选择的难易程度,编译时选择生成哪些指令是在生成目标代码时考虑的一个重要因素。如

4、果目标机器不支持所定义的指令集中的指令和数据类型,那么每一种例外都要特别处理。指令的执行速度和机器特点也是考虑的重要因素。如果不考虑目标程序的效率,对每种类型的中间代码,可以直接选择指令,勾画出代码的框架。对形如x:=y+z的中间代码(其中x、y、z都是静态分配的变量),可以翻译为如下的目标代码序列:movAX,y//将y放入寄存器AXaddAX,z//z与AX相加movx,AX//将AX中的值存入x中目标代码的质量取决于它的速度和大小。有丰富指令集的机器可以为一个给定的操作提供几种实现方法:不同的实现所需的代码不同,有

5、些方式会产生正确但不一定高效的代码。例如:如果目标机器有“加1”指令(INC),中间代码a:=a+1就可以使用INCa实现,这是最高效的;如果没有INC指令,必须用下述指令序列来实现:movR0,a//将a放入寄存器R0addR0,#1//R0的值加1,#表示常数mova,R0//将R0中的值存回a中4.寄存器的分配指令对寄存器的操作要比对存储单元的操作快且指令短,但计算机中的寄存器较少,充分利用寄存器,对于生成好的代码非常重要。寄存器的分配可以归为两个子问题:(1)在寄存器分配期间,在程序的某一点选择要驻留在寄存器中的

6、一组变量;(2)在随后的寄存器指派阶段,挑选出变量将要驻留的具体寄存器。选择最优的寄存器指派方案很困难。要考虑目标机的硬件或操作系统对寄存器的使用要遵循一些规则时,将更加复杂。5.计算顺序的选择计算完成的顺序也会影响目标代码的有效性。有效计算顺序要求存放中间结果的寄存器数量少,从而提高目标代码的效率。6.存储管理源程序中的名字映射成运行时数据对象的地址是由编译前端和代码生成器共同完成的。四元式中的名字所需的存储空间以及在过程数据区中的相对地址已经在存储分配中计算,并在符号表中给出。要生成机器代码,必须将四元式中的标号变成

7、指令的地址。在依次扫描四元式代码时,维护一个计数器,记住到目前为止产生的指令字数,就可以推断出为该四元式代码生成的第一条指令的地址。如果碰到跳转指令j:gotoi,且j>i,就可以根据编号i找到第i条四元式代码所产生的第一条指令的地址;如果j

8、它类型的机器上。8086是16位微处理器,有8个16位通用寄存器AX,BX,CX,DX,BP,SP,SI,DI,IP,CS,DS,SS,ES。其中BX和BP通常用于指定数据区的基址,称为基址寄存器,SI和DI多用来表示相对基址的偏移,故称为变址寄存器。11.2目标机器8086的地址空间是分段的,每段64K。为简单起见

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

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

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