Microsoft PowerPoint - Ch2-1.ppt

Similar documents
Microsoft PowerPoint - chap2 [相容模式]

Microsoft PowerPoint - chap2.ppt

Microsoft PowerPoint - chap3.ppt

Microsoft PowerPoint - Ch3-1.ppt

Microsoft PowerPoint - 系統程式2010

PowerPoint 簡報

Microsoft PowerPoint - chap1 [相容模式]

微處理機

教科書:系統程式 - 第 2 章、電腦的硬體結構

Microsoft PowerPoint - chapter2.ppt

PowerPoint 簡報


Microsoft Word 定址法實驗.doc

Microsoft PowerPoint - chap4.ppt

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

<4D F736F F D20D1A7C9FACAD6B2E1B8C4D7EED6D5A3A8B4F8B1EDB8F1BCD3D2B3C2EBB0E6A3A9372E3239>

桂林市劳动和社会保障局关于

第三章 維修及管理

Microsoft Word 年度选拔硕博连读研究生的通知.doc

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與






Microsoft Word 箕æ−¥ï¼‹å®ı稿;

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

第一組個人電腦主機

投影片 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

<4D F736F F D20B3E6B4B9A4F930365F32A443AC71C5E3A5DCBEB9B1B1A8EE2E646F63>

Microsoft PowerPoint - 3C¬ì§Þ»P¥Í¬¡-chapter2

CC213

Microsoft Word - Introduction to Big Real Mode _CHT_.doc

Microsoft PowerPoint - chap12.ppt

第5章:汇编语言程序设计

( Version 0.4 ) 1

Microsoft PowerPoint - MicroProcessor05_MSC51 HW

Microsoft PowerPoint - chap7.ppt

PowerPoint 簡報

Microsoft Word - compilation.docx

幻灯片 1

Microsoft PowerPoint - 04-array_pointer.ppt

Microsoft Word - ISSFA-0237_A_SM39R_series_EEPROM_APN_TC_.doc

Microsoft PowerPoint - chap5.ppt

Improved Preimage Attacks on AES-like Hash Functions: Applications to Whirlpool and Grøstl

Bus Hound 5

1

Gerolor Motors Series Dimensions A,B C T L L G1/2 M8 G1/ A 4 C H4 E

目 錄 1 COMPILER3 2 COMPILER 文件檔案限制 4 3 虛擬指令 (PSEUDO) 5 4 OBJECT CODE 11 5 組譯與組譯 && 除錯的差異 12 6 錯誤訊息 12 APD-HYIDE003-V01_COMPILER page 2

Microsoft Word - CY-S100 系列 說明書_0926

09 虛擬記憶體 (virtual memory) CHAPTER 9.1 (Virtual memory) (segmentation) (paging) (static paging algorithm) (

南華大學數位論文

資料轉移、定址、算術 Data Transfer, Addressing, and Arithmetic

「人名權威檔」資料庫欄位建置表

桌上型個人電腦採購規格說明表


教科書:系統程式 - 第 8 章、編譯器

untitled

ch07 [

1 CPU

ROP_bamboofox.key

( ) (1) (2) (3) (4) 2

Microsoft Word - InoTouch Editor编程软件手册 doc

第壹拾篇

<4D F736F F D20A7EBBCD0B6B7AABEAAFEA5F3322D3935A67EB2C432A6B8B2C433B2D5C5E3A5DCA564B357BD64AED12E646F63>

《人员招聘与任用》

桌上型個人電腦採購規格說明表

Excel VBA Excel Visual Basic for Application

R 與資料處理 R 與資料處理 Wush Wu 國立台灣大學 1 of 58

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

Gerotor Motors Series Dimensions A,B C T L L G1/2 M G1/ A 4 C H4 E

untitled

QR Code 技術之探討

11.doc

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

csg(1_29)cs.p65

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

Three Point Inside Micrometers

laminated.xls

Tel:

标题

FM1935X智能非接触读写器芯片

資料結構之C語言重點複習

Transcription:

第 2 章組譯器 (Assembler) 基本組譯器功能 與機器相關之組譯程式功能 與機器無關之組譯程式功能 組譯器設計選項

2.1 基本組譯器功能 從輸入裝置 (F1) 讀入紀錄, 並將它們放到輸出裝置 (05),X : 表示索引定址. : 表示註解 組譯程式指引命令 START 指定程式名稱和起始位址 END 指示原始程式的結束處, 並指定程式中第一個可執行的指令 BYTE 定義字元或十六進位的常數, 並且指出其可佔用之位元組的數量 WORD 定義一個字組的整數常數 RESB 保留所示數量的位元組, 供資料區使用 RESW 保留所示數量的字組, 供資料區使用

SIC 組合語言範例 主程式 RDREC 副程式 - 讀取記取記錄 WRREC 副程式 - 寫出記錄

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 將組合語言轉換成目的碼的基本步驟 : 1. 將助憶碼轉換成對應的機器語言, 例如將第 10 行的 STL 轉換成 14 2. 把符號運算元轉換成對應的機器位址, 例如將第 10 行的 RETADR 轉換成 1033 3. 依適當的格式, 建立機器指令 4. 將原始程式內的常數資料, 轉換成機器內部的表示方式, 例如將第 80 行的 EOF 轉換成 454F46 5. 產生目的碼程式和組譯列表

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 前向參考 (forward reference) 問題 位址轉換?? 程式涉及一個尚未定義的標記符號 (RETADR) 以兩回合的方式解決第一回 : 計算指令位址及定義標籤第二回 : 組譯指令產生目的碼

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 處理組譯器指令 組譯程式處理虛擬指令 START END BYTE WORD RESB RESW

目的程式列表

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 一個簡單的目的程式包括三種記錄 : 表頭紀錄 本文紀錄 結尾紀錄 紀錄之格式 : 表頭記錄 : 欄 1 H 欄 2-7 程式名稱 欄 8-13 (3bytes) 目的程式的起始位址 (16 進位值 ) 欄 14-19 (3bytes) 的程式的長度, 以位元組為單位

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 本文記錄 : 欄 1 T 欄 2-7 此記錄之目的碼的起始位址 欄 8-9 此記錄之目的碼的長度 ( 位元組 ) 欄 10-69 目的碼, 以 16 進位表示 結束記錄 : 欄 1 E 欄 2-7 目的程式中第一個可執行指令的位址

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 對應圖 2.2 的目的程式 長度 最多 10 筆

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 組譯器兩回合掃描過程 第一回合 ( 定義符號 ) 1. 對於程式中的每一行指令指定位址 2. 記載程式中所有標記符號的值 ( 位址 ), 以供第二回合處理之用 3. 處理組譯器指引 ( 此項處理會影響位址配置, 如決定 BYTE RESW 所定義之資料段的長度 )

2.1 基本組譯器功能 2.1.1 簡單的 SIC 組譯器 第二回合 ( 組譯指令並產生目的程式 ) 1. 將指令轉譯成機器碼, 並記錄下位址值 2. 將 BYTE WORD 所定義的值轉成 16 進位, 存入目的程式中 3. 處理在第一回合中尚未處理的組譯程式前導指令 4. 記錄組譯完成的目的程式與程式列表

2.1 基本組譯器功能 2.1.2 組譯器演算法與資料結構 資料結構 : 運算碼表 (Operation Code Table; OPTAB) 儲存助憶指令與機器碼之關連 符號表 (Symbol Table; SYMTAB) 紀錄程式中所使用到符號所代表的值 程式計數器 (Location Counter ; LOCCTR) 初始值為 START 後所指派的值 每處理一道指令後就將指令長度加入 提供指令及標籤的起始位址

OPTAB 存放運算碼, 機器碼 ( 包含指令格式及長度資訊 ) 為靜態表格 通常使用 Hash Table, 使用助憶碼作為 key 第一回合用來檢驗運算碼及計算指令長度 第二回合用來轉換運算碼至機器碼

SYMTAB 存放每個標籤的名稱, 位址, 與旗標 ( 是否重覆定義 ) 資料標籤資訊, 如型別與長度 針對 BYTE, WORD, RESB, RESW 等 非靜態表格 可用 Hash Table 加速搜尋過程, 慎選 Hash Function 第一回合 : 建立標籤及輸入位址資訊 第二回合 : 搜尋 SYMTAB 表, 取得標籤位址

組譯程式第一回合處理演算法

組譯程式第二回合處理演算法

組譯程式設計 與機器相關的組譯器功能 指令格式與定址模式 程式重新定位 與機器無關的組譯器功能 定字 (literals) 符號定義指令 表示式 程式區塊 控制區段及程式連結

2.2 與機器相關的組譯器特性 SIC/XE 版本新增功能 : @: 間接定址, 用法 OPCODE @SYMBLE #: 立即資料, 用法 OPCODE #SYMBLE 相對定址 : 引用到記憶體 : 使用 程式計數器相對模式 或 基底相對模式 BASE: 基底相對, 用法 BASE SYMBLE 立即運算元 則前置一個 # 符號來表示 +: 使用擴充格式 (format 4), 用法 +OPCODE SYMBLE 如果位移需要 程式計數器相對模式 及 基底相對位址模式 時, 則因所需空間太大而無法適合於 3 位元組指令, 必須使用 4 位 元組的擴展格式 程式設計師必須自行指定此類的定址模式

2.2 與機器相關的組譯器特性 2.2.1 指令格式與定址模式 間接定址 立即定址 索引定址都必須指定 PC-relative 定址與 Base-relative 定址沒有指定如何決定 組譯器自行決定 決定定址模式時, 先試著用 PC-relative 定址 PC-relative 定址不行, 試 Base-relative 定址 PC-relative 與 Base-relative 定址都不行, 有指定 +: 用 format 4 PC-relative 與 Base-relative 定址都不行, 沒有指定 +: 錯誤

主程式 RDREC 副程式 - 讀取記取記錄 WRREC 副程式 - 寫出記錄

範例 15 0006 CLOOP +JSUB RDREC 4B101036 運算元的位址是 1036, 當 e 位元設為 1 時, 表示使用擴展指令格式, 則可以存放完整的位址 (full address) op(6) n i x b p e disp(20) 010010 1 1 0 0 0 1 0000 0001 0000 0011 0110 4 B 1 0 1 0 3 6

範例 程式計數器相對定址 10 0000 FIRST STL RETADR 17202D disp= RETADR -PC = 30-3 = 2D

範例 程式計數器相對定址 40 0017 J CLOOP 3F2FEC disp= CLOOP -PC = 6-1A = -14 = FEC -14=1111 1110 1011+1=FEC

範例 基底相對定址 12 0003 LDB #LENGTH 69202D 13 BASE LENGTH BASE 為組譯指令, 告訴組譯器 BASE 暫存器內容可用 NOBASE 組譯指令, 告訴組譯器 BASE 暫存器內容不可用 160 104E STCH BUFFER,X 57C003 disp= BUFFER-PC=0036-1051= -101B -101B 超過程式計數器相對定址範圍, 所以使用 BASE-related 定址 disp= BUFFER-B=0036-0033=3 175 1056 EXIT STX LENGTH 134000 disp= LENGTH-PC=0033-1059= -1026 超過程式計數器相對定址範圍, 所以使用基底相對定址 disp= LENGTH-B=0033-0033=0

立即定址模式 範例 55 0020 LDA #3 010003 133 103C +LDT #4096 75101000 4096=(01000) 16

範例 立即定址模式 12 0003 LDB #LENGTH 69202D 在此例中, 立即運算元是 LENGTH 符號, 由於此符號的值是一個位址, 所以此指令的作用是將 LENGTH 的位址值載入到 B 暫存器 LENGTH=0033=PC+displ=0006+02D

間接定址模式 範例 70 002A J @RETADR 3E2003

5 0000 COPY START 0 程式開始 10 0000 FIRST STL RETADR 17202D displacement= RETADR -PC = 30-3 = 2D 12 0003 LDB #LENGTH 69202D 立即運算元 (immediate operand) 為 LENGTH LENGTH 的位址被載入到暫存器 B LENGTH=0033=PC+displacement=0006+02D if immediate mode is specified, the target address becomes the operand (B)=0033

13 BASE LENGTH 虛擬指令 15 0006 CLOOP +JSUB RDREC 4B101036 Op code + n i x b p e + 20bit displacement 48 (1 1) (0 0 0 1) + 01036( 絕對位址 ) 20 000A LDA LENGTH 032026 0033=000D+disp Op code + n i x b p e + 12bit displacement 00 (1 1) (0 0 1 0) + 026 25 000D COMP #0 290000 op code + n i x b p e + 12bit displacement 28 (0 1) (0 0 0 0) + 000 30 0010 JEQ ENDFIL 332007 001A=0013+disp Op code + n i x b p e + 12bit displacement 30 (1 1) (0 0 1 0) + 007

35 0013 +JSUB WRREC 4B10105D Op code + n i x b p e + 20bit displacement 48 (1 1) (0 0 0 1) + 0105D( 絕對位址 ) 40 0017 J CLOOP 3F2FEC displacement= CLOOP -PC = 6-1A = -14 = FEC 0006=001A+disp Op code + n i x b p e + 12bit displacement 3C (1 1) (0 0 1 0) + FEC 45 001A ENDFIL LDA EOF 032010 002D=001D+disp Op code + n i x b p e + 12bit displacement 00 (1 1) (0 0 1 0) + 010 50 001D STA BUFFER 0F2016 0036=0020+disp Op code + n i x b p e + 12bit displacement 0C (1 1) (0 0 1 0) + 016

副程式 RDREC

副程式 WRREC

目的碼列表

2.2 與機器相關的組譯器特性 2.2.2 程式重定位 (Relocation) 電腦可能同時載入多個程式進入記憶體執行 若組譯時給定固定記憶體位址, 程式只能被載入記憶體特定位置執行 重新定址可解決上述問題 程式的起始位址在載入記憶體後才確定

2.2 與機器相關的組譯器特性 2.2.2 程式重定位 如圖 2-2 的 SIC 範例程式 : 絕對位址程式 55 101B LDA THREE 00102D 在圖 2.3 的目的碼程式中, 此指令是轉譯成 00102D, 而且位址 102D 的內容將載入到 A 暫存器中 目的碼內使用 102D( 絕對位址 ) 來參照 THREE 若程式被載入 2000h 55 201B LDA THREE 00102D 要解決此問題, 目的碼的絕對位址必須被修改 將目的碼必須被修改的部份標示出來 內含位址修改資訊的程式稱為可重定位程式

程式重定址範例

欄 1M 欄 2-7 需要修改之位址欄的起始位址, 此位址乃相對於程式的起始處 (16 進制 ) 欄 8-9 需要修改之位址欄的長度, 以半位元組表示 (16 進制 ) 以 JSUB 指令為例, 其修改記錄如下 : M00000705 修正記錄 須修改的位址欄位與程式載入點的距離 ( 以 byte 為單位 ) 須修改的位址欄位長度 ( 以 nibble 為單位

相對於圖 2.6 的目的程式

Relocation 哪些目的碼必須被修改 記憶體位址 SIC 的記憶體參照 SIC/XE 的記憶體參照 哪些目的碼不必被修改 immediate addressing, PC-relative, BASE-relative, 沒有參照到記憶體的指令