版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目標(biāo)代碼一般有以下三種形式:(1)能夠立即執(zhí)行的機(jī)器語(yǔ)言代碼,所有地址均已定位。(2)待裝配的機(jī)器語(yǔ)言模塊。當(dāng)需要執(zhí)行時(shí),由連接裝入程序把它們和某些運(yùn)行程序連接起來(lái),轉(zhuǎn)換成能執(zhí)行的機(jī)器語(yǔ)言代碼。(3)匯編語(yǔ)言代碼,尚需經(jīng)過(guò)匯編程序匯編,轉(zhuǎn)換成可執(zhí)行的機(jī)器語(yǔ)言代碼。11.1基本問(wèn)題11.1.1
目標(biāo)程序可執(zhí)行目標(biāo)模塊可重定位目標(biāo)模塊允許程序模塊分別編譯調(diào)用其它先前編譯好的程序模塊匯編語(yǔ)言程序免去編譯器重復(fù)匯編器的工作從教學(xué)角度,增加可讀性11.1
代碼生成器的設(shè)計(jì)中的問(wèn)題11.1.2
指令的選擇 目標(biāo)機(jī)器指令系統(tǒng)的性質(zhì)決定了指令選擇的難易程度,指令系統(tǒng)的統(tǒng)一性和完備性是重要的因素 指令的速度和機(jī)器特點(diǎn)是另一些重要的因素11.1
代碼生成器的設(shè)計(jì)中的問(wèn)題 若不考慮目標(biāo)程序的效率,指令的選擇是直截了當(dāng)?shù)摹H刂氛Z(yǔ)句x:=y+z(x,y和z都是靜態(tài)分配)
MOV y, R0 /*把y裝入寄存器R0*/ ADD z, R0 /*z加到R0上*/ MOV R0, x /*把R0存入x中*/逐個(gè)語(yǔ)句地產(chǎn)生代碼,常常得到低質(zhì)量的代碼
11.1
代碼生成器的設(shè)計(jì)中的問(wèn)題語(yǔ)句序列
a:=b+c d:=a+e的代碼如下MOV b, R0ADD c, R0MOV R0, aMOV a, R0ADD e, R0 MOV R0, d 11.1
代碼生成器的設(shè)計(jì)中的問(wèn)題語(yǔ)句序列
a:=b+c d:=a+e的代碼如下MOV b, R0ADD c, R0MOV R0, aMOV a, R0 --多余的指令A(yù)DD e, R0 MOV R0, d 11.1
代碼生成器的設(shè)計(jì)中的問(wèn)題語(yǔ)句序列
a:=b+c d:=a+e的代碼如下MOV b, R0ADD c, R0MOV R0, aMOV a, R0 --多余的指令A(yù)DD e, R0 --若a不再使用,第三條也MOV R0, d 多余11.1
代碼生成器的設(shè)計(jì)中的問(wèn)題11.1.3寄存器分配 運(yùn)算對(duì)象處于寄存器中的指令通常比運(yùn)算對(duì)象處于內(nèi)存的指令要短一些,執(zhí)行也快一些寄存器分配
選擇駐留在寄存器中的一組變量寄存器指派
挑選變量要駐留的具體寄存器11.1
代碼生成器的設(shè)計(jì)中的問(wèn)題11.1.4計(jì)算次序的選擇 某種計(jì)算次序可能會(huì)比其它次序需要較少的寄存器來(lái)保存中間結(jié)果11.2
目標(biāo)機(jī)器模型11.2.1目標(biāo)機(jī)器的指令系統(tǒng)采用模型機(jī)作為目標(biāo)機(jī)器二地址指令
op 目的,源 LD {源傳到目的} ADD {源加到目的} SUB {目的減去源}11.2
目標(biāo)機(jī)器模型指令實(shí)例
LD R0, M
ST R0,MSTR0,4(R1)
contents(4+contents(R1)) LDR0, *4(R0)
contents(contents(4+contents(R0)))
LD R0, #111.3
一個(gè)簡(jiǎn)單的代碼生成器依次考慮基本塊的每個(gè)語(yǔ)句,為其產(chǎn)生代碼假定三地址語(yǔ)句的每種算符都有對(duì)應(yīng)的目標(biāo)機(jī)器算符假定計(jì)算結(jié)果留在寄存器中盡可能長(zhǎng)的時(shí)間,
除非:該寄存器要用于其它計(jì)算,或者到基本塊結(jié)束11.3一個(gè)簡(jiǎn)單的代碼生成器以基本塊為單位來(lái)生成代碼A:=(B+C)*D+EAssign.exe生成中間代碼P313復(fù)習(xí)局部?jī)?yōu)化285頁(yè)關(guān)于優(yōu)化的說(shuō)明11.3一個(gè)簡(jiǎn)單的代碼生成器以基本塊為單位來(lái)生成代碼A:=(B+C)*D+ET1:=B+CT2:=T1*DA:=T2+E該目標(biāo)代碼的缺點(diǎn)?應(yīng)該如何改進(jìn)?(1)LDR0,B(2)ADDR0,C(3)STR0T1(4)LDR0,T1(5)MULR0,D(6)STR0,T2(7)LDR0,T2(8)ADDR0,E(9)STR0,A11.3一個(gè)簡(jiǎn)單的代碼生成器1待用信息、寄存器描述和地址描述目的:把基本塊內(nèi)還要被引用的變量盡量保存在寄存器內(nèi)做法:需要收集待用信息演示DaiYongXinXi.exe代碼生成時(shí)需要?jiǎng)討B(tài)的寄存器描述和地址描述11.3一個(gè)簡(jiǎn)單的代碼生成器在代碼生成過(guò)程中,需要跟蹤寄存器的內(nèi)容和名字的地址寄存器描述記住每個(gè)寄存器當(dāng)前存的是什么在任何一點(diǎn),每個(gè)寄存器保存若干個(gè)(包括零個(gè))名字的值名字的地址描述記住運(yùn)行時(shí)每個(gè)名字的當(dāng)前值可以在哪個(gè)場(chǎng)所找到這個(gè)場(chǎng)所可以是寄存器、棧單元、內(nèi)存地址、甚至是它們的某個(gè)集合這些信息可以存于符號(hào)表中這兩個(gè)描述在代碼生成過(guò)程中是變化的。11.3一個(gè)簡(jiǎn)單的代碼生成器2簡(jiǎn)單的代碼生成算法對(duì)每個(gè)三地址語(yǔ)句x:=yopz調(diào)用函數(shù)getreg決定放yopz計(jì)算結(jié)果的場(chǎng)所L查看y的地址描述,確定y值當(dāng)前的一個(gè)場(chǎng)所y
.如果y的值還不在L中,產(chǎn)生指令MOVy
,L產(chǎn)生指令opz
,L,其中z
是z的當(dāng)前場(chǎng)所之一如果y和/或z的當(dāng)前值不再引用,在塊的出口也不活躍,并且還在寄存器中,那么修改寄存器描述11.3一個(gè)簡(jiǎn)單的代碼生成器寄存器選擇函數(shù)函數(shù)getreg返回保存x:=yopz的x值的場(chǎng)所L如果名字y在R中,這個(gè)R不含其它名字的值,并且在執(zhí)行x:=yopz后y不再有下次引用,那么返回這個(gè)R作為L(zhǎng)。否則,返回一個(gè)空閑寄存器,如果有的話否則,如果x在塊中有下次引用,或者op是必須用寄存器的算符,那么找一個(gè)已被占用的寄存器R(可能產(chǎn)生MOVR,M指令,并修改M的描述)否則,如果x在基本塊中不再引用,或者找不到適當(dāng)?shù)谋徽加眉拇嫫?,選擇x的內(nèi)存單元作為L(zhǎng)。
11.3一個(gè)簡(jiǎn)單的代碼生成器語(yǔ)
句
生成的代碼
寄存器描述名字地址描述
寄存器空
t1:=a
b
MOVa,R0SUBb,R0
R0含t1
t1在R0中
t2:=a
cMOVa,R1SUBc,R1R0含t1R1含t2t1在R0中t2在R1中t3:=t1+t2
ADDR1,R0
R0含t3
R1含t2
t3在R0中t2在R1中
d:=t3+t2
ADDR1,R0
R0含dd在R0中
MOVR0,d
d在R0和內(nèi)存中
11.4寄存器分配為了生成更有效的目標(biāo)代碼,需要考慮的一個(gè)問(wèn)題就是如何更有效地利用寄存器。盡可能把各變量的現(xiàn)行值保存在寄存器中,把基本塊不再引用的變量所占用的寄存器及早釋放出來(lái)
11.4寄存器分配指令的執(zhí)行代價(jià)
每條指令的執(zhí)行代價(jià)=每條指令訪問(wèn)主存單元次數(shù)十l。例如:
opRj,Rj
執(zhí)行代價(jià)為1opRj,M
執(zhí)行代價(jià)為2opRj,*Rj
執(zhí)行代價(jià)為2opRj,*M執(zhí)行代價(jià)為3
11.5DAG的目標(biāo)代碼為了生成更有效的目標(biāo)代碼,要考慮的另一個(gè)問(wèn)題是,對(duì)基本塊中中間代碼序列,我們應(yīng)按怎樣的次序來(lái)生成其目標(biāo)代碼呢?演示DagCodeGen.exeDagCodeGenFigure11.9.exe練習(xí)11.2DagCodeGenExercise11.2.exeCodeGenExercise11.2Original.exeCodeGenExercise11.2DAGSorted.exe11.6窺孔優(yōu)化窺孔優(yōu)化(peepholeoptimization)
窺孔優(yōu)化方法是通過(guò)考察一小段目標(biāo)指令(稱(chēng)為窺孔)并把這些指令替換為更短和更快的一段指令,從而提高目標(biāo)代碼的質(zhì)量。11.6窺孔優(yōu)化幾種典型的窺孔優(yōu)化技術(shù)冗余存取
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版家庭裝修合同中的工程變更流程
- 2025年度洗滌房租賃及環(huán)保洗滌產(chǎn)品研發(fā)合同3篇
- 二零二五年度兒童撫養(yǎng)權(quán)變更及監(jiān)護(hù)責(zé)任轉(zhuǎn)移協(xié)議范本3篇
- 2024版建筑工程分包意向協(xié)議書(shū)3篇
- 二零二五年度口腔科線上線下融合服務(wù)合同2篇
- 2024年綠化苗木交易協(xié)議:特定品種專(zhuān)用一
- 2025年度辣椒出口業(yè)務(wù)代理合同范本3篇
- 2024年設(shè)備購(gòu)買(mǎi)合同標(biāo)的為50臺(tái)服務(wù)器設(shè)備
- 包覆貴金屬金屬材料相關(guān)行業(yè)投資方案
- 2024年私立學(xué)校新生試讀協(xié)議模板
- 2024腦血管病指南
- 2022年海南公務(wù)員考試申論試題(B卷)
- 企業(yè)三年?duì)I銷(xiāo)規(guī)劃
- 教師資格考試高中歷史面試試題及解答參考
- 2024年社區(qū)工作者考試試題庫(kù)
- 工廠設(shè)備工程師年終總結(jié)
- 福建省廈門(mén)市2024-2025學(xué)年新人教版九年級(jí)語(yǔ)文上學(xué)期期末質(zhì)量檢測(cè)試題
- 辦公室行政培訓(xùn)
- (完整版)python學(xué)習(xí)課件024600
- 湖南省岳陽(yáng)市2023-2024學(xué)年高一上學(xué)期1月期末質(zhì)量監(jiān)測(cè)試題+物理 含答案
- 圓柱的表面積課件
評(píng)論
0/150
提交評(píng)論