編譯原理第10章(劉磊-機(jī)械工業(yè)出版社)_第1頁(yè)
編譯原理第10章(劉磊-機(jī)械工業(yè)出版社)_第2頁(yè)
編譯原理第10章(劉磊-機(jī)械工業(yè)出版社)_第3頁(yè)
編譯原理第10章(劉磊-機(jī)械工業(yè)出版社)_第4頁(yè)
編譯原理第10章(劉磊-機(jī)械工業(yè)出版社)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十章目標(biāo)代碼生成目標(biāo)代碼(單寄存器)臨時(shí)變量的存儲(chǔ)空間分配寄存器的分配和釋放目標(biāo)代碼

虛擬目標(biāo)代碼:虛擬機(jī)上的目標(biāo)程序。在本地機(jī)器上具備虛擬機(jī)的解釋器。

實(shí)際目標(biāo)代碼:實(shí)際機(jī)器上的指令序列絕對(duì)地址機(jī)器代碼:可重定位的機(jī)器代碼:匯編代碼:三種硬件地址模式指令格式:Op#CR(立即-----寄存器)Opd(R1)R2(存儲(chǔ)器-----寄存器)OpR1R2(寄存器-----寄存器)幾個(gè)常見(jiàn)指令的含義:

LoadSourceR從Source讀出送入ROpSourceRSourceopR結(jié)果送入RStoreTargetRR的內(nèi)容送入Target.目標(biāo)代碼的生成(單寄存器)

形如(Op,A,B,T):LoadAR;OpBR

形如(ASSIG,A,B):LoadAR;StoreRB

例:Z:=X*(a+b)*Y*(a+b)

(+,a,b,t1)LoadaR;AddbR(*,X,t1,t2)StoreRt1;MultXR(*,t2,Y,t3)MultYR(*,t3,t1,t4)Multt1R例:Z:=X*(a+b)*Y*(a+b)

(+,a,b,t1)MOVAL,A;ADDAL,B;MOVAL,CL(*,X,t1,t2)MOVBL,X;MULBL(*,t2,Y,t3)MOVBX,Y;MULBX(*,t3,t1,t4)XORCH,CH;MULCX標(biāo)號(hào)和Jump的代碼

標(biāo)號(hào)到代碼地址的對(duì)應(yīng)表(flag,L,Addr)

形如(LabelL):

當(dāng)對(duì)應(yīng)表中沒(méi)有L項(xiàng)時(shí):填寫(xiě)表項(xiàng)(1,L,Pc),Pc表示下一條目標(biāo)代碼的地址。

當(dāng)有L項(xiàng)(0,L,P’)時(shí):從P’順著鏈回填地址Pc形如(JumpL):

對(duì)應(yīng)表中沒(méi)有L項(xiàng)時(shí)構(gòu)造鏈頭P:(Jump,nil): 填寫(xiě)表項(xiàng)(0,L,P);

當(dāng)有表項(xiàng)(0,L,P’)時(shí):拉鏈P:(JumpP’),修改表項(xiàng)為(0,L,P);

當(dāng)有表項(xiàng)(1,L,P)時(shí):取出L的地址P生成代碼。過(guò)程/函數(shù)調(diào)用的代碼

主要工作:

過(guò)函調(diào)用時(shí):申請(qǐng)新AR空間參數(shù)傳遞轉(zhuǎn)向過(guò)程體

過(guò)函入口:填寫(xiě)AR的相關(guān)內(nèi)容。

過(guò)函返回時(shí):釋放AR區(qū)恢復(fù)信息返回值

參數(shù)傳遞的代碼:

值參:

(VALACT,a,off,1):Loada(sp)RStoreoff(top)R(VALACT,A,off,1):Load@A(sp)RStoreoff(top)R變參:(VARACT,a,off,1):LoadAa(sp)RStoreoff(top)R

(VARACT,A,off,1):LoadA(sp)RStoreoff(top)R過(guò)函形參:(PROCACT,p,off,1):LoadEnter(p)RStoreoff(top)R(PROCACT,P,off,1):LoadP(sp)RStoreoff(top)R過(guò)函調(diào)用Call:傳參;(Call,g,True):JumpEnter(g)(Call,G,False):Jump@G(sp)入口(Entry,Label,size,Level):

填寫(xiě)AR信息;LoadtopspADDtopsize

出口(ENDPROC,---):

恢復(fù)調(diào)用前的信息和寄存器內(nèi)容;保存返回值;Loadsptop;LoadDyL(sp)sp;JumpRe_A(top)臨時(shí)變量

特點(diǎn):壽命短;一次定義一次使用

存儲(chǔ)空間:盡可能采用共享辦法

隨用隨分配的動(dòng)態(tài)分配:

調(diào)用一個(gè)過(guò)程時(shí),分配一個(gè)新的AR空間(不包括臨時(shí)變量部分),每當(dāng)要保存一個(gè)臨時(shí)變量時(shí),動(dòng)態(tài)分配到棧區(qū)的可用單元中

按共享法靜態(tài)分配:

先計(jì)算出臨時(shí)變量的空間,在過(guò)程調(diào)用時(shí)和源變量一起申請(qǐng)空間。即調(diào)用時(shí)將臨時(shí)變量安排在AR中。臨時(shí)變量的靜態(tài)分配

定值點(diǎn):如果i中間代碼給臨時(shí)變量T定值,則稱(chēng)i為臨時(shí)變量T的定值點(diǎn)。

引用點(diǎn):如果j中間代碼使用T,則稱(chēng)j為T(mén)的引用點(diǎn)。

活動(dòng)區(qū)間:如果i是T的定值點(diǎn),j是T的最后引用點(diǎn),則稱(chēng)[i,j]是T的活動(dòng)區(qū)間。

活動(dòng)區(qū)間[i,j]和[m,n]不嚴(yán)格相交:如果mj或in。

空間分配:如果兩個(gè)臨時(shí)變量的活動(dòng)區(qū)間不嚴(yán)格相交,則可以共享單元T1T2T3T4T5Offset=m

Offset=m+1

Offset=m+1

Offset=m+1

Offset=m例:寄存器

寄存器的分類(lèi):

可分配寄存器保留寄存器

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論