文档详情

代码生成课件.ppt

发布:2025-03-14约6.91千字共58页下载文档
文本预览下载声明

8.4一個簡單的代碼生成器賦值語句d:=(a?b)+(a?c)+(a?c)編譯產生三地址語句序列: t1:=a?b t2:=a?c t3:=t1+t2 d:=t3+t28.4一個簡單的代碼生成器語句生成的代碼寄存器描述名字地址描述寄存器空t1:=a?bMOVa,R0SUBb,R0R0含t1t1在R0中t2:=a?cMOVa,R1SUBc,R1R0含t1R1含t2t1在R0中t2在R1中t3:=t1+t2ADDR1,R0R0含t3R1含t2t3在R0中t2在R1中d:=t3+t2ADDR1,R0R0含dd在R0中MOVR0,dd在R0和記憶體中8.4一個簡單的代碼生成器前三條指令可以修改,使執行代價降低MOVa,R0 MOVa,R0SUBb,R0 MOVR0,R1MOVa,R1 SUBb,R0SUBc,R1 SUBc,R1... ...8.4一個簡單的代碼生成器8.4.4為變址和指針語句產生代碼 變址與指針運算的三地址語句的處理和二元算符的處理相同8.4一個簡單的代碼生成器8.4.5條件語句實現條件轉移有兩種方式根據寄存器的值是否為下麵六個條件之一進行分支:負、零、正、非負、非零和非正用條件碼來表示計算的結果或裝入寄存器的值是負、零還是正8.1代碼生成器的設計中的問題語句序列 a:=b+c d:=a+e的代碼如下MOV b, R0ADD c, R0MOV R0, aMOV a, R0ADD e, R0 MOV R0, d 8.1代碼生成器的設計中的問題語句序列 a:=b+c d:=a+e的代碼如下MOV b, R0ADD c, R0MOV R0, aMOV a, R0 --多餘的指令ADD e, R0 MOV R0, d 8.1代碼生成器的設計中的問題語句序列 a:=b+c d:=a+e的代碼如下MOV b, R0ADD c, R0MOV R0, aMOV a, R0 --多餘的指令ADD e, R0 --若a不再使用,第三條也MOV R0, d --多餘8.1代碼生成器的設計中的問題8.1.3寄存器分配 運算對象處於寄存器中的指令通常比運算對象處於記憶體的指令要短一些,執行也快一些寄存器分配 選擇駐留在寄存器中的一組變數寄存器指派 挑選變數要駐留的具體寄存器8.1代碼生成器的設計中的問題8.1.4計算次序的選擇 某種計算次序可能會比其他次序需要較少的寄存器來保存中間結果8.2目標機器8.2.1目標機器的指令系統選擇可作為幾種微機代表的寄存器機器四位元組組成一個字,有n個通用寄存器R0,R1,…,Rn-1。二地址指令op 源,目的 MOV {源傳到目的} ADD {源加到目的} SUB {目的減去源}8.2目標機器地址模式和它們的組合語言形式及附加代價模式 形式 地址 附加代價絕對地址 M M 1寄存器 R R 0變址 c(R) c+contents(R) 1間接寄存器*R contents(R) 0間接變址 *c(R) contents(c+contents(R))1直接量 #c c 18.2目標機器指令實例 MOV R0, M MOV 4(R0), M contents(4+contents(R0)) MOV *4(R0), M contents(contents(4+contents(R0))) MOV #1, R08.2目標機器8.2.2指令的代價 指令代價取成1加上它的源和目的地址模式的附加代價 指令 代價 MOVR0,R1 1 MOVR5,M 2 ADD#1, R3 2 SUB4(R0),*12(

显示全部
相似文档