📜  基本块

📅  最后修改于: 2020-12-06 08:05:43             🧑  作者: Mango

基本块

基本块包含一个语句序列。控制流从语句的开始进入,而在结束时离开而没有任何停止(可能是该块的最后一条指令除外)。

以下三个地址语句序列构成一个基本块:

t1:= x * x
t2:= x * y
t3:= 2 * t2
t4:= t1 + t3
t5:= y * y
t6:= t4 + t5

基本块构造:

算法:划分为基本块

输入:它包含三个地址语句的序列

输出:它包含一个基本块列表,每个三个地址语句恰好在一个块中

方法:首先确定代码中的领导者。寻找领导者的规则如下:

  • 第一个陈述是领导者。
  • 如果有条件或无条件的goto语句,例如:if …. goto L或goto L,则语句L为领导者
  • 如果指令L紧随goto或条件goto语句(例如:goto B或goto B),则它是领导者

对于每个领导者,其基本块都由领导者和所有陈述组成。它不包括程序的下一个领导者或结尾。

考虑以下两个长度为10的向量a和b的点积的源代码:

begin 
           prod :=0; 
i:=1; 
do begin 
prod :=prod+ a[i] * b[i]; 
i :=i+1; 
end 
while i <= 10 
end

上面的源程序的三个地址代码如下:

B1

(1)    prod := 0 
(2)    i := 1

B2

(3)    t1 := 4* i 
(4)    t2 := a[t1] 
(5)    t3 := 4* i 
(6)    t4 := b[t3] 
(7)    t5 := t2*t4 
(8)    t6 := prod+t5 
(9)    prod := t6 
(10)    t7 := i+1 
(11)    i := t7 
(12)    if i<=10 goto (3)    

基本块B1包含语句(1)至(2)

基本块B2包含语句(3)至(12)