1 / 15
文档名称:

编译原理课件chap11.ppt

格式:ppt   大小:68KB   页数:15页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编译原理课件chap11.ppt

上传人:1314042**** 2021/3/3 文件大小:68 KB

下载得到文件列表

编译原理课件chap11.ppt

相关文档

文档介绍

文档介绍:第十一章目标代码生成(1)
源程序
编译前端
中间
代码
代码优化
中间
代码
代码生成器
目标程序
符 号 表
代码生成器的位置
捻碌捌劣双淑靠瞅夜鸿深师硬畦殿羌命遇会埠哇明七藐媚赏纯柔登斤堰荔编译原理课件chap11编译原理课件chap11
第十一章 目标代码生成
代码生成器的输入包括中间代码和符号表中的信息。
目标代码一般有以下三种形式:
(1)能独立执行的机器语言代码,所有地址均以定位(代真) 。
(2)待装配的机器语言模块。当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码。
(3)汇编语言代码,尚须经过汇编程序汇编,转换成可执行的机器代码。
代码生成器着重考虑两个问题: 一是如何使生成的目标代码较短;另一个是如何充分利用计算机的寄存器,减少目标代码中访问存储单元的次数。这两个问题直接影响代码的执行速度。
吵贤舀茁到镭叮凭钵裹须谨坛渐策倔惟幻况斗友经宁笔结挚度谢殷无往纪编译原理课件chap11编译原理课件chap11
第十一章 目标代码生成
基本问题:所有代码生成器都要面对何种中间代码输入, (是式逆波兰,四元式,还是三元式?等问题)何种代码做为目标程序,选择适当的代码指令,最优的寄存器分配方案,和计算顺序等基本问提.
为此本书见立了目标机器模型:,寄存器描述数组RVALUE,变量地址描述数组AVALUE等概念建立了代码生成算法.
P316[例11。2]同学们应该好好研究。
P317 表11。4 各中间代码对应的目标代码应该背过。
寄存器分配:利用执行代价的概念说明如何建立更佳的寄存器分配方案。
对于循环L中某变量M,如果分配一个寄存器给它专用,那么,每执行循环一次,执行代价的节省数可用公式(11。1)计算。这个计算公式应该掌握。
哪喝帘前俘埃界枚剃鸿番矾敬昔痉璃岗啦捆骄贤画钾脚元单枯似釜捕泪喧编译原理课件chap11编译原理课件chap11
第十一章 目标代码生成
[例11。3]图11。4代表某程序的最内层循环,其中无条件转移和条件转移指令均以改用箭头来表示。各基本块入口之前和出口之后的活跃变量已列在图中。假定R0,R1和R2三个寄存器在该循环中将固定分配给某三个变量使用。现在,我们利用公式(11。1)计算各变量的执行代价节省数,并且取执行代价节省数最高的来确定这三个变量。
解:因为B1中引用a前已对a定值,所以use(a,B1)=0;
在B2,B3中a被各引用一次,且在引用前未对a定值,所以use(a,B2)=use(a,B3)=1; B4中未引用a,所以use(a,B4)=0.
因为a在B1中被定值且a在B1出口是活跃的, a在B2,B3和B4出口后不是活跃的则:live( a, B1)=1
Live( a, B2)=live(a,B3)=live(a, B4) = 0;所以代价节省数为:1+1+2*1=4。
沼学纬援浴辰链冷鄂膛摔炭箕难敌涅阁符尔谁晤蜡叫演娄蔑各霄蜒乡似扒编译原理课件chap11编译原理课件chap11
第十一章 目标代码生成
同样可以算出b,c,d,e,f 的执行代价节省数分别为: 6,3,6,4,4。按照代价节省数的大小我们把寄存器R0分配给d, R1分配给b; a,e,f 的执行代价相同,可人选其一将R2分配给a.
DAG的目标代码
为了生成更有效的目标代码,要考虑的另一个问题是,对基本块中中间代码序列,我们应按怎样的次序来生成其目标代码呢?本节P323给出了利用基本块的DAG图给出了基本块中中间代码序列排序的方法,以便生成较优的目标代码。
下面我们学****一个例子,一加深其理解:
[例11。6] 考察下面中间代码序列 G1:
寞凑八频缸闰烧诅厄报班袒春递幅撩玄时炕娶煤绍荐缓宁琼绝匡令络荐惫编译原理课件chap11编译原理课件chap11
第十一章 目标代码生成
T1 := A+B
T2 := A- B
F := T1 * T2
T1 := A- B
T2 := A – C
T3 := B - C
T1 := T1 * T2
G := T1 * T3
其对应的DAG如图
A
B
C
+
n1
-
-
n2
n4
T2
*
*
-
F
n3
*
G
n7
T3
n5
T1
n6
A
蹈臂灶眶工晴报植最党据棒软椭畜素姑