第2章 組譯器.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

計算機程式語言實習課.
Word高级应用——制作毕业论文 Word高级应用——制作毕业论文 6..
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
主題五 CPU Learning Lab.
組合語言與系統分析 SIC程式教學.
基本程式範例.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 廣告燈 2018年11月7日 8051 單晶片實習----E0903廣告燈.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 霹靂燈 2018年11月7日 8051 單晶片實習---E0902霹靂燈.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式語言簡介.
簡易C++除錯技巧 長庚大學機械系
JDK 安裝教學 (for Win7) Soochow University
第八章 利用SELECT查詢資料.
JAVA 程式設計與資料結構 第六章 輸出與輸入.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 閃爍燈 2018年11月23日 8051 單晶片實習---E0901閃爍燈.
和春技術學院資訊管理系 九十三學年度第一學期 系統程式
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
2-1 接腳說明 2018/11/30 第2章 系統分析.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
安裝JDK 安裝Eclipse Eclipse 中文化
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A.
App Inventor2呼叫PHP存取MySQL
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
雲端計算.
Ch07 低階程式語言 目標---研讀完本章後,你應該可以: 列出電腦可以執行的動作。 討論抽象階段與訂定具體演算步驟的關係。
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
第六章 安全衛生工作守則 6-1 前 言  6-2 訂定依據相關法令規定  6-3 工作守則製作程序及製作前應注意事項  6-4 如何訂定適合需要之安全衛生工作守則  6-5 結 論.
程式設計實習課(四) ----C 函數運用----
Topic Introduction—RMI
第一單元 建立java 程式.
雲端計算.
輸入&輸出 函數 P20~P21.
第十章 指標.
第1章 背景.
CH05. 選擇敘述.
期末考.
GUI Title and GUI Status
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
挑戰C++程式語言 ──第8章 進一步談字元與字串
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
函數應用(二)與自定函數.
陣列與結構.
第九章 布林代數與邏輯設計.
一、簡介 電腦硬體設計:純硬體電路(hardware)及韌體電 路(firmware)兩種方式。
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A.
資料表示方法 資料儲存單位.
期末報告第一題 通訊四甲 B 湯智瑋.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
作業系統實習課(二) -Scheduler-Related System Calls-
第 4 章、組譯器 作者:陳鍾誠 旗標出版社.
開發Java程式語言的工具 JDK.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
SQLite資料庫 靜宜大學資管系 楊子青.
Chapter 4 Multi-Threads (多執行緒).
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Unix指令4-文字編輯與程式撰寫.
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第2章 組譯器

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

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

SIC組合語言程式的範例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

試產生以下程式的目的碼(直接定址模式) 2 LAB1 LDA FIVE 3 STA ALPHA 4 LDCH CHART 5 STCH C1 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

LOC 2 LAB1 LDA FIVE (0500)16 3 STA ALPHA (0503)16 4 LDCH CHART 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 LOC (0500)16 (0503)16 (0506)16 (0509)16 (050C)16 (050F)16 (0512)16 (0515)16 (0516)16

Object code 2 LAB1 LDA FIVE (000512)16 3 STA ALPHA (OC050F)16 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)16 (500515)16 (540516)16 (4C0000)16 (000005)16 (54)16

試產生以下程式的目的碼(索引定址模式) 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

試產生以下程式的目的碼(索引定址模式) 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

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 Oobject code (04102A)16 (50901E)16 (549012)16 (2C102D)16 (381003)16 (4C0000)16 (…4845)16 (000000)16 (00000C)16

習 題 請試著組譯以下程式: 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。

第一階段-1

第一階段-2

第二階段-1

第二階段-2