【正文】
in d co n s tc r egj r egi + (6) regi ? {A D D c(R j ), R i }(7) regi ? {A D D R j , R i }(8) regi ? {IN C R i }+regiindconstcregj++regicost1+regiregj(1) Reg0 ? const a{MOV a, R 0 }(7) reg0 ?{AD D S P, R 0 }+reg 0 reg SP: = ind + Memb const1 ind + consti regSP reg0 + i ndc ons t i re g SP++re g 0 indco n st i re g SP+: =i ndre g 0+m e m b c ons t 1+r e g 1 c o n s t 1: =i nd re g 1re g 0MOV a, R0 ADD SP, R0 ADD i(SP),R0 MOV b,R1 INC R1 MOV R1, *R0 表驅(qū)動(dòng)代碼生成 ? 運(yùn)用形式化機(jī)器描述,利用代碼生成器的構(gòu)造器自動(dòng)產(chǎn)生代碼生成器。 ? 不足之處 它所生成的目標(biāo)代碼的質(zhì)量依賴于機(jī)器描述的完善程度,而形式化、完善地描述一臺(tái)機(jī)器并不是一件容易的事。首先把對(duì)目標(biāo)機(jī)的形式化描述進(jìn)行預(yù)加工并轉(zhuǎn)換為代碼生成表,然后用代碼生成程序驅(qū)動(dòng)代碼生成表,把中間語言的內(nèi)部表示翻譯成目標(biāo)機(jī)的匯編代碼。因此,當(dāng)把一個(gè)編譯程序移植到一臺(tái)新機(jī)器上時(shí), Iadd和 Fadd必須重寫,而 Add卻可保持不變。首先,建立一個(gè)代碼生成專用語言,用這種語言以宏定義、子程序等形式描述代碼生成過程,通過宏定義和子程序把中間語言解釋為目標(biāo)代碼。 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 在 R0中d 在 R0中和存儲(chǔ)器中從 dag生成目標(biāo)代碼 B * A , T 5 * T 2 ,T 4 T 6 + T 0 T 1 ,T 3 3 .1 4 6 .2 8 R r ( j )n2n5n3