1 / 32

第 2 章 組譯器

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

sasha
Download Presentation

第 2 章 組譯器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 組譯器

  2. 2.1節:組譯程式的基本功能(SIC標準版組譯程式) 2.2節:與機器特性相關的組譯程式特性 2.3節:與機器無關的組合語言特性和實作 2.4節:組譯程式設計上可供選擇的方案 2.5節:組譯程式實例(MASM組譯程式,SPARC組譯程式) 內容

  3. 組譯器指引(assembler directives) • START 指定程式名稱和起始位址 • END 指示原始程式的結束處,並指定程式中第一個可執行的指令 • BYTE 定義字元或十六進位的常數 • WORD 定義一個字組的整數常數 • RESB 保留所示數量的位元組,供資料區使用 • RESW 保留所示數量的字組,供資料區使用 2.1 基本組譯器功能

  4. SIC組合語言程式的範例

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

  6. RDREC副程式每次被執行時,從輸入設備(F1)16讀入一筆記錄的資料存入 BUFFER陣列,此筆記錄的長度被記載在LENGTH變數。 (註:(1)一筆記錄的資料最長為4096個BYTES (2)當副程式從從輸入設備讀入0,則判定此筆記錄結束)。 WRREC副程式依據LENGTH變數所記載的長度,將存放在BUFFER陣列的資料記錄輸出到輸出設備(05)16。 SIC組合語言程式的範例

  7. 將助憶運算符號轉換成對應的機器語言,例如將第10行的STL轉換成14。將助憶運算符號轉換成對應的機器語言,例如將第10行的STL轉換成14。 把符號運算元轉換成對應的機器位址,例如將第10行的RETADR轉換成1033。(向前參考) 依適當的格式,建立機器指令。 將原始程式內的常數資料,轉換成機器內部的表示方式,例如將第80行的EOF轉換成454F46。 產生目的碼程式和組譯列表。 2.1.1 簡易的SIC組譯器

  8. 組譯圖2.1程式所產生之具目的碼的程式 Line Loc 標記 助記憶運算符號 符號運算元 機器碼

  9. 2.1.1 簡易的SIC組譯器 • 向前參考(forward reference) ---參考(指令的符號運算元使用)到定義在這個指令後方的標記,例如:第10行的FIRST STL RETADR。 • 多數的組譯程式必須以兩階段(two passes)來實施組譯的動作 • 第一階段定義符號及指派位址,第二階段實際完成組譯的動作

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

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

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

  13. 結束記錄: • 欄 1 E • 欄 2-7 目的程式中第一個可執行指令的位址 2.1.1 簡易的SIC組譯器

  14. 對應圖2.2的目的程式 2.1.1 簡易的SIC組譯器

  15. 第一階段(定義符號) 為程式中的所有指令設置其位址 記載程式中所有標記符號的值(位址),以供第二階段處理之用 處理組譯器指引(此項處理會影響位址的指派,如決定 BYTE、RESW 所定義之資料段的長度) 2.1.1 簡易的SIC組譯器-二階段之簡易組譯器

  16. 第二階段(組譯指令並產生目的程式) 組譯指令(將助記憶符號轉譯成機器碼,並尋找符號運算元所對應的位址) 產生 BYTE、WORD 所定義的資料值 處理在第一階段尚未完成之組譯器指引 輸出目的程式和組譯器列表 2.1.1 簡易的SIC組譯器-二階段之簡易組譯器

  17. 2.1.2 組譯器演算法與資料結構 • SIC組合語言指令格式: 標記 助記憶運算符號 符號運算元 • 10 FIRST STL RETADR • 70 LDL RETADR • 95 RETADR RESW 1 • SIC標準版機器碼格式:

  18. 資料結構: 運算碼表(Operation Code Table ,簡稱為OPTABE)、符號表(Symbol Table ,簡稱為SMTAB)、位址計數器(Location Counter ,簡稱為LOCCTR)。 演算法:第一階段(定義符號,請見圖2.4(a))、第二階段(組譯指令並產生目的程式,請見圖2.5(b))。 2.1.2 組譯器演算法與資料結構

  19. 2.1.2 組譯器演算法與資料結構 Operation Code Table (OPTABE):包含SIC組合語言中所有合法的的助記憶運算符號及其對應的機器碼。 在第一階段中,在OPTAB中搜尋被組譯指令的助記憶運算符號是否找得到,以驗証其正確性(若找不到則為助記憶運算符號打錯等語法錯誤invalid operation code)。 在第二階段中,則將助記憶運算符號所對應的機器碼取出。 (註:組譯器指引並未包含在OPTAB中) 。

  20. 2.1.2 組譯器演算法與資料結構 Location Counter (LOCCTR):用來輔助位址指派所會使用到的變數(只在第一階段使用)。 一開始它的值被初始化為START敍述後所指定的位址,以後每處理一個述敍 (一般組合語言指令或BYTE、WORD、RESB、RESW等組譯器指引),即將此述敍所對應的長度被加到此變數中。 (若START後未指定位址,則LOCCTR被初使化為0)。

  21. 2.1.2 組譯器演算法與資料結構 Symbol Table (SYMTAB):包含被組譯原始程式中所有使用到的標記名稱及其對應的位址。 在第一階段中,若被組譯指令若包含標記部份,則將此標記及目前LOCCTR的值(代表此標記被指派的位址)新增至SYMTAB中。(註:若此標記在先前已存在SYMTAB中,則發生符號重覆定義的語法錯誤duplicate symbol)。 在第二階段中,在SYMTAB中搜尋被組譯指令的符號運算元,並取出其對應的位址。 (註:RSUB指令無符號運算元部份)。

  22. 1 SAMPLE1 START 500 2 LAB1 LDA FIVE 3 STA ALPHA 4 LDCH CHART 5STCH C1 6 RSUB 7 ALPHA RESW 1 8 FIVE WORD 5 9 CHART BYTE C’T’ 10 C1 RESB 1 11 END LAB1 試產生以下程式的目的碼(直接定址模式)

  23. 1 SAMPLE1 START 500 2 LAB1 LDA FIVE 3 STA ALPHA 4 LDCH CHART 5STCH C1 6 RSUB 7 ALPHA RESW 1 8 FIVE WORD 5 9 CHART BYTE C’T’ 10 C1 RESB 1 11 END LAB1 LOC (0500)16 (0503)16 (0506)16 (0509)16 (050C)16 (050F)16 (0512)16 (0515)16 (0516)16

  24. 1 SAMPLE1 START 500 2 LAB1 LDAFIVE 3 STAALPHA 4 LDCHCHART 5STCHC1 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)16 (500515)16 (540516)16 (4C0000)16 (000005)16 (54)16

  25. 1 SAMPLE2 START 1000 2 LAB1 LDX ZERO 3 MOVECH LDCH STR2,X 4 STCH STR1,X 5 TIX TWELVE 6 JLT MOVECH 7 RSUB 8 STR1 RESB 12 9 STR2 BYTE C’HELLO WORLD!’ 10 ZERO WORD 0 11 TWELVE WORD 12 12 END LAB1 試產生以下程式的目的碼(索引定址模式)

  26. 1 SAMPLE2 START 1000 2 LAB1 LDX ZERO 3 MOVECH LDCH STR2,X 4 STCH STR1,X 5 TIX TWELVE 6 JLT MOVECH 7 RSUB 8 STR1 RESB 12 9 STR2 BYTE C’HELLO WORLD!’ 10 ZERO WORD 0 11 TWELVE WORD 12 12 END LAB1 試產生以下程式的目的碼(索引定址模式) LOC (1000)16 (1003)16 (1006)16 (1009)16 (100C)16 (100F)16 (1012)16 (101E)16 (102A)16 (102D)16

  27. 1 SAMPLE2 START 1000 2 LAB1 LDXZERO 3 MOVECH LDCHSTR2,X 4 STCHSTR1,X 5 TIXTWELVE 6 JLTMOVECH 7 RSUB 8 STR1 RESB 12 9 STR2 BYTE C’HELLO WORLD!’ 10 ZERO WORD 0 11 TWELVE WORD 12 12 END LAB1 Oobject code (04102A)16 (50901E)16 (549012)16 (2C102D)16 (381003)16 (4C0000)16 (…4845)16 (000000)16 (00000C)16

  28. 請試著組譯以下程式: Page 2-75,第2.1節學習評題第2題。 Figure 1.2(a)~Figure 1.7(a) 加上適當的START及END敘述。 Page 1-46,第1.3節學習評題第1~13題。請寫出SIC標準版的程式後進行組譯。 Page 2-4, 圖 2.1Page 2-6,圖2.2。 習 題

  29. 第一階段-1

  30. 第一階段-2

  31. 第二階段-1

  32. 第二階段-2

More Related