【正文】
SUB R1,R0 MOV T1,R1 SUB R0,R1 MOV R1, T4 T2:=C+D MOV C,R0 T3:=ET2 ADD D,R0 T1:= A+B MOV E,R1 T4:=T1T3 SUB R0,R1 MOV A,R0 ADD B, R0 SUB R1,R0 MOV R0,T4 . 簡單的代碼生成器 (基本塊內(nèi)) 在一個基本塊范圍內(nèi)考慮如何充分利用寄存器的問題: l 盡可能地讓該變量的值保留在寄存器中 l 盡可能引用變量在寄存器中的值 待用信息:若在一個基本塊中,變量 A 在四元式 i 中被定 值,在 i 后面的四元式 j 中要引用 A 值,且從 i 到 j 之間沒有其 它對 A 的定值點,這時我們稱 j是四元式 i 中對變量 A 的待用 信息或稱下次引用信息,同時也稱 A 是活躍的,若 A 被多次 引用則可構(gòu)成待用信息鏈與活躍信息鏈。 d ) 把符號表中變量 B 和 C 的待用信息欄置為 “ i ”,活躍信 息欄置為 “活躍 ” 。 其中假定 d在基本塊的出口是活躍的。l 交互環(huán)境:程序在執(zhí)行過程中直接和用戶在顯示控制臺上交互,不斷從鍵盤或鼠標接受輸入,將輸出發(fā)送到顯示器上。 (3) 將 n列入表中 。 例: 若用 A , B , C , D 表示變量,用 T , U , V 表示中間變量,有四元式如下:( 1 ) T : = A B( 2 ) U : = A C( 3 ) V : = T + U( 4 ) D : = V + U其名字表中的待用信息和活躍信息如下表,用 “ F ”表示 “非待用” “非活躍”,用 “ L ”表示活躍。 計算待用信息的算法: 對各基本塊的符號表中的 “待用信息 ” 欄和 “活躍信息 ” 欄置初值,即把 “待用信息 ” 欄置 “非待用 ” ,對 “活躍 信息 ” 欄按在基本塊出口處是否為活躍而置成 “活躍 ” 或 “非活躍 ” 。 可從基本塊的出口由后向前掃描,對每個變量建立相應的待用 信息鏈和活躍變量信息鏈。 注意,以上 a )和 b ), c )和 d )的次序不能顛倒。 uvdutvcaubatcacabad??????????????::::)()()(:代碼序列 語句 生成的代碼 寄存器描述器 地址描述器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