第 2 章 組譯器

32
2 2 組組組 組組組

description

第 2 章 組譯器. 2.1 節 : 組譯程式的基本功能 (SIC 標準版組譯程式 ) 2.2 節 : 與機器特性相關的組譯程式特性 2.3 節 : 與機器無關的組合語言特性和實作 2.4 節 : 組譯程式設計上可供選擇的方案 2.5 節 : 組譯程式實例 (MASM 組譯程式 ,SPARC 組譯程式 ). 內容. 組譯器指引( assembler directives ) START 指定程式名稱和起始位址 END 指示原始程式的結束處,並指定程式中第一個可執行的指令 BYTE 定義字元或十六進位的常數 WORD 定義一個字組的整數常數 - PowerPoint PPT Presentation

Transcript of 第 2 章 組譯器

Page 1: 第 2 章  組譯器

第第 22 章 章 組譯器組譯器

Page 2: 第 2 章  組譯器

2.1 節 : 組譯程式的基本功能 (SIC 標準版組譯程式 )

2.2 節 : 與機器特性相關的組譯程式特性 2.3 節 : 與機器無關的組合語言特性和實作 2.4 節 : 組譯程式設計上可供選擇的方案 2.5 節 : 組譯程式實例 (MASM 組譯程

式 ,SPARC 組譯程式 )

Page 3: 第 2 章  組譯器

組譯器指引( assembler directives ) START 指定程式名稱和起始位址 END 指示原始程式的結束處,並指定程式中

第一個可執行的指令 BYTE定義字元或十六進位的常數 WORD 定義一個字組的整數常數 RESB 保留所示數量的位元組,供資料區使用 RESW 保留所示數量的字組,供資料區使用

Page 4: 第 2 章  組譯器
Page 5: 第 2 章  組譯器

1. 此程式範例包含了一個主程式及兩個副程式(RDREC 副程式及 WRREC 副程式 ) 。主程式呼叫 RDREC 副程式讀取一筆資料記錄後,呼叫 WRREC 副程式將此資料記錄輸出。此過程一直持續,直到 RDREC 副程式讀取資料記錄為空,此時由 WRREC 副程式輸出 ‘ EOF’ 後返回作業系統 ( 註:假設此程式由被作業系統呼 ) 。

SIC 組合語言程式的範例

Page 6: 第 2 章  組譯器

2. RDREC 副程式每次被執行時,從輸入設備(F1)16 讀入一筆記錄的資料存入 BUFFER陣列,此筆記錄的長度被記載在 LENGTH變數。 ( 註: (1) 一筆記錄的資料最長為4096 個 BYTES (2) 當副程式從從輸入設備讀入 0 ,則判定此筆記錄結束 ) 。

3. WRREC 副程式依據 LENGTH 變數所記載的長度,將存放在 BUFFER 陣列的資料記錄輸出到輸出設備 (05)16 。

SIC 組合語言程式的範例

Page 7: 第 2 章  組譯器

1. 將助憶運算符號轉換成對應的機器語言,例如將第 10 行的 STL 轉換成 14 。

2. 把符號運算元轉換成對應的機器位址,例如將第 10 行的 RETADR 轉換成 1033 。 ( 向前參考 )

3. 依適當的格式,建立機器指令。4. 將原始程式內的常數資料,轉換成機器內部的

表示方式,例如將第 80 行的 EOF 轉換成454F46 。

5. 產生目的碼程式和組譯列表。

Page 8: 第 2 章  組譯器

Line Loc 機器碼標記 助記憶運算符號 符號運算元

Page 9: 第 2 章  組譯器

* 向前參考 (forward reference) --- 參考( 指令的符號運算元使用 ) 到定義在這個指令後方的標記,例如 : 第 10 行的 FIRST STL RETADR 。

多數的組譯程式必須以兩階段 (two passes) 來實施組譯的動作

第一階段定義符號及指派位址,第二階段實際完成組譯的動作

Page 10: 第 2 章  組譯器

一個簡易目的程式的格式中,包括三種記錄:表頭( Header )、本文( Text )、結束( End )。

Page 11: 第 2 章  組譯器

表頭記錄: 欄 1 H 欄 2 - 7 程式名稱 欄 8 - 13 目的程式的起始位址( 16 進位值) 欄 14 - 19 目的程式的長度,以位元組為單

Page 12: 第 2 章  組譯器

本文記錄: 欄 1 T 欄 2 - 7 此記錄之目的碼的起始位址 欄 8 - 9 此記錄之目的碼的長度 ( 位元組 ) 欄 10 - 69 目的碼,以 16 進位表示

Page 13: 第 2 章  組譯器

結束記錄: 欄 1 E 欄 2 - 7 目的程式中第一個可執行指令的位址

Page 14: 第 2 章  組譯器

對應圖 2.2 的目的程式

Page 15: 第 2 章  組譯器

第一階段(定義符號)1. 為程式中的所有指令設置其位址2. 記載程式中所有標記符號的值(位址),以供

第二階段處理之用3. 處理組譯器指引(此項處理會影響位址的指派,

如決定 BYTE 、 RESW 所定義之資料段的長度)

Page 16: 第 2 章  組譯器

第二階段(組譯指令並產生目的程式)1. 組譯指令(將助記憶符號轉譯成機器碼,並尋

找符號運算元所對應的位址)2. 產生 BYTE 、 WORD 所定義的資料值3. 處理在第一階段尚未完成之組譯器指引4. 輸出目的程式和組譯器列表

Page 17: 第 2 章  組譯器

SIC 組合語言指令格式 : 標記 助記憶運算符號 符號運算元 10 FIRST STL RETADR 70 LDL RETADR 95 RETADR RESW 1

SIC 標準版機器碼格式 : 8 1 15

opcode x address

Page 18: 第 2 章  組譯器

資料結構 : 運算碼表 (Operation Code Table , 簡稱為 OPTABE) 、符號表 (Symbol Table , 簡稱為 SMTAB) 、位址計數器(Location Counter , 簡稱為 LOCCTR) 。

演算法 : 第一階段 ( 定義符號,請見圖2.4(a)) 、第二階段 ( 組譯指令並產生目的程式,請見圖 2.5(b)) 。

Page 19: 第 2 章  組譯器

Operation Code Table (OPTABE) :包含 SIC 組合語言中所有合法的的助記憶運算符號及其對應的機器碼。

在第一階段中,在 OPTAB 中搜尋被組譯指令的助記憶運算符號是否找得到,以驗証其正確性 ( 若找不到則為助記憶運算符號打錯等語法錯誤 invalid operation code) 。

在第二階段中,則將助記憶運算符號所對應的機器碼取出。

( 註:組譯器指引並未包含在 OPTAB 中 ) 。

Page 20: 第 2 章  組譯器

Location Counter (LOCCTR) :用來輔助位址指派所會使用到的變數 ( 只在第一階段使用 ) 。

一開始它的值被初始化為 START 敍述後所指定的位址,以後每處理一個述敍 ( 一般組合語言指令或 BYTE 、 WORD 、 RESB 、 RESW 等組譯器指引 ) ,即將此述敍所對應的長度被加到此變數中。 ( 若 START 後未指定位址,則 LOCCTR被初使化為 0) 。

Page 21: 第 2 章  組譯器

Symbol Table (SYMTAB) :包含被組譯原始程式中所有使用到的標記名稱及其對應的位址。

在第一階段中,若被組譯指令若包含標記部份,則將此標記及目前 LOCCTR 的值 ( 代表此標記被指派的位址 ) 新增至 SYMTAB 中。 ( 註:若此標記在先前已存在 SYMTAB 中,則發生符號重覆定義的語法錯誤 duplicate symbol) 。

在第二階段中,在 SYMTAB 中搜尋被組譯指令的符號運算元,並取出其對應的位址。 ( 註: RSUB 指令無符號運算元部份 ) 。

Page 22: 第 2 章  組譯器

1 SAMPLE1 START 500 2 LAB1 LDA FIVE 3 STA ALPHA 4 LDCH CHART 5    STCH C1 6 RSUB 7 ALPHA RESW 1 8 FIVE WORD 5 9 CHART BYTE C’T’ 10 C1 RESB 1 11 END LAB1

OPTAB

助記憶運算符號 機器碼

LDA (00)16

LDCH (50)16

RSUB (4C)16

STA (0C)16

STCH (54)16

.

.

.

試產生以下程式的目的碼試產生以下程式的目的碼 (( 直接定址模直接定址模式式 ))

Page 23: 第 2 章  組譯器

1 SAMPLE1 START 500

2 LAB1 LDA FIVE

3 STA ALPHA

4 LDCH CHART 5    STCH C1 6 RSUB 7 ALPHA RESW 1 8 FIVE WORD 5 9 CHART BYTE C’T’ 10 C1 RESB 1 11 END LAB1

SYMTAB

符號運算元 位址

LAB1 (0500)16

ALPHA (050F)16

FIVE (0512)16

CHART (0515)16

C1 (0516)16

LOC(0500)16

(0503)16

(0506)16

(0509)16

(050C)16

(050F)16

(0512)16

(0515)

16

(0516)16

Page 24: 第 2 章  組譯器

1 SAMPLE1 START 500

2 LAB1 LDA FIVE 3 STA ALPHA 4 LDCH CHART

5    STCH C1 6 RSUB 7 ALPHA RESW 1 8 FIVE WORD 5 9 CHART BYTE C’T’

10 C1 RESB 1 11 END LAB1

Object code

(000512)16

(OC050F)1

6

(500515)16

(540516)16

(4C0000)16

(000005)16

(54)16

SYMTAB

符號運算元 位址

LAB1 (0500)16

ALPHA (050F)16

FIVE (0512)16

CHART (0515)16

C1 (0516)16

OPTAB

助記憶運算符號 機器碼

LDA (00)16

LDCH (50)16

RSUB (4C)16

STA (0C)16

STCH (54)16

Page 25: 第 2 章  組譯器

1 SAMPLE2 START 10002 LAB1 LDX ZERO3 MOVECH LDCH STR2,X4 STCH STR1,X5 TIX TWELVE6 JLT MOVECH7 RSUB8 STR1 RESB 129 STR2 BYTE C’HELLO WORLD!’

10 ZERO WORD 011 TWELVE WORD 1212 END LAB1

試產生以下程式的目的碼試產生以下程式的目的碼 ((索引定址模索引定址模式式 ))

OPTAB

助記憶運算符號 機器碼

JLT (38)16

LDCH (50)16

LDX (04)16

RSUB (4C)16

STCH (54)16

TIX (2C)16

.

.

.

Page 26: 第 2 章  組譯器

1 SAMPLE2 START 10002 LAB1 LDX ZERO3 MOVECH LDCH STR2,X4 STCH STR1,X5 TIX TWELVE6 JLT MOVECH7 RSUB8 STR1 RESB 129 STR2 BYTE C’HELLO WORLD!’

10 ZERO WORD 011 TWELVE WORD 1212 END LAB1

試產生以下程式的目的碼試產生以下程式的目的碼 ((索引定址模索引定址模式式 ))

SYMTAB

符號運算元 位址

LAB1 (1000)16

MOVECH (1003)16

STR1 (1012)16

STR2 (101E)16

ZERO (102A)16

TWELVE (102D)16

LOC(1000)16

(1003)16

(1006)16

(1009)16

(100C)16

(100F)16

(1012)16

(101E)16

(102A)16

(102D)16

Page 27: 第 2 章  組譯器

1 SAMPLE2 START 10002 LAB1 LDX ZERO3 MOVECH LDCH STR2,X4 STCH STR1,X5 TIX TWELVE6 JLT MOVECH7 RSUB8 STR1 RESB 129 STR2 BYTE C’HELLO WORLD!’

10 ZERO WORD 011 TWELVE WORD 1212 END LAB1

SYMTAB

LAB1 (1000)16

MOVECH (1003)16

STR1 (1012)16

STR2 (101E)16

ZERO (102A)16

TWELVE (102D)16

Oobject code(04102A)16

(50901E)16

(549012)16

(2C102D)16

(381003)16

(4C0000)16

(…4845)16

(000000)16

(00000C)16

OPTAB

JLT (38)16

LDCH (50)16

LDX (04)16

RSUB (4C)16

STCH (54)16

TIX (2C)16

Page 28: 第 2 章  組譯器

請試著組譯以下程式 :1. Page 2-75 ,第 2.1節學習評題第 2 題。2. Figure 1.2(a)~Figure 1.7(a) 加上適當的

START 及 END敘述。3. Page 1-46 ,第 1.3節學習評題第 1~13題。請寫出 SIC 標準版的程式後進行組譯。

4. Page 2-4, 圖 2.1Page 2-6, 圖 2.2 。

習 題習 題

Page 29: 第 2 章  組譯器
Page 30: 第 2 章  組譯器
Page 31: 第 2 章  組譯器
Page 32: 第 2 章  組譯器