目标代码生成-基本块与流图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B4
(14) t6:=4*i
B5
(15) x:=a[t6]
(16) t7:=4*i
(17) t8:=4*j
(18) t9:=a[t8]
(19) a[t7]:=t9
(20) t10:=4*j
(21) a[t10]:=x
(22) goto (B5)2
B6 (23)
(24) (25) (26) (27) (28) (29) (30)
(3)B=1
(4)L1: A=A+B (5)if B≥C goto L2
(6) B=B+1 (7) goto L1
(8)L2: write A (9)halt
4
Pascal程序片断: (1) i:=0
B1
(2) if i<=10 goto (4)
B2
i:=1;
(3) goto (17)
B3
while (i<=10) do
(2) 转移语句(包括转移语句本
身)
确定基本块,与每一个入口(3语) 停句语相句应(包的括基停本语块句本:身)
– 从一个入口语句(含该语句)到下一个入口语句(不含)
之间的语句序列
入口语句和出口语句之间组成
– 从一个入口语句(含该语句)到一停个止基语本句块(。含该语句)之
间的语句序列
3
例:给以下四元式序列划分基本块。
(11) t5:=a[t4]
(12) if t5>v goto (9)
(13) if i>=j goto (23) B4
(14) t6:=4*i
B5
(15) x:=a[t6]
(16) t7:=4*i
(17) t8:=4*j
(18) t9:=a[t8]
(19) a[t7]:=t9
(20) t10:=4*j
(1)read C (2)A=0 (3)B=1 (4)L1 : A=A+B (5)if B≥C goto L2 (6)B=B+1 (7)goto L1 (8)L2 : write A (9)halt
根据划分基本块的算法可以 确 定 四 元 式 (1)(4)(6)(8)是 入 口语句; (3)(5)(7)(9)是出口语 句,因此((分12))为rA四e=ad0个C基本块
t11:=4*i x:=a[t11] t12:=4*i t13:=4*n t14:=a[t13] a[t12]:=t14 t15:=4*n a[t15]:=x
9
书312页: 9.1
B4 B5 B2
10
(12) t9:=t5+t8
(13) t2[t1]:=t9
(14) t10:=i+1
(15) i:=t10
(16) goto (2)
(17) …
B5
5
流图
把控制信息加到基本块集合中,形成程序的有向 图,称为流图(控制流图) 流图的结点是基本块 如果一个结点基本块的入口语句是程序的第一条 语句,则称此基本块结点为首结点。 如果在某个执行序列中,基本块B2紧跟在基本块 B1之后执行,则从B1到B2有一条有向边,B1是 B2的前驱,B2是B1的后继。即如果:
B3 (3) goto B5 B5 (17) ……
7
举例 基本块划分:
(1) i:=m-1
B1
(2) j:=n
(3) t1:=4*n
(4) v:=a[t1]
(5) i:=i+1
B2
(6) t2:=4*i
(7) t3:=a[t2]
(8) if t3<v goto (5)
(9) j:=j-1
B3
(10) t4:=4*j
B1
(3) t1:=4*n (4) v:=a[t1]
(5) i:=i+1 (6) t2:=4*i
B2
(7) t3:=a[t2] (8) if t3<v goto (B5)2
(9) j:=j-1
(10) t4:=4*j
B3
(11) t5:=a[t4] (12) if t5>v goto (B9)3
(13) if i>=j goto (B236)
(21) a[t10]:=x
(22) goto (5)
(23) t11:=4*i
B6
(24) xwenku.baidu.com=a[t11]
(25) t12:=4*i
(26) t13:=4*n
(27) t14:=a[t13]
(28) a[t12]:=t14
(29) t15:=4*n
(30) a[t15]:=x
8
流图:
(1) i:=m-1 (2) j:=n
t1:=a*a
t2:=b*b
t2:=a*b
t3:=t1+t2
t3:=2*t2
t4:=t1+t3
t5:=b*b
t6:=t4+t5
2
基本块的划分方法
确定入口语句,下面的语句是入口语句:
– 三地址代码的第一条语句(若从四元式序列确定基本块的
入口语句,则四元式序列的第一个语句)
– goto语句转移到的语句 2. 确定基本块的出口语句: – 紧跟在goto语句后面的语句(1) 下一个入口语句的前导语句
– 有一个条件/无条件转移语句从B1的最后一条语句转移 到B2的第一条语句;
– B1的最后一条语句不是转移语句,并且在程序的语句 序列中,B2紧跟在B1之后。
6
流图示例:
B1 (1) i:=1 B2 (2) if i<=10 goto B4
B4 (4) t1:=4*i (5) t2:=a-4 (6) t3:=4*i (7) t4:=a-4 (8) t5:=t4[t3] (9) t6:=4*i (10) t7:=b-4 (11) t8:=t7[t6] (12) t9:=t5+t8 (13) t2[t1]:=t9 (14) t10:=i+1 (15) i:=t10 (16) goto B2
(4) t1:=4*i (5) t2:=a-4
B4
begin
(6) t3:=4*i
a[i]:=a[i]+b[i];
(7) t4:=a-4
i:=i+1 end
(8) t5:=t4[t3] (9) t6:=4*i (10) t7:=b-4
/* t5=a[i] */
(11) t8:=t7[t6] /* t8=b[i] */
第9章 目标代码生成
知识点:基本块、程序流图 下次引用信息 代码生成算法
9.2 基本块与流图
基本块:是指程序中一组顺序执行的语句序列,其 中只有一个入口语句和一个出口语句。
– 具有原子性的一组连续语句序列。
– 控制从第一条语句流入,从最后一条语句流出,中途没 有停止或分支
如:
基本块:
t1:=a*a