7.2 且标语言 7.2.2指令代价 ·指令代价简化为 1+指令的源和目的地址模式的附加代价 指令 代价 MOV RO,RI 1 MOV R5,M 2 ADD #1, R3 2 SUB4R0),*12R1)3
7 2. 目 标 语 言 7.2.2 指令代价 • 指令代价简化为 1 + 指令的源和目的地址模式的附加代价 指令 代价 MOV R0,R1 1 MOV R5,M 2 ADD #1, R3 2 SUB 4(R0), 12(R1) 3
7.2 且标语言 ·例a=b+c,a、b和c都静态分配内存单元 -可生成 MOV b,RO ADD C,RO 代价=6 MOV RO,a -也可生成 MOV b,a ADD C,a 代价=6
7 2. 目 标 语 言 • 例 a = b + c, a、b和c都静态分配内存单元 - 可生成 MOV b, R0 MOV b, R0 ADD c, R0 代价= 6 MOV R0, a - 也可生成 MOV b, a ADD c, a 代价= 6
7.2 且标语言 。例a=b+c, a、b和c都静态分配内存单元 -若R0,R1和R2分别含a,b和c的地址,则 可生成 MOV *R1,*RO ADD *R2.*R0 代价=2 -若R1和R2分别含b和c的值,并且b的值在 这个赋值后不再需要,则可生成 ADD R2,R1 MOV R1,a 代价=3
7 2. 目 标 语 言 • 例 a = b + c, a、b和c都静态分配内存单元 - 若R0,R1和R2分别含a,b和c的地址,则 可生成 MOV R1, R0 ADD R2, R0 代价= 2 - 若R1和R2分别含b和c的值,并且b的值在 这个赋值后不再需要,则可生成 ADD R2, R1 MOV R1, a 代价= 3
7.3基本块和流图 怎样为三地址语句序列生成目标代码? (1)prod 0 prod 0; (2)i=1 i=1; (3)t1=4*i1 do (4)t=a[til prod prod ali]bli];l ⑤ 3=4*i i=i+1 6 4=b[3l while (i <20); ⑦)t=t2*t (⑧)t6=prod+ts (9)prod t 1(10)t,=i+1 (11)i=t !(12)ifi<=20goto(3)
7 3. 3 基本块和流图 • 怎样为三地址语句序列生成目标代码 ? (1) prod = 0 pro d = 0 ; ( 2 ) i = 1 i = 1; (3) t 1 = 4 i d o { ( 4 ) t [ ] 2= a [ t 1 ] prod = prod + a[i] b[i]; (5) t 3 = 4 i i = i +1; (6) t 4 = b[t 3 ] } while (i <= 20); (7) t 5 = t 2 t 5 4 (8) t 6 = prod + t 5 ( 9 ) prod = t 6 ( (10) t 7 = i +1 (11 ) i = t 7 (11 ) i t 7 (12 ) if i <= 20 goto (3)
7.3基本块和流图 7.3.1基本块 基本块:连续的语句序列, 控制流从它的开 始进入,并从它的末尾离开, 没有停止或分 支的可能性(末尾除外) 流图:用有向边表示基本块之间的控制流信 息,基本块作为结点,就能得到程序的流图
7 3. 基本块和流图 7.3.1 基本块 • 基本块:连续的语句序列,控制流从它的开 控制流从它的开 始进入,并从它的末尾离开,没有停止或分 支的可能性(末尾除外) • 流图:用有向边表示基本块之间的控制流信 息,基本块作为结点,就能得到程序的流图