【文章內(nèi)容簡(jiǎn)介】
p C 的四元式序列A . 對(duì)每個(gè)四元式 i: A := B o p C ,依次執(zhí)行下述步驟:1 . 以四元式 i: A := B o p C 為參數(shù),調(diào)用過(guò)程 g et re g ( i : A := B o pC ) 。從 g et re g 返回時(shí),得到一寄存器 R ,用它作存放 A 現(xiàn)行值的寄存器;2 . 利用 A V A L U E [ B ] 和 A V A L U E [ C ] ,確定出 B 和 C 現(xiàn)行值存放位置 B` 和 C` ,如果其現(xiàn)行值在寄存器中,則把寄存器取作 B` 和 C` ;1 . 如 B` ≠ R ,則生成目標(biāo)代碼L D R , B `o p R , C ` 否則,生成目標(biāo)代碼 o p R , C` 如 B` 或 C` 為 R ,則刪除 A V A L U E [ B ] 或 A V A L U E [ C ] 中的 R2 . 令 A V A L U E [ B ] ={ R } ,并令 R V A L U E [ R ] ={ A } ,以表示變量 A 的現(xiàn)行值只在 R 中并且 R 中的值只代表 A 的現(xiàn)行值;3 . 如 B 或 C 的現(xiàn)行值在基本塊中不再被引用,它們也不是基本塊出口之后的活躍變量 (由四元式 i 上的附加信息知道),并且其現(xiàn)行值在某個(gè)寄存器 Rk 中,則刪除R V A L U E [ R k ] 中的 B 或 C 以及 A V A L U E [ B ] 或A V A L U E [ C ] 中的 Rk ,使該寄存器不再為 B 或 C 所占用。B .處理完基本塊中所有四元式之后,對(duì)現(xiàn)行值在某寄存器 R中的每個(gè)變量 M ,若它在出口之后使活躍的,則生成 STR , M ,放到主存中。 其中假定 d在基本塊的出口是活躍的。 uvdutvcaubatcacabad??????????????::::)()()(:代碼序列 語(yǔ)句 生成的代碼 寄存器描述器 地址描述器t : = a - b M OV a,R 0SUB b,R0空寄存器R0包含 t t 在 R 0 中u: = a - c M OV a,R 1SUB c,R 1R0包含 tR1包含 ut 在 R0中u 在 R1中v: = t + u ADD R 1 ,R 0 R0包含 vR1包含 uu 在 R1中v 在 R0中d: = v + u ADD R 1 ,R 0M OV R0,dR0包含 d d 在 R0中d 在 R0中和存儲(chǔ)器中從 dag生成目標(biāo)代碼 例:賦值語(yǔ)句 T 4 :=A+B(E(C+D)) 四元式序列 G T 1 : =A+B T 2 : =C+D T 3 : =ET 2 T 4 : =T 1 T 3 DAG : A B E C D n9 n3 n8 n1 n2 n7 n6 n4 n5 T4 T1 T3 T2 + + T4:=A+B(E(C+D)) T1:= A+B MOV A,R0 T2:=C+D ADD B,R0 T3:=ET2 MOV C,R1 T4:=T1T3 ADD D,R