第八章代码生成课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第八章代码生成课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 代码 生成 课件
- 资源描述:
-
1、第八章第八章 代代 码码 生生 成成 本章内容本章内容 一个简单的代码生成算法一个简单的代码生成算法 涉及存储管理,指令选择,寄存器分配涉及存储管理,指令选择,寄存器分配和计算次序选择和计算次序选择等基本问题等基本问题前端前端代代 码码 优优 化化 器器中间中间代码代码源程序源程序代码代码生成生成器器中间中间代码代码目标目标程序程序8.1 代码生成器的设计中的问题代码生成器的设计中的问题8.1.1 目标程序目标程序 可执行目标模块可执行目标模块 可重定位目标模块可重定位目标模块允许程序模块分别编译允许程序模块分别编译调用其它先前编译好的程序模块调用其它先前编译好的程序模块 汇编语言程序汇编语言
2、程序免去编译器重复汇编器的工作免去编译器重复汇编器的工作从教学角度,增加可读性从教学角度,增加可读性8.1 代码生成器的设计中的问题代码生成器的设计中的问题8.1.2 指令的选择指令的选择目标机器指令系统的性质决定了指令选择的目标机器指令系统的性质决定了指令选择的难易程度,指令系统的统一性和完备性是重难易程度,指令系统的统一性和完备性是重要的因素要的因素指令的速度和机器特点是另一些重要的因素指令的速度和机器特点是另一些重要的因素8.1 代码生成器的设计中的问题代码生成器的设计中的问题若不考虑目标程序的效率,指令的选择是直若不考虑目标程序的效率,指令的选择是直截了当的。截了当的。三地址语句三地址
3、语句x:=y+z(x x,y y和和z z都是静态分配)都是静态分配)MOVy,R0/*把把y装入寄存器装入寄存器R0*/ADDz,R0/*z加到加到R0上上*/MOVR0,x/*把把R0存入存入x中中*/逐个语句地产生代码,常常得到低质量的代码逐个语句地产生代码,常常得到低质量的代码 8.1 代码生成器的设计中的问题代码生成器的设计中的问题语句序列语句序列 a:=b+c d:=a+e的代码如下的代码如下MOV b,R0ADDc,R0MOVR0,aMOVa,R0ADDe,R0MOVR0,d8.1 代码生成器的设计中的问题代码生成器的设计中的问题语句序列语句序列 a:=b+c d:=a+e的代码
4、如下的代码如下MOV b,R0ADDc,R0MOVR0,aMOVa,R0-多余的指令多余的指令ADDe,R0MOVR0,d8.1 代码生成器的设计中的问题代码生成器的设计中的问题语句序列语句序列 a:=b+c d:=a+e的代码如下的代码如下MOV b,R0ADDc,R0MOVR0,aMOVa,R0-多余的指令多余的指令ADDe,R0-若若a不再使用,第三条也不再使用,第三条也MOVR0,d-多余多余8.1 代码生成器的设计中的问题代码生成器的设计中的问题8.1.3 寄存器分配寄存器分配运算对象处于寄存器中的指令通常比运算对运算对象处于寄存器中的指令通常比运算对象处于内存的指令要短一些,执行也
5、快一些象处于内存的指令要短一些,执行也快一些 寄存器分配寄存器分配选择驻留在寄存器中的一组变量选择驻留在寄存器中的一组变量 寄存器指派寄存器指派挑选变量要驻留的具体寄存器挑选变量要驻留的具体寄存器8.1 代码生成器的设计中的问题代码生成器的设计中的问题8.1.4 计算次序的选择计算次序的选择某种计算次序可能会比其它次序需要较少的某种计算次序可能会比其它次序需要较少的寄存器来保存中间结果寄存器来保存中间结果8.2 目目 标标 机机 器器 8.2.1 目标机器的指令系统目标机器的指令系统选择可作为几种微机代表的寄存器机器选择可作为几种微机代表的寄存器机器四字节组成一个字,有四字节组成一个字,有n个
6、通用寄存器个通用寄存器R0,R1,Rn-1。二地址指令二地址指令 op 源,目的源,目的MOV源传到目的源传到目的ADD源加到目的源加到目的SUB目的减去源目的减去源 8.2 目目 标标 机机 器器 地址模式和它们的汇编语言形式及附加代价地址模式和它们的汇编语言形式及附加代价模式模式 形式形式地址地址 附加代价附加代价绝对地址绝对地址 M M 1寄存器寄存器 R R 0变址变址 c(R)c+contents(R)1间接寄存器间接寄存器*Rcontents(R)0间接变址间接变址 *c(R)contents(c+contents(R)1 直接量直接量#cc 1 8.2 目目 标标 机机 器器 指
7、令实例指令实例MOVR0,MMOV4(R0),Mcontents(4+contents(R0)MOV*4(R0),Mcontents(contents(4+contents(R0)MOV#1,R08.2 目目 标标 机机 器器 8.2.2 指令的代价指令的代价指令代价取成指令代价取成1加上它的源和目的地址模式的加上它的源和目的地址模式的附加代价附加代价指令指令代价代价MOV R0,R11MOV R5,M 2ADD#1,R32SUB 4(R0),*12(R1)38.2 目目 标标 机机 器器 a:=b+c,a、b和和c都静态分配内存单元都静态分配内存单元MOV b,R0ADD c,R0代价代价=
8、6MOV R0,a8.2 目目 标标 机机 器器 a:=b+c,a、b和和c都静态分配内存单元都静态分配内存单元MOV b,R0ADD c,R0代价代价=6MOV R0,aMOV b,aADD c,a代价代价=6 8.2 目目 标标 机机 器器 a:=b+c,a、b和和c都静态分配内存单元都静态分配内存单元若若R0,R1和和R2分别含分别含a,b和和c的地址,则的地址,则MOV*R1,*R0ADD*R2,*R0代价代价=28.2 目目 标标 机机 器器 a:=b+c,a、b和和c都静态分配内存单元都静态分配内存单元若若R0,R1和和R2分别含分别含a,b和和c的地址,则的地址,则MOV*R1,
9、*R0ADD*R2,*R0代价代价=2若若R1和和R2分别含分别含b和和c的值,并且的值,并且b的值在这个的值在这个赋值后不再需要,则赋值后不再需要,则ADD R2,R1MOV R1,a代价代价=3 8.3 基本块和流图基本块和流图怎样为三地址语句序列生成目标代码?怎样为三地址语句序列生成目标代码?begin|(1)prod:=0 prod:=0;|(2)i:=1 i:=1;|(3)t1:=4*i do begin|(4)t2:=at1 prod:=prod+ai*bi;|(5)t3:=4*i i:=i+1|(6)t4:=bt3 end while i=20|(7)t5:=t2*t4 end|
10、(8)t6:=prod+t5|(9)prod:=t6|(10)t7:=i+1|(11)i:=t7|(12)if i=20 goto(3)8.3 基本块和流图基本块和流图8.3.1 基本块基本块基本块基本块:连续的语句序列,控制流从它的开始:连续的语句序列,控制流从它的开始进入,并从它的末尾离开进入,并从它的末尾离开再用有向边表示基本块之间的控制流信息,就再用有向边表示基本块之间的控制流信息,就能得到程序的流图能得到程序的流图8.3 基本块和流图基本块和流图三地址语句序列的三地址语句序列的划分基本块划分基本块 首先确定所有的首先确定所有的入口语句入口语句序列的第一个语句是入口语句序列的第一个语句
11、是入口语句能由条件转移语句或无条件转移语句转到的语句能由条件转移语句或无条件转移语句转到的语句是入口语句是入口语句紧跟在条件转移语句或无条件转移语句后面的语紧跟在条件转移语句或无条件转移语句后面的语句是入口语句句是入口语句 每个入口语句每个入口语句到下一个到下一个入口语句之前的语句入口语句之前的语句序列构成一个基本块序列构成一个基本块 8.3 基本块和流图基本块和流图(1)prod:=0(2)i:=1(3)t1:=4*i(4)t2:=at1(5)t3:=4*i(6)t4:=bt3(7)t5:=t2*t4(8)t6:=prod+t5(9)prod:=t6(10)t7:=i+1(11)i:=t7(
12、12)if i=20 goto(3)(1)prod:=0(2)i:=1(3)t1:=4*i(4)t2:=at1(5)t3:=4*I(6)t4:=bt3(7)t5:=t2*t4(8)t6:=prod+t5(9)prod:=t6(10)t7:=i+1(11)i:=t7(12)if i=20 goto(3)B1B28.3 基本块和流图基本块和流图8.3.2 基本块的变换基本块的变换 三地址语句三地址语句x:=y+zx:=y+z引用引用y y和和z z并对并对x x定值定值 一个名字的值在基本块的某一点以后还要引一个名字的值在基本块的某一点以后还要引用的话,我们说这个名字在该点是用的话,我们说这个名字
13、在该点是活跃活跃的的 基本块的等价基本块的等价两个基本块计算一组同样的表达式两个基本块计算一组同样的表达式这些表达式的值分别代表同样的活跃名字的值这些表达式的值分别代表同样的活跃名字的值 有很多等价变换可用于基本块有很多等价变换可用于基本块局部变换局部变换 全局变换全局变换8.3 基本块和流图基本块和流图 删除局部公共子表达式删除局部公共子表达式a:=b+c a:=b+cb:=a d b:=a dc:=b+c c:=b+cd:=a d d:=b 删除死代码删除死代码定值定值x:=y+z以后不再引用,以后不再引用,则称则称x为死变量为死变量8.3 基本块和流图基本块和流图 交换相邻的独立语句交换
14、相邻的独立语句t1:=b+c t2:=x+yt2:=x+y t1:=b+c当且仅当当且仅当x和和y都不是都不是t1,b和和c都不是都不是t2 代数变换代数变换x:=x+0可以删除可以删除x:=x*1 可以删除可以删除x:=y*2 改成改成x:=y*y 8.3 基本块和流图基本块和流图8.3.3 流图流图把控制流信息加到基本块集合,形成一个有把控制流信息加到基本块集合,形成一个有向图来表示程序向图来表示程序首结点首结点、前前驱驱、后继、后继8.3 基本块和流图基本块和流图 什么是循环什么是循环?所有结点是所有结点是强连通强连通的的唯一的循环唯一的循环入口入口 外循环和内循环外循环和内循环prod
15、:=0i:=1t1:=4*it2:=at1t3:=4*It4:=bt3t5:=t2*t4t6:=prod+t5prod:=t6t7:=i+1i:=t7if i=20 goto B2B1B28.3 基本块和流图基本块和流图8.3.4 下次引用信息下次引用信息为每个三地址语句为每个三地址语句x:=y op z决定决定x、y和和z的的下次引用信息下次引用信息i:x :=y op z .没有对没有对x的赋值的赋值j:=x .没有对没有对x的赋值的赋值k:=x8.3 基本块和流图基本块和流图8.3.4 下次引用信息下次引用信息为每个三地址语句为每个三地址语句x:=y op z决定决定x、y和和z的的下次
展开阅读全文