下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章目標(biāo)代碼生成
7.1對(duì)下列四元式序列生成目標(biāo)代碼:
T=A-B
S=C+D
W=E-F
U=W/T
V=U*S
其中,V是基本塊出口的活躍變量,R0和R1是可用寄存器。
【解答】簡(jiǎn)單代碼生成算法依次對(duì)四元式進(jìn)行翻譯。我們以四元式T=a+b為例來(lái)說(shuō)明其
翻譯過(guò)程。
匯編語(yǔ)言的加法指令代碼形式為
ADDR,X
其中,ADD為加法指令;R為第一操作數(shù),第一操作數(shù)必須為寄存器類型;X為
第二操作數(shù),它可以是寄存器類型,也可以是內(nèi)存型的變量。ADDR,X指令的含意是:將
第一操作數(shù)R與第二操作數(shù)相加后,再將累加結(jié)果存放到第一操作數(shù)所在的寄存器中。要
完整地翻譯出四元式T=a+b,則可能需要下面三條匯編指令:
MOVR,a
ADDR,b
MOVT,R
第一條指令是將第一操作數(shù)a由內(nèi)存取到寄存器R中;第二條指令完成加法運(yùn)算;
第三條指令將累加后的結(jié)果送回內(nèi)存中的變量T。是否在翻譯成目標(biāo)代碼時(shí)都必須生成這三
條匯編指令呢?從目標(biāo)代碼生成的優(yōu)化角度考慮,
即為了使生成的目標(biāo)代碼更短以及充分利
用寄存器,上面的三條指令中,第一條和第三條指令在某些情況下是不必要的。這是因?yàn)椋?/p>
如果下一個(gè)四元式緊接著需要引用操作數(shù)T,則第三條指令就不急于生成,可以推遲到以后
適當(dāng)?shù)臅r(shí)機(jī)再生成。
此外,如果必須使用第一條指令,即第一操作數(shù)不在寄存器而是在內(nèi)存中,且此時(shí)所有可用
寄存器都已分配完畢,這時(shí)就要根據(jù)寄存器中所有變量的待用信息(也即引用點(diǎn))來(lái)決定淘汰
哪一個(gè)寄存器留給當(dāng)前的四元式使用。寄存器的淘汰策略如下:
(1)如果某寄存器中的變量已無(wú)后續(xù)引用點(diǎn)且該變量是非活躍的,則可直接將該寄
存器作為空閑寄存器使用。
(2)如果所有寄存器中的變量在基本塊內(nèi)仍有引用點(diǎn)且都是活躍的,則將引用點(diǎn)最
遠(yuǎn)的變量所占用寄存器中的值存放到內(nèi)存與該變量對(duì)應(yīng)的單元中,后再將此寄存器分配給
然
當(dāng)前的指令使用。
因此,本題所給四元式序列生成的目標(biāo)代碼如下:
MOVR0,A
SUBR0,C
/*R0=T*/
MOVR1,C
ADDR1,D
/*R1=S*/
MOVS,R1
/*S引用點(diǎn)較T引用點(diǎn)遠(yuǎn),故將R1的值送內(nèi)存單元S*/
MOVR1,E
SUBR1,F
/*R1=W*/
SUBR1,R0
/*R1=U*/
MULR1,S
/*R1=V*/
7.2假設(shè)可用的寄存器為R0和R1,且所有臨時(shí)單元都是非活躍的,試將以下四元式基本
塊:
T1=B-C
T2=A*T1
T3=D+1
T4=E-F
T5=T3*T4
W=T2/T5
用簡(jiǎn)單代碼生成算法生成其目標(biāo)代碼。
【解答】該基本塊的目標(biāo)代碼如下(指令后面為相應(yīng)的注釋):
MOV
R0,B/*取第一個(gè)空閑寄存器R0*/
SUB
R0,C
/*運(yùn)算結(jié)束后R0中為T1結(jié)果,內(nèi)存中無(wú)該結(jié)果*/
MOV
R1,A/*取一個(gè)空閑寄存器R1*/
MUL
R1,R0/*運(yùn)算結(jié)束后R1中為T2結(jié)果,內(nèi)存中無(wú)該結(jié)果*/
MOV
R0,D/*此時(shí)R0中結(jié)果T1已經(jīng)沒(méi)有引用點(diǎn),且臨時(shí)單元T1是非
活躍的,所以,寄存器R0可作為空閑寄存器使用*/
ADD
R0,″1″
/*運(yùn)算結(jié)束后R0中為T3結(jié)果,內(nèi)存中無(wú)該結(jié)果*/
MOVT2,R1/*翻譯四元式T4=E-F時(shí),所有寄存器已經(jīng)分配完畢,寄存器R0中存的T3
和寄存器R1中存的T2都是有用的。由于T2的下一個(gè)引用點(diǎn)較T3的下一個(gè)引用點(diǎn)更遠(yuǎn),
所以暫時(shí)可將寄存器R1中的結(jié)果存回到內(nèi)存的變量T2中,
從而將寄存器R1空閑以備使用
*/
MOV
R1,E
SUBR1,F
/*運(yùn)算結(jié)束后R1中為T4結(jié)果,內(nèi)存中無(wú)該結(jié)果*/
MULR0,R1
/*運(yùn)算結(jié)束后R0中為T5結(jié)果,內(nèi)存中無(wú)該結(jié)果。注意,該指
令將寄存器R0中原來(lái)的結(jié)果T3沖掉了??梢赃@么做的原因是,T3在該指令后不再有引用
點(diǎn),且是非活躍變量*/
MOVR1,T2/*此時(shí)R1中結(jié)果T4已經(jīng)沒(méi)有引用點(diǎn),且臨時(shí)單元T4是非活躍的,因此
寄存器R1可作為空閑寄存器使用*/
DIVR1,R0
/*運(yùn)算結(jié)束后R1中為W結(jié)果,內(nèi)存中無(wú)該結(jié)果。此時(shí)所有指令部分已經(jīng)
翻譯完畢*/
MOVW,R1
/*指令翻譯完畢時(shí),寄存器中存有最新的計(jì)算結(jié)果,必須將它們存回到內(nèi)
存相應(yīng)的單元中去,
否則,在翻譯下一個(gè)基本塊時(shí),
所有的寄存器被當(dāng)成空閑的寄存器使用,
從而造成計(jì)算結(jié)果的丟失??紤]到寄存器R0中的T5和寄存器R1中的W,臨時(shí)單元T5是
非活躍的,因此只要將結(jié)果W存回對(duì)應(yīng)單元即可*/
7.3對(duì)基本塊P:
S0=2
S1=3/S0
S2=T-C
S3=T+C
R=S0/S3
H=R
S4=3/S1
S5=T+C
S6=S4/S5
H=S6*S2
(1)試應(yīng)用DAG進(jìn)行優(yōu)化;
(2)假定只有R、H在基本塊出口是活躍的,寫出優(yōu)化后的四元式序列;
(3)假定只有兩個(gè)寄存器AX、BX,試寫出上述優(yōu)化后的四元式序列的目標(biāo)代碼。
【解答】(1)根據(jù)DAG的構(gòu)造算法構(gòu)造基本塊P的DAG步驟如圖7-1所示的(a)
到(h)。
n4S2
n5S3
Sn24S2
-
n0S0
n0S0
n1S1
n0S0
n1S1
n2
n3
n0S0
n1S1
+
-
n2
n3
2
(a)
2
(b)
n6
1.5
2
1.5
(c)
T
C
2
1.5
(d)
T
C
R
n5S3
Sn24S2
n6
R,H
n5S3
Sn24S2
/
+
-
/
+
-
n0S0
n1S1
n2
n3
n0S0
n1S1
n2
n3
2
1.5
(e)
T
C
2
1.5
(f)
T
C
n7H
n6
R,H,S6
n5S3
Sn24S2
n6
R,H,S6
n5S3,S5Sn24S2
/
+
n0S0,S4n1S1
n2
/
-
n3
+
-
n0S0,S4n1S1
n2
n3
2
1.5
(g)
T
C
2
1.5
(h)
T
C
圖7-1基本塊P的DAG
按圖7-1(h)和原來(lái)構(gòu)造結(jié)點(diǎn)的順序,優(yōu)化后的四元式序列為
S0=2
S4=2
S1=1.5
S2=T-C
S3=T+C
S5=S3
R=2/S3
S6=R
H=S6*S2
(2)假定只有R、H在基本塊出口是活躍的,則上述優(yōu)化后的四元式序列可進(jìn)一步優(yōu)化為
S0=T-C
S3=T+C
R=2/S3
H=R*S2
(3)假定只有兩個(gè)寄存器AX、BX,上述優(yōu)化后的四元式序列的目標(biāo)代碼為
MOVAX,T
SUBAX,C
MOVAX,S2
MOVAX,T
ADDAX,C
MOVBX,2
DIVBX
MOVAX,S2
MULBX
MOVBX,H
7.4參考附錄1和附錄2(《編譯原理教程》一書),將下列匯編程序片段翻譯為對(duì)應(yīng)的
8086/8088機(jī)器語(yǔ)言代碼(匯編地
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年全球及中國(guó)馬來(lái)酸酐接枝SEBS行業(yè)產(chǎn)銷動(dòng)態(tài)及未來(lái)運(yùn)營(yíng)趨勢(shì)報(bào)告
- 2024-2030年全球及中國(guó)虛擬賬戶管理(VAM)行業(yè)發(fā)展態(tài)勢(shì)及投資方向預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)線性酚醛樹脂行業(yè)供需現(xiàn)狀及盈利前景預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)月桂醇聚醚硫酸鎂行業(yè)發(fā)展動(dòng)態(tài)及產(chǎn)銷需求預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)變性乙醇行業(yè)發(fā)展?fàn)顩r及需求規(guī)模預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)農(nóng)業(yè)礦物油行業(yè)發(fā)展動(dòng)態(tài)及前景趨勢(shì)預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)AV瘺針組行業(yè)需求趨勢(shì)及投資前景預(yù)測(cè)報(bào)告
- 2024-2030年全球與中國(guó)洗衣護(hù)理產(chǎn)品市場(chǎng)發(fā)展現(xiàn)狀及銷售策略分析報(bào)告
- 2024-2030年烏藥環(huán)戊烯二酮甲醚搬遷改造項(xiàng)目可行性研究報(bào)告
- 2024-2030年中國(guó)黃酸乙酯鈉行業(yè)發(fā)展前景預(yù)測(cè)及投資可行性分析報(bào)告
- 物業(yè)服務(wù)費(fèi)收支預(yù)案
- T-CECS120-2021套接緊定式鋼導(dǎo)管施工及驗(yàn)收規(guī)程
- 【名校尖子生】初中化學(xué)創(chuàng)新能力培優(yōu)競(jìng)賽題(四)1-5單元(原卷版+解析)
- 2024年浙江省單獨(dú)考試招生文化課考試數(shù)學(xué)試卷真題(含答案詳解)
- 2024年中國(guó)花崗巖花料石市場(chǎng)調(diào)查研究報(bào)告
- 湖南省長(zhǎng)沙市2023-2024學(xué)年四年級(jí)上冊(cè)期末數(shù)學(xué)試題
- 《嬰幼兒常見病識(shí)別與預(yù)防》課件-嬰幼兒濕疹
- 2024年高等學(xué)校英語(yǔ)應(yīng)用能力考試B級(jí)真題
- 支撐梁拆除安全協(xié)議書
- 五年級(jí)道德與法治上冊(cè)說(shuō)課稿《古代科技 耀我中華(第一課時(shí)) 》部編版
- 小學(xué)語(yǔ)文大單元設(shè)計(jì)論文
評(píng)論
0/150
提交評(píng)論