Presentation is loading. Please wait.

Presentation is loading. Please wait.

第 4 章、組譯器 作者:陳鍾誠 旗標出版社.

Similar presentations


Presentation on theme: "第 4 章、組譯器 作者:陳鍾誠 旗標出版社."— Presentation transcript:

1 第 4 章、組譯器 作者:陳鍾誠 旗標出版社

2 第 4 章、組譯器 4.1 組譯器簡介 4.2 組譯器的演算法 4.3 完整的組譯範例
組譯器簡介 組譯器的演算法 4.3 完整的組譯範例 實務案例:處理器 IA32 上的 GNU 組譯器

3 4.1 組譯器簡介 組譯器乃是將組合語言轉換為機器碼的工具。 組譯器是組合語言程式師所使用的主要工具。
組合語言  (組譯器)  目的檔 (或執行檔) 組譯器是組合語言程式師所使用的主要工具。

4 組譯器的過程示意圖 組合語言 MUL R5, R2, R2 ADD R1, R2, R5 ADD R2, R4, R2 目的檔
組譯器 Assembler 組合語言 目的檔 圖 4.1 組譯器的過程示意圖

5 簡單的組合語言程式

6 組譯:將組合語言轉譯成目的碼

7 組譯的原理 (絕對定址)

8 組譯的原理 (相對於 PC 定址)

9 二階段的組譯方式 (1). 運算元轉換: (2). 參數轉換: (3). 資料轉換: (4). 目的碼產生: 將指令名稱轉換為機器語言
(1). 運算元轉換: 將指令名稱轉換為機器語言 例如 LD 轉為00, ST 轉為01等 (2). 參數轉換: 將暫存器轉為代號,符號轉換成機器位址 例如 R1 轉為 1, A 轉為 000C,B 轉為 0010 等。 (3). 資料轉換: 將原始程式當中的資料常數轉換為內部的機器碼 例如 29 轉換為 001D。 (4). 目的碼產生: 根據指令格式, 轉換成目的碼, 輸出到目的檔中。 (2) (3)

10 映像檔 映像檔:最簡單的目的碼 組合語言  (組譯器)  映像檔

11 as0 組譯器

12 組譯器的演算法 第一階段 計算符號位址 第二階段 組譯指令與資料 資料結構:符號表

13 第一階段 (計算符號位址) 1. 決定每一個指令所佔記憶空間 的大小 2. 計算出程式當中每一行的位址。 3. 儲存每一個標籤與變數的位址
例如 決定 WORD、RESW 等指令所定 義的資料長度 決定 LD、ST 等指令所佔空間的大 小 2. 計算出程式當中每一行的位址。 3. 儲存每一個標籤與變數的位址 變數 A 為 0x000C 變數 B 為 0x0010

14 第二階段 (組譯指令與資料) (1). 轉換指令OP欄位為機器碼 例如 LD 轉換為 00 ST 轉換為 01
(2). 轉換指令參數為機器碼 R1轉換為 1 B 轉換為 000C (3). 轉換資料定義指令為位元值 WORD B 29 轉為 D (4). 產生目的碼並輸出到目的檔當 中 (2) (2) (3)

15 組譯器的資料結構 運算碼表 (Op Table) 符號表 (Symbol Table) 儲存指令與代碼的配對表 通常使用雜湊表格
儲存符號與位址的配對表

16 第一階段 (PASS1) 計算位址

17 第二階段 (PASS2) – 主程式 指令轉為機器碼

18 第二階段 (PASS2) – 指令轉換函數 根據指令類型 L 型 A 型 J 型 轉換成該型編碼

19 4.3 完整的組譯範例 範例:陣列加總功能 功能 如右圖 C 語言所示 原始程式 如範例 4.7 所示 組譯結果 如範例 4.8 所示

20 原始程式

21 組譯結果 組譯報表 範例 4.8 符號表 圖 4.6 目的檔 範例 4.9

22 4.4 實務案例: 處理器 IA32 上的 GNU 組譯器 as : GNU 的組譯器 -a 參數

23 GNU 的 組譯報表 符號表 指令長度不固定 範例 addl %eax, sum  010500000000 addl $1, %eax
 83C001 符號表

24 結語 對 IA32 的編碼方式有興趣的讀者,可以參考 Kip Irvine 的組合語言一書

25 習題 請說明組譯器的輸入、輸出與功能為何? 請說明組譯器第一階段 (PASS1) 的功能為何?
請說明組譯器當中的符號表之用途為何? 請說明組譯器當中的指令表之用途為何? 請仿照範例 4.4,使用本書第12章所實作的 as0 組譯器,組譯 Ex4_1.asm0 組合語 言檔,並仔細觀察其輸出結果。 請閱讀本書第12章所附的 Assembler.c 與 Assembler.h 等C語言程式,並且對照本 章的演算法,以學習 CPU0 組譯器的實作方式。 請按照4.4節的方法,操作 GNU 工具對組合語言進行組譯動作,並檢視組譯報表, 找出各個符號的位址。 請於 網站下載Kip Irvine 書籍組合語言程式範例,並以 Visual Studio 進行組譯與執行。


Download ppt "第 4 章、組譯器 作者:陳鍾誠 旗標出版社."

Similar presentations


Ads by Google