編譯原理蔣宗禮第11章_第1頁
編譯原理蔣宗禮第11章_第2頁
編譯原理蔣宗禮第11章_第3頁
編譯原理蔣宗禮第11章_第4頁
編譯原理蔣宗禮第11章_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、12/5/2021整理課件1第第11章章代碼生成代碼生成 11.1 代碼生成器設計中的問題代碼生成器設計中的問題11.2 目標語言目標語言11.3 一個簡單的代碼生成器一個簡單的代碼生成器11.4 窺孔優化窺孔優化11.5 寄存器分配與指派寄存器分配與指派11.6 本章小結本章小結12/5/2021整理課件2第第11章章代碼生成代碼生成 代碼生成是編譯的最后一個階段,由代碼生成代碼生成是編譯的最后一個階段,由代碼生成器完成。其任務是把中間代碼轉換為等價的、器完成。其任務是把中間代碼轉換為等價的、具有較高質量的目標代碼,以充分利用目標機具有較高質量的目標代碼,以充分利用目標機器的資源。當然,代碼

2、生成器本身也必須具有器的資源。當然,代碼生成器本身也必須具有較高的運行效率。較高的運行效率。 目標代碼可以是絕對地址的機器代碼,或相對目標代碼可以是絕對地址的機器代碼,或相對地址的機器代碼,也可以是匯編代碼。地址的機器代碼,也可以是匯編代碼。 本章用微型機的匯編指令來表示目標代碼。本章用微型機的匯編指令來表示目標代碼。12/5/2021整理課件311.1代碼生成器設計中的問題代碼生成器設計中的問題 雖然代碼生成器的具體實現依賴于目標機器的雖然代碼生成器的具體實現依賴于目標機器的體系結構、指令系統和操作系統,但存儲管理、體系結構、指令系統和操作系統,但存儲管理、指令選擇、寄存器分配和計算順序等問

3、題卻是指令選擇、寄存器分配和計算順序等問題卻是設計各種代碼生成器都要考慮的問題,本節討設計各種代碼生成器都要考慮的問題,本節討論這類共性問題。論這類共性問題。 12/5/2021整理課件411.1.1代碼生成器的輸入代碼生成器的輸入 代碼生成器的輸入包括中間代碼和符號表信息,符號代碼生成器的輸入包括中間代碼和符號表信息,符號表信息主要用來確定中間代碼中的變量所代表的數據表信息主要用來確定中間代碼中的變量所代表的數據對象的運行時地址。對象的運行時地址。 假設在代碼生成前,編譯器的前端已經將源程序掃描、假設在代碼生成前,編譯器的前端已經將源程序掃描、分析和翻譯成為足夠詳細的中間代碼,其中變量的值分

4、析和翻譯成為足夠詳細的中間代碼,其中變量的值已經可以表示為目標機器能夠直接操作的量已經可以表示為目標機器能夠直接操作的量(位、整位、整數、實數、指針等數、實數、指針等); 已經完成了必要的類型檢查;已經完成了必要的類型檢查; 在需要的地方已經插入了類型轉換符;明顯的語義錯在需要的地方已經插入了類型轉換符;明顯的語義錯誤誤(如試圖把浮點數作為數組下標如試圖把浮點數作為數組下標)也都已經被檢測出也都已經被檢測出來了。來了。12/5/2021整理課件511.1.2目標代碼的形式目標代碼的形式 代碼生成器的輸出是目標代碼。目標代碼的形代碼生成器的輸出是目標代碼。目標代碼的形式主要有如下式主要有如下3種

5、:種: 絕對機器語言代碼絕對機器語言代碼。所有地址均已定位,可以立即。所有地址均已定位,可以立即被執行。適于小程序的編譯,因為它們可以迅速地被執行。適于小程序的編譯,因為它們可以迅速地被執行。被執行。 可重定位的機器語言代碼可重定位的機器語言代碼。允許分別將子程序編譯。允許分別將子程序編譯成一組可重定位模塊,再由連接裝配器將它們和某成一組可重定位模塊,再由連接裝配器將它們和某些運行程序連接起來,轉換成能執行的機器語言程些運行程序連接起來,轉換成能執行的機器語言程序。好處是比較靈活,并能利用已有的程序資源,序。好處是比較靈活,并能利用已有的程序資源,代價是增加了連接和裝配的開銷。代價是增加了連接

6、和裝配的開銷。 匯編語言代碼匯編語言代碼。生成匯編語言代碼后還需要經過匯。生成匯編語言代碼后還需要經過匯編程序匯編成可執行的機器語言代碼,但其好處是編程序匯編成可執行的機器語言代碼,但其好處是簡化了代碼生成過程并增加了可讀性。簡化了代碼生成過程并增加了可讀性。12/5/2021整理課件611.1.3指令選擇指令選擇 所謂所謂指令選擇指令選擇是指尋找一個合適的機器指令是指尋找一個合適的機器指令序列來實現給定的中間代碼。序列來實現給定的中間代碼。 目標機器指令系統的性質決定了指令選擇的目標機器指令系統的性質決定了指令選擇的難易程度難易程度 指令系統的一致性和完備性是兩個重要的因素指令系統的一致性和

7、完備性是兩個重要的因素 特殊機器指令的使用和指令速度是另一些重要的特殊機器指令的使用和指令速度是另一些重要的因素因素12/5/2021整理課件711.1.3指令選擇指令選擇 若不考慮目標程序的效率,指令的選擇將非常若不考慮目標程序的效率,指令的選擇將非常簡單:簡單: 如:三地址語句如:三地址語句x:=y+z翻譯成如下代碼序列:翻譯成如下代碼序列:(x,y和和z都是靜態分配)都是靜態分配) MOV y,R0/*把把y裝入寄存器裝入寄存器R0*/ ADDz,R0/*z加到加到R0上上*/ MOV R0,x/*把把R0存入存入x中中*/ 逐個語句地產生代碼,常常得到低質量的代碼逐個語句地產生代碼,常

8、常得到低質量的代碼12/5/2021整理課件811.1.3指令選擇指令選擇語句序列語句序列a:=b+cd:=a+e的代碼如下的代碼如下MOVb,R0ADDc,R0MOVR0, a-若若a不再使用,第三條也多余不再使用,第三條也多余MOVa,R0-多余的指令多余的指令ADDe,R0MOVR0, d12/5/2021整理課件911.1.3指令選擇指令選擇 如果目標機器有加如果目標機器有加l指令指令(INC),則,則a:a+1的的最有效實現是:最有效實現是:INCa而不是而不是MOVa,R0ADD#1,R0MOVR0,a12/5/2021整理課件1011.1.4寄存器分配寄存器分配 將運算對象放在寄

9、存器中的指令通常要比將運將運算對象放在寄存器中的指令通常要比將運算對象放在內存中的指令快且短,因此,要想算對象放在內存中的指令快且短,因此,要想生成高質量的目標代碼,必須充分使用目標機生成高質量的目標代碼,必須充分使用目標機器的寄存器,寄存器的使用包括:器的寄存器,寄存器的使用包括: 寄存器分配:為程序的某一點選擇駐留在寄存器的寄存器分配:為程序的某一點選擇駐留在寄存器的一組變量一組變量 寄存器指派:確定變量將要駐留的具體寄存器寄存器指派:確定變量將要駐留的具體寄存器12/5/2021整理課件1111.1.4寄存器分配寄存器分配 選擇最優的寄存器指派方案是一個選擇最優的寄存器指派方案是一個NP完全問題,完全問題,如果考慮到目標機器的硬件和如果考慮到目標機器的硬件和(或或)操作系統對寄操作系統對寄存器的使用約束,該問題還會進一步復雜。有存器的使用約束,該問題還會進一步復雜。有關寄存器分配和指派的策略將在關寄存器分配和指派的策略將在11.5節再進行節再進行詳細討論。詳細討論。12/5/2021整理課件1211.1.5計算順序選擇計算順序選擇 計算執行的順序同樣會影響目標代碼的效率。計算執行的順序同樣會影響目標代碼的效率。后面將會看到,某些計算順序比其它順序需要后面將會看到,某些計算順序比其它

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論