• 沒有找到結果。

範例

N/A
N/A
Protected

Academic year: 2022

Share "範例"

Copied!
65
0
0

加載中.... (立即查看全文)

全文

(1)

第 第 第

第2章 章 章 章 組譯器 組譯器 組譯器 組譯器(Assembler)

 與機器無關之組譯程式功能

 組譯器設計選項

(2)

 「定字」(literal)

 符號定義敘述(EQU及ORG)

 運算式(Expression)

 程式區段(Program Blocks )

 Control Sections(控制區塊)and Program Linking(程式連 結)

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(3)

範例

範例

範例

範例

(4)

 將常數運算元的值當成指令的一部份

 避免在程式的其他區段定義這常數,並給予常數一個 標記。此種運算元稱之為「定字定字定字定字」(literal)。

 在組合語言中,使用“="來判定

 例如:

 45 001A ENDFIL LDA =C'EOF' 032010

 215 1062 WLOOP TD =X’05’ E32011

2.3.1 定字 定字 定字 定字

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(5)
(6)

目的碼 目的碼 目的碼 目的碼

(7)

Literals vs. Immediate Operands

 運算元的值被組譯成機器指令的一部份

 e.g. 55 0020 LDA #3 010003

 組譯器將特定值產生成某一個記憶體位置的常數

 eg. 45 001A ENDFIL LDA =C’EOF’032010



 93 LTORG

 002D * =C’EOF’

(8)

LTORG

 通常定字(literals) 被放置在程式結尾的池中

 定字池(Literal pools)

 LTORG

 希望定字被放置在目的程式的特定位置

 希望定字運算元(literal operand) 靠近指令

(9)

 定字表(LITTAB):

 針對每個常值,此表格包含常值名稱、運算元值及長度,以 及運算元位於常值區的位址。

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

定字表 定字表 定字表

定字表( ( ( LITTAB) (

1076 1 BYTE

=X’05’ 05

002D 3 BYTE

454F46

=C’EOF’

address length

value name

(10)

 第一回合(Pass 1)

 先在LITTAB 中建立定字名稱(literal name)、運算元的值和長 度(operand value and length),不指定位址

 當碰到LTORG 敘述時,針對尚未指定位址的每一個定字指定 一個位址

 第二回合(Pass 2)

 對每一個碰到的定字運算元,搜尋LITTAB

 使用BYTE 或WORD 敘述,產生值

 對於定字產生修改紀錄(modification record),用以表示在程式 中的位址

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

產生定字表 產生定字表 產生定字表

產生定字表( ( ( ( LITTAB)

(11)

 定義符號(symbol)並指定數值 符號

符號 符號

符號 EQU 值值值值

 例1:

MAXLEN EQU 4096 +LDT #MAXLEN

 例2:

BASE EQU R1 COUNT EQU R2 INDEX EQU R3

2.3.2 符號定義敘述 符號定義敘述 符號定義敘述 符號定義敘述

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

+LDT #4096

(12)

 間接指定值給符號

 將位置計數器(LOCCRT) 的值重新設定為所指定值 ORG 值值值值

 Example

 SYMBOL: 6bytes

 VALUE: 1word

 FLAGS: 2bytes

 LDA VALUE, X

2.3.2 符號定義敘述 符號定義敘述 符號定義敘述 符號定義敘述

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(13)

 STAB RESB 1100

 SYMBOL EQU STAB

 VALUE EQU STAB+6

 FLAGS EQU STAB+9

 STAB RESB 1100

 ORG STAB

 SYMBOL RESB 6

 VALUE RESW 1

 FLAGS RESB 2

 ORG STAB+1100

 Using EQU statements

 Using ORG statements

2.3.2 符號定義敘述 符號定義敘述 符號定義敘述 符號定義敘述

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

較易看出表格組成欄位 較易看出表格組成欄位 較易看出表格組成欄位 較易看出表格組成欄位

(14)

 下列的指令順序是允許的 ALPHA RESW 1

BETA EQU ALPHA

 下列的指令順序是不允許的 (no forward reference) BETA EQU ALPHA

ALPHA RESW 1

2.3.2 符號定義敘述 符號定義敘述 符號定義敘述 符號定義敘述

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(15)

 無法處理:向前引用

ALPHA EQU BETA BETA EQU DELTA DELTA RESW 1

2.3.2 符號定義敘述 符號定義敘述 符號定義敘述 符號定義敘述

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(16)

 運算式可以分成絕對運算式或是相對運算式

 組譯程式允許由 + - * / 等運算子形成算術運算式, 例:

 106 BUFEND EQU *

 107 MAXLEN EQU BUFEND-BUFFER

 錯誤:BUFEND + BUFFER、100 – BUFFER或 3 * BUFFER

 程式中所定義的符號之型態

2.3.3 運算式 運算式 運算式 運算式

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(17)

 程式區塊(Program block )表示可以在個別目的程式單元中重新安 排的區段碼,實際上可包含原始程式中數個獨立區段(segment)。

組譯器可重新組合區段,把個區塊的片段組合起來

 單一目的程式中重新排列的程式碼區段

USE [blockname]

 一開始,程式敘述設定為未命名(預設)區塊的一部份

 如果沒有使用USE敘述,整個程式被視為單一的區塊

 例: Figure 2.11

 實際上,每一個程式區段可能包含好幾個原始程式中的程式碼區 段

2.3.4 程式區塊 程式區塊 程式區塊 程式區塊

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(18)
(19)
(20)

 第一回合

 每一個程式區塊有一個別的位址計數器(location counter)

 每一個標記(label)所被指定的位址相對於包含它的區塊開始位

 在第一次執行的結束, 對於每一個區塊之位址計數器的最新值 表示這個區塊的長度

 組譯器然後能夠在目的程式中指定每個程式區塊一個開始位

 第二回合

 每一個符號的位址能夠利用所指定區塊的起始位址加上這個 符號相對於此區塊的相對位址計算出來

2.3.4 程式區塊 程式區塊 程式區塊 程式區塊

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(21)

 在每一行原始程式中,給定一個相對位址和一個區塊號碼

 對於絕對符號,不需要區塊號碼,例:line107

 例:

20 0006 0 LDA LENGTH 032060 LENGTH=(Block 1)+0003= 0066+0003= 0069

LOCCTR=(Block 0)+0009= 0009

2.3.4 程式區塊 程式區塊 程式區塊 程式區塊

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(22)
(23)
(24)
(25)
(26)

(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)

 採用程式區段的好處

 增加程式的可讀性(Program readability)

不需要在lines 15, 35, 65 中的擴充指令格式

不需要使用在(line 13, 14) 中的基底相對定址

在(line 253) 使用LTORG 是確保這些實字被放置在任何大 塊資料區域之前

 A 目的程式碼(Object code)

不需要實際重新排列在目的程式所產生的程式碼。

 Fig. 2.13, Fig. 2.14

2.3.4 程式區塊 程式區塊 程式區塊 程式區塊

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(38)

目的程式 目的程式 目的程式 目的程式

(39)

追蹤圖追蹤圖追蹤圖

追蹤圖2.11經過組譯與載入過程的程式區塊經過組譯與載入過程的程式區塊經過組譯與載入過程的程式區塊經過組譯與載入過程的程式區塊

(40)

 控制段(control section)是程式的一部份,並且在經 過組譯後仍然保有原來的本質;各個控制段皆可獨自 載入和重定址

 不同的控制段通常是扮演副程式,或程式內的邏輯單 元

 程式設計師可以各別組譯、載入和處理各個控制段

 控制段之間的引用,稱之為「外部引用」(External reference)

2.3.5 控制段與程式連結 控制段與程式連結 控制段與程式連結 控制段與程式連結

2.3 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性 與機器無關的組譯特性

(41)
(42)
(43)
(44)
(45)
(46)
(47)

 定義記錄定義記錄定義記錄定義記錄

 引用記錄引用記錄引用記錄引用記錄

(48)

 修正記錄修正記錄修正記錄修正記錄(已修改過已修改過已修改過已修改過)

 修正記錄修正記錄修正記錄修正記錄

(49)

相對於圖相對於圖

相對於圖相對於圖2.15 的目的程式 的目的程式 的目的程式 的目的程式

(50)

相對於圖 相對於圖 相對於圖

相對於圖2.15的目的程式 的目的程式 的目的程式 的目的程式

(51)

相對於圖 相對於圖 相對於圖

相對於圖2.15的目的程式 的目的程式 的目的程式 的目的程式

(52)

 2.4.1 描述單階段組譯器的結構和邏輯

 2.4.2 介紹多階段組譯器的概念

2.4 組譯器設計選項 組譯器設計選項 組譯器設計選項 組譯器設計選項

(53)

 主要嘗試使用單階段組譯,並考量向前引用。

 要求程式在引用資料項之前,必定在原始程式中先行 定義。

 程式的邏輯經常需要向前跳躍

 二種主要的類型

 一種是直接在記憶體裡產生目的碼

 另一種類型是產生通常的目的碼程式

2.4.1 單階段組譯器 單階段組譯器 單階段組譯器 單階段組譯器

2.4 組譯器設計選項 組譯器設計選項 組譯器設計選項 組譯器設計選項

(54)

單階段組譯器的範例程式 單階段組譯器的範例程式 單階段組譯器的範例程式 單階段組譯器的範例程式

(55)

 首先所討論的單階段組譯器,可以在記憶體產生目的 碼,以便立即執行。既不會產生目的碼程式,也不需 要載入器。

 當組譯器掃瞄原始程式時,只產生目的碼指令,如果 一個指令的運算元是一個尚未定義的符號,該指令被 組譯時,將先忽略此運算元的位址,但是會將此運算 元的符號置入符號表內

 當遇到此符號的定義時,將會掃瞄該符號的向前引用 串列(如果存在時),而且將正確的位址置入先前的 目的碼指令中。

(56)
(57)
(58)
(59)

 在EQU組譯器指引的討論中,任何在EQU右邊的符號 都必須在原始程式中事前有所定義。

 對ORG來說,也有類似的需求。

 多階段組譯器

 第一階段時,將程式中涉及符號定義之向前引用的 部份儲存起來,而後再依所儲存的定義進行額外處

理,接著才執行正常的第二階段處理。

2.4.2 多階段組譯器 多階段組譯器 多階段組譯器 多階段組譯器

2.4 組譯器設計選項 組譯器設計選項 組譯器設計選項 組譯器設計選項

(60)

多階段組譯器範例 多階段組譯器範例 多階段組譯器範例 多階段組譯器範例::::

(61)

Line 1

(62)

Line 2

(63)

Line 3

(64)

Line 4

(65)

Line 5

參考文獻

相關文件

下圖一是測量 1994 年發生於洛杉磯的 Northridge 地震所得 到的圖形。任意給定一個時間 t ,從圖上可看出此時間所對

print –dtiff my_image.tif: 將目前指定的圖形,產生 TIFF 格式的影像檔,並以my_image.tif 的檔名儲存。.

Ctrl+N 建立一個新的 VI Ctrl+B 將程式方塊圖中所有壞線移除 Ctrl+R 執行目前的的 VI Ctrl+T 將人機介面與程式方塊圖左右並列 Ctrl+W 關閉目前的的 VI Ctrl+E

• 由於對行文稱謂、格式的不熟悉,乃至於中西格式的 混淆,往往會出現一

建議多協助學生進 行運用工具實作的 機會,亦可嘗試將 部分概念以圖像化 (如流程圖、太陽 圖等)的形式呈現

 以課程為目標時,課程包含的是所欲達成的 一組目標,強調課程目標的重要性,所以也 著重於課程目標的選擇、組織、敘寫,並以

RMI,及 DCOM 這些以專屬 binary 格式傳送資料所不及之處,那 就是對程式語言、作業平台的獨立性--由於是純文字 XML 格 式,

疊對(overlay)的方式是指兩層的定位與相互考量的 x 和 y 方向,如果所有的疊對 層在晶圓上沒有偏移,亦即代表 overlay value=0 ,通常 overlay =0 是目標值。而 overlay