本節介紹支援 sic/xe 機器架構的組譯程式設計。 sic/xe...

40
本本本本本本 SIC/XE 本本本本本本本本本本本 SIC/XE 本本本本本本本本本本本本本本本本本本本本 Figure 2.6(p. 58) 本本本本本 Figure 2.2 本本本本 SIC/XE 本本本本本 本本本本 本本本本本本本本 register-to-register 本本本本本本本本 register-to-memory 本本本 本本本本本本本本本本本本本本本本2.2 與與與與與與與與與與與與

Upload: ross

Post on 03-Feb-2016

175 views

Category:

Documents


2 download

DESCRIPTION

本節介紹支援 SIC/XE 機器架構的組譯程式設計。 SIC/XE 機器的組合語言範例程式及對應的目的碼請見 Figure 2.6(p. 58) 。 此程式是將 Figure 2.2 的程式以 SIC/XE 機器的指令改寫而成。 此程式大量的使用 register-to-register 指令來替代原本的 register-to-memory 的指令。 將指令大量改寫為立即定址法的指令。. 2.2 與機器相關的組譯程式特性. 在 SIC/XE 機器的組合語言程式中,「間接定址」指令是在運算元之前加一個「 @ 」符號來表示。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

本節介紹支援 SIC/XE 機器架構的組譯程式設計。 SIC/XE 機器的組合語言範例程式及對應的目的碼

請見 Figure 2.6(p. 58) 。 此程式是將 Figure 2.2 的程式以 SIC/XE 機器

的指令改寫而成。 此程式大量的使用 register-to-register 指令

來替代原本的 register-to-memory 的指令。 將指令大量改寫為立即定址法的指令。

2.2 與機器相關的組譯程式特性

Page 2: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。
Page 3: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

在 SIC/XE 機器的組合語言程式中,「間接定址」指令是在運算元之前加一個「 @ 」符號來表示。 70 J @RETADR … 95 RETADR RESW 1

2.2 與機器相關的組譯程式特性

Page 4: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

在 SIC/XE 機器的組合語言程式中,「立即定址」指令則前置一個「 # 」符號來表示。 12 LDB #LENGTH 25 COMP #0 55 LDA #3 133 +LDT #4096

2.2 與機器相關的組譯程式特性

Page 5: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

一般來說,需要存取主記憶體 (register-to-memory) 的指令會被嘗試組譯成程式計數器相對定址或基底暫存器相對定址的方式 ( 格式三的指令 ) 。 當指令被組譯成基底暫存器相對定址,則必

須搭配使用組譯程式指引: BASE 。 若使用這兩種定址模式仍無法組譯成功,則

指令必須被組譯成格式四 ( 使用絕對位址 ) 。

2.2 與機器相關的組譯程式特性

Page 6: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

第 2.2.1 小節介紹為了支援 SIC/XE 機器上不同指令格式及定址模式,對組譯程式所造成的差異( 相較於 SIC 標準版機器 ) 。

第 2.2.2 小節介紹為了在 SIC/XE 機器上支援 multiprogramming ,組譯程式所必須提供的額外功能 ( 如何提供額外的資訊以支援載入重定位 ) 。 SIC/XE 的機器上有較大的可用記憶體空間。 當記憶體有空間時,我們需要能將之 ( 從不同

的位址 ) 載入,而非載入至固定位址。

2.2 與機器相關的組譯程式特性

Page 7: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

會被組譯成格式一的指令,例如: FIX(C416), FLOAT (C016), HIO(F416), TIO(F816) 等指令。組譯程式查閱OPTAB 後,即可以很容易地完成組譯。( 範例程式未使用到此類指令 ) 。

格式一:

2.2.1 指令格式及定址模式

OP

8

Page 8: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

會被組譯成格式二的指令,都是屬於register-to-register 的指令,例如: CLEAR(B416), COMPR(A016) 。

組譯程式查閱 OPTAB 及暫存器的代碼後,即可以很容易地完成組譯。 125 RDREC CLEAR X 130 CLEAR A 132 CLEAR S 150 COMPR A, S

2.2.1 指令格式及定址模式

Page 9: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

各暫存器運算元的代碼可以在組譯前就預先載入 SYMTAB 或使用額外的表格來存放。 A(016), X(116), L(216), PC(816), SW (916),

B(316), S(416), T(516), F(616) 。

格式二:

2.2.1 指令格式及定址模式

OP

8

r1 r2

4 4

Page 10: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

若是 register-to-memory 的指令,則以下列的順序 ( 定址模式或指令格式 ) 來嘗試是否可被組譯成功:

1) 程式計數器相對定址模式 (PC)2) 基底暫存器相對定址模式 (B)

格式三 :

2.2.1 指令格式及定址模式

OP

6

n disp

6 12

i x b p e

Page 11: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

若嘗試程式計數器相對或基底暫存器相對定址模式都無法被組譯成功,則必須使用格式四。 格式四有 20 bits 的位址欄,可完全

定址 SIC/XE 機器 ( 可用主記憶體為1M bytes) 當中任一個主記憶體空間。

使用格式四時,只需要在 address 欄填入運算元的絕對位址即可。

2.2.1 指令格式及定址模式

Page 12: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

程式設計師必須自行判斷指令是否需要使用格式四,若需要,則必須自行在指令前加上 ‘ +’ 符號。

若在指令前未加上 ‘ +’ 符號,組譯器會試著以程式計數器相對或基底暫存器相對定址模式 ( 格式三 ) 來組譯。 若以格式三來組譯失敗,則此指令無法

被正確組譯(組譯程式產生錯誤訊息 ) 。

2.2.1 指令格式及定址模式

Page 13: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

組譯成格式四的例子: Line LOC Object code

15 0006 +JSUB RDREC 4B101036

…………. 125 1036 REREC CLEAR X註 : JSUB = (48)16

格式四:

2.2.1 指令格式及定址模式

OP

6

n address

6 20

i x b p e

Page 14: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

若是 register-to-memory 的指令,如何判斷是否可以使用程式計數器相對或基底暫存器相對模式來組譯 ? 先計算出偏差位址 (disp) 。 然後依據程式計數器相對或基底暫存器相對定

址模式的 disp 有效範圍來決定。

2.2.1 指令格式及定址模式

模式 指示 TA disp 的有效範圍PC b=0,p=

1TA=(PC)

+disp(-2048≦disp ≦

2047)

B b=1,p=0

TA=(B)+disp

(0≦disp ≦ 4095)

Page 15: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

使用程式計數器相對定址的例子 ( 一 ) : Line LOC Object code

10 0000 FIRST STL RETADR 17202D

…………. 95 0030 RETADR RESW 1

Disp=(030)16-(003)16= (02D)16 在 PC 相對定址的disp 有效範圍內

STL =(14)16

2.2.1 指令格式及定址模式

Page 16: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

使用程式計數器相對定址的例子 ( 二 ) : Line LOC Object code

15 0006 CLOOP +JSUB RDREC

…………. 40 0017 J CLOOP 3F2FEC

Disp=(006)16-(01A)16= (-14)16 在 PC 相對定址的 disp有效範圍內

J =(3C)16

2.2.1 指令格式及定址模式

Page 17: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

試寫出 Line 20 的 Object code : Line LOC Object code

20 000A LDA LENGTH ?????????? …………. 100 0033 LENGTH RESW 1

註: LDA =(00)16

2.2.1 指令格式及定址模式

Page 18: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

如何使用基底暫存器相對模式來組譯 ? 計算出偏差位址 (disp) 及有效範圍的判定。 由於基底暫存器是在程式設計師的掌控之下,

他必須使用組譯程式指引 BASE 以告知組譯程式執行此程式時基底暫存器的值,以便能算出正確的 TA 。

若以後基底暫存器另有其它用途 ( 不想用於定址 ) ,則需使用組譯程式指引 NOBASE 以告知組譯程式。

2.2.1 指令格式及定址模式

Page 19: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

使用基底暫存器相對定址的例子 ( 一 ) :Line LOC Object code12 0003 LDB #LENGTH 69202D13 BASE LENGTH100 0033 LENGTH RESW 1105 0036 BUFFER RESB 4096160 104E STCH BUFFER,X 57C003

Disp=(036)16-(033)16= (003)16 在 B 相對定址的 disp有效範圍內

STCH =(54)16

2.2.1 指令格式及定址模式

Page 20: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

使用基底暫存器相對定址的例子 ( 二 ) :Line LOC Object code12 0003 LDB #LENGTH 69202D13 BASE LENGTH100 0033 LENGTH RESW 1175 104E EXIT STX LENGTH 134000

Disp=(033)16-(033)16= (000)16 在 B 相對定址的 disp 有效範圍內

STX =(10)16

2.2.1 指令格式及定址模式

Page 21: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

組譯立即定址的指令:Line LOC Object

code12 0003 LDB #LENGTH 69202D55 0020 LDA #3 010003133 103C +LDT #4096 75101000

100 0033 LENGTH RESW 1

LDA =(00)16 LDB =(68)16 LDT =(74)16

2.2.1 指令格式及定址模式

Page 22: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

組譯間接定址的指令:Line LOC

Object code 70 002A J @RETADR 3E2003 ……………… 95 0030 RETADR RESW 1

J =(3C)16

2.2.1 指令格式及定址模式

Page 23: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

1. PROG1 START 02. LDS #33. +LDT #30724. CLEAR X5. ADDLP +LDA ALPHA,X6. +ADD BETA,X7. +STA GAMMA,X8. ADDR S,X9. COMPR X, T10. JLT ADDLP11. RSUB12.ALPHA RESW 102413.BETA RESW 102414.GAMA RESW 102415.END PROG1

試產生以下程式的目的碼試產生以下程式的目的碼OPTAB

助記憶運算符號

格式 機器碼

ADD 3/4 (18)16

ADDR 2 (90)16

CLEAR 2 (B4)16

COMPR 2 (A0)16

JLT 3/4 (38)16

LDA 3/4 (00)16

LDS 3/4 (6C)16

LDT 3/4 (74)16

RSUB 3/4 (4C)16

STA 3/4 (0C)16

Page 24: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

1. PROG1 START 02. LDS #33. +LDT #30724. CLEAR X5. ADDLP +LDA ALPHA,X6. +ADD BETA,X7. +STA GAMMA,X8. ADDR S,X9. COMPR X, T10. JLT ADDLP11. RSUB12.ALPHA RESW 102413.BETA RESW 102414.GAMA RESW 102415.END PROG1

試產生以下程式的目的碼試產生以下程式的目的碼

LOC(0000)16

(0003)16

(0007)16

(0009)16

(000D)16

(0011)16

(0015)16

(0017)16

(0019)16

(001C)16

(001F)16

(0C1F)16

(181F)16

SYMTAB

符號運算元 位址

ADDLP (0009)16

ALPHA (001F)16

BETA (0C1F)16

GAMMA (181F)16

Page 25: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

OPTAB 1. PROG1 START 02. LDS #33. +LDT #30724. CLEAR X5. ADDLP +LDA ALPHA,X6. +ADD BETA,X7. +STA GAMMA,X8. ADDR S,X9. COMPR X, T10. JLT ADDLP11. RSUB12.ALPHA RESW 102413.BETA RESW 102414.GAMA RESW 102415.END PROG1

試產生以下程式的目的碼試產生以下程式的目的碼Object code

(6D0003)16

(75100C00)16

(B410)16

(0390001F)16

(1B900C1F)16

(0F90181F)16

(9041)16

(A015)16

(3B2FED)16

(4F0000)16

SYMTAB

符號運算元 位址

ADDLP (0009)16

ALPHA (001F)16

BETA (0C1F)16

GAMMA (181F)16

暫存器 代碼

S (4)16

T (5)16

X (1)16

Page 26: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

1. SUM START 0

2. FIRST LDX #0

3. LDA #0

4. +LDB #TABLE2

5. BASE TABLE2

6. LOOP ADD TABLE,X

7. ADD TABLE2,X

8. TIX COUNT

9. JLT LOOP

10. +STA TOTAL

11. RSUB

12.COUNT RESW 1

13.TABLE RESW 2000

14.TABLE2 RESW 2000

15.TOTAL RESW 1

16.END FIRST

試產生以下程式的目的碼試產生以下程式的目的碼

OPTAB

助記憶運算符號

格式 機器碼

ADD 3/4 (18)16

JLT 3/4 (38)16

LDA 3/4 (00)16

LDB 3/4 (68)16

LDX 3/4 (04)16

RSUB 3/4 (4C)16

STA 3/4 (0C)16

TIX 3/4 (2C)16

Page 27: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

1. SUM START 0

2. FIRST LDX #0

3. LDA #0

4. +LDB #TABLE2

5. BASE TABLE2

6. LOOP ADD TABLE,X

7. ADD TABLE2,X

8. TIX COUNT

9. JLT LOOP

10. +STA TOTAL

11. RSUB

12.COUNT RESW 1

13.TABLE RESW 2000

14.TABLE2 RESW 2000

15.TOTAL RESW 1

16.END FIRST

試產生以下程式的目的碼試產生以下程式的目的碼LOC

(0000)16

(0003)16

(0006)16

(000A)16

(000D)16

(0010)16

(0013)16

(0016)16

(001A)16

(001D)16

(0020)16

(1790)16

(2F00)16

SYMTAB

符號運算元 位址

COUNT (001D)16

FIRST (0000)16

LOOP (000A)16

TABLE (0020)16

TABLE2 (1790)16

TOTAL (2F00)16

Page 28: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

1. SUM START 0

2. FIRST LDX #0

3. LDA #0

4. +LDB #TABLE2

5. BASE TABLE2

6. LOOP ADD TABLE,X

7. ADD TABLE2,X

8. TIX COUNT

9. JLT LOOP

10. +STA TOTAL

11. RSUB

12.COUNT RESW 1

13.TABLE RESW 2000

14.TABLE2 RESW 2000

15.TOTAL RESW 1

16.END FIRST

試產生以下程式的目的碼試產生以下程式的目的碼Object code(050000)16

(010000)16

(69101790)16

(1BA013)16

(1BC000)16

(2F200A)16

(3B2FF4)16

(0F102F00)16

(4F0000)16

SYMTAB

符號運算元 位址

COUNT (001D)16

FIRST (0000)16

LOOP (000A)16

TABLE (0020)16

TABLE2 (1790)16

TOTAL (2F00)16

OPTAB

Page 29: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

試組譯以下程式 ( 習題 ) :第 2.2 節範例程式 , page 55 & 58

2.2.1 指令格式及定址模式

Page 30: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

希望許多個程式能夠同時共享一部電腦的記憶體及其他資源 ( 如 I/O 設備 ) 。 此為多元程式 (multiprogramming) 的概念。 如果能夠事先知道那些程式會被同時載入記憶體

等待執行,組譯程式 ( 在組譯時 ) 可以指派給這些程式適當的位址 ( 使得這些程式的空間不會重疊也不會浪費空間 ) 。

但組譯程式通常無法事先得知這樣的資訊。

Page 31: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

組譯程式不可能知道程式的真實載入位址等資訊。 只有當程式被 ( 載入程式 ) 載入到主記憶體時,才

能知道它的起始位址。 因此,程式通常只要能找到一個合適的空間就載

入。

Page 32: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

請參考 Figure 2.6 (P. 58) 。 試考慮若將此程式從位址 5000 或 7420開始載入的情況 : 5 0000 COPY START 0 …. 15 0006 CLOOP +JSUB RDREC

(4B101036) …. 125 1036 RDREC CLEAR X (B410)

Page 33: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

1036+5000

1036+7420

Page 34: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

無論程式載入的位址為何, RDREC 都是離程式起始的位址 1036 個 bytes 。 組譯程式產生 15 CLOOP +JSUB RDREC 的目

的碼時,可以同時產生重定位資訊 (修正記錄 ) 給載入器,以修正目的碼。

重定位資訊 (修正記錄 ) 指示載入器將程式(COPY) 的載入起始位址加到 的位址欄。

15 CLOOP +JSUB RDREC (4B101036)

Page 35: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

組譯程式能知道目的程式的那些部份需要修改( 依據真實的載入位址 ) 。 組譯程式產生指令的目的碼時,同時產生重定位

資訊 (修正記錄 ) 。 目的程式中同時包含目的碼及重定位資訊的程式

被稱為可重定位程式 (relocatable program) 。 那些指令需要重定位修正 ?

以”直接 ( 絕對 ) 位址”方式組譯的指令。

Page 36: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

以”直接 ( 絕對 ) 位址”方式組譯的指令。 SIC/XE 的格式四且其運算元為記憶體標記。 SIC 中 RSUB除外的一般指令。

以 SIC/XE 範例程式 (Figure 2.6, P. 58) 來看,以下指令的目的碼需要實施重定位修正 : Line Loc Source Statement

Object code 15 0006 CLOOP +JSUB RDREC 4B101036 40 0013 +JSUB WRREC 4B10105D 65 0026 +JSUB WRREC 4B10105D

Page 37: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

欄 1M 欄 2 - 7 需要修改之位址欄的起始位址,此

位址乃相對於程式的起始處( 16進制) 欄 8 - 9 需要修改之位址欄的長度,以半位

元組表示( 16進制) 以 JSUB 指令為例,其修改記錄如下: M00000705

Page 38: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。
Page 39: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

以 SIC 標準版的範例程式 (Figure 2.2, P. 47) 來看,若程式 COPY 不是從位址 0 的地方開始載入,那些指令的目的碼需要實施重定位修正 ?

總共 31 個指令需要修正 : Line 10~70 Line 125~175 Line 210~240

Page 40: 本節介紹支援 SIC/XE 機器架構的組譯程式設計。  SIC/XE 機器的組合語言範例程式及對應的目的碼請見  Figure 2.6(p. 58) 。

運算元為記憶體標記的指令被以相對定址模式組譯的好處 : 不論程式真實被載入的位址為何,組譯程

式不必為它產生對應的修正記錄 ( 目的程式會較小 ) 。

2.2.2 程式重定位