本節介紹支援
Download
1 / 40

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


  • 305 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

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


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  • 本節介紹支援SIC/XE機器架構的組譯程式設計。

  • SIC/XE機器的組合語言範例程式及對應的目的碼請見 Figure 2.6(p. 58)。

    • 此程式是將Figure 2.2的程式以SIC/XE機器的指令改寫而成。

    • 此程式大量的使用 register-to-register 指令來替代原本的register-to-memory的指令。

    • 將指令大量改寫為立即定址法的指令。

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


  • SIC/XE機器的組合語言程式中,[email protected]來表示。

    • 70 J @RETADR

    • 95 RETADR RESW 1

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


  • SIC/XE機器的組合語言程式中,「立即定址」指令則前置一個「#」符號來表示。

    • 12 LDB #LENGTH

    • 25 COMP #0

    • 55 LDA #3

    • 133 +LDT #4096

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


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

    • 當指令被組譯成基底暫存器相對定址,則必須搭配使用組譯程式指引:BASE。

    • 若使用這兩種定址模式仍無法組譯成功,則指令必須被組譯成格式四(使用絕對位址)。

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


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

  • 第2.2.2小節介紹為了在SIC/XE機器上支援 multiprogramming,組譯程式所必須提供的額外功能(如何提供額外的資訊以支援載入重定位)。

    • SIC/XE的機器上有較大的可用記憶體空間。

    • 當記憶體有空間時,我們需要能將之(從不同的位址)載入,而非載入至固定位址。

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


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

格式一:

2.2.1 指令格式及定址模式

OP

8


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

  • 組譯程式查閱OPTAB及暫存器的代碼後,即可以很容易地完成組譯。

    • 125 RDREC CLEARX

    • 130 CLEARA

    • 132 CLEARS

    • 150 COMPRA, S

2.2.1 指令格式及定址模式


2.2.1 指令格式及定址模式

r1

OP

r2

8

4

4


  • 若是各暫存器運算元的代碼可以在組譯前就預先載入register-to-memory 的指令,則以下列的順序(定址模式或指令格式)來嘗試是否可被組譯成功:

    • 程式計數器相對定址模式 (PC)

    • 基底暫存器相對定址模式 (B)

  • 格式三:

2.2.1 指令格式及定址模式

OP

n

i

x

b

p

e

disp

6

6

12


2.2.1 指令格式及定址模式


2.2.1 指令格式及定址模式


2.2.1 指令格式及定址模式

OP

n

i

x

b

p

e

address

6

6

20


  • 若是 register-to-memory 的指令,如何判斷是否可以使用程式計數器相對或基底暫存器相對模式來組譯?

    • 先計算出偏差位址(disp)。

    • 然後依據程式計數器相對或基底暫存器相對定址模式的disp有效範圍來決定。

2.2.1 指令格式及定址模式


  • 使用程式計數器相對定址的例子 (一):

    LineLOCObject code

    10 0000 FIRST STL RETADR17202D

    ………….

    95 0030RETADR RESW 1

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

    STL =(14)16

2.2.1 指令格式及定址模式


  • 使用程式計數器相對定址的例子 (二):

    LineLOCObject code

    15 0006 CLOOP +JSUB RDREC

    ………….

    40 0017J CLOOP 3F2FEC

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

    J =(3C)16

2.2.1 指令格式及定址模式


  • 試寫出 Line 20 的Object code:

    LineLOCObject code

    20 000A LDA LENGTH ??????????

    ………….

    100 0033LENGTHRESW 1

    註:LDA =(00)16

2.2.1 指令格式及定址模式


  • 如何使用基底暫存器相對模式來組譯 ?

    • 計算出偏差位址(disp)及有效範圍的判定。

    • 由於基底暫存器是在程式設計師的掌控之下,他必須使用組譯程式指引 BASE 以告知組譯程式執行此程式時基底暫存器的值,以便能算出正確的TA。

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

2.2.1 指令格式及定址模式


  • 使用基底暫存器相對定址的例子 (一):

    LineLOCObject code

    12 0003 LDB #LENGTH69202D

    13 BASE LENGTH

    100 0033 LENGTH RESW 1

    105 0036BUFFER RESB 4096

    160 104E STCH BUFFER,X 57C003

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

    STCH =(54)16

2.2.1 指令格式及定址模式


  • 使用基底暫存器相對定址的例子 (二):

    LineLOCObject code

    12 0003 LDB #LENGTH69202D

    13 BASE LENGTH

    100 0033 LENGTH RESW 1

    175 104E EXIT STX LENGTH134000

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

    STX =(10)16

2.2.1 指令格式及定址模式


組譯立即定址的指令:

LineLOCObject code

12 0003 LDB #LENGTH 69202D

55 0020 LDA #3 010003

133 103C +LDT #4096 75101000

100 0033 LENGTH RESW 1

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

2.2.1 指令格式及定址模式


組譯間接定址的指令:

LineLOCObject code

70 002A J @RETADR3E2003

………………

95 0030 RETADR RESW 1

J =(3C)16

2.2.1 指令格式及定址模式


PROG1 START 0

LDS #3

+LDT #3072

CLEAR X

ADDLP +LDA ALPHA,X

+ADD BETA,X

+STA GAMMA,X

ADDR S,X

COMPR X, T

JLT ADDLP

RSUB

ALPHA RESW 1024

BETA RESW 1024

GAMA RESW 1024

END PROG1

試產生以下程式的目的碼


PROG1 START 0

LDS #3

+LDT #3072

CLEAR X

ADDLP +LDA ALPHA,X

+ADD BETA,X

+STA GAMMA,X

ADDR S,X

COMPR X, T

JLT ADDLP

RSUB

ALPHA RESW 1024

BETA RESW 1024

GAMA RESW 1024

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


PROG1 START 0

LDS #3

+LDT #3072

CLEARX

ADDLP +LDA ALPHA,X

+ADD BETA,X

+STA GAMMA,X

ADDRS,X

COMPRX, T

JLT ADDLP

RSUB

ALPHA RESW 1024

BETA RESW 1024

GAMA RESW 1024

END PROG1

試產生以下程式的目的碼

Object code

(6D0003)16

(75100C00)16

(B410)16

(0390001F)16

(1B900C1F)16

(0F90181F)16

(9041)16

(A015)16

(3B2FED)16

(4F0000)16


SUM START 0

FIRST LDX #0

LDA #0

+LDB #TABLE2

BASE TABLE2

LOOP ADD TABLE,X

ADD TABLE2,X

TIX COUNT

JLT LOOP

+STA TOTAL

RSUB

COUNT RESW 1

TABLE RESW 2000

TABLE2 RESW 2000

TOTAL RESW 1

END FIRST

試產生以下程式的目的碼


SUM START 0

FIRSTLDX #0

LDA #0

+LDB #TABLE2

BASE TABLE2

LOOPADD TABLE,X

ADD TABLE2,X

TIX COUNT

JLT LOOP

+STA TOTAL

RSUB

COUNT RESW 1

TABLE RESW 2000

TABLE2 RESW 2000

TOTAL RESW 1

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


SUM START 0

FIRST LDX #0

LDA #0

+LDB #TABLE2

BASE TABLE2

LOOP ADD TABLE,X

ADD TABLE2,X

TIX COUNT

JLT LOOP

+STA TOTAL

RSUB

COUNT RESW 1

TABLE RESW 2000

TABLE2 RESW 2000

TOTAL RESW 1

END FIRST

試產生以下程式的目的碼

Object code

(050000)16

(010000)16

(69101790)16

(1BA013)16

(1BC000)16

(2F200A)16

(3B2FF4)16

(0F102F00)16

(4F0000)16


試組譯以下程式 (習題):

第2.2節範例程式, page 55 & 58

2.2.1 指令格式及定址模式


2 2 2
2.2.2 程式重定位

  • 希望許多個程式能夠同時共享一部電腦的記憶體及其他資源(如I/O設備)。

    • 此為多元程式(multiprogramming)的概念。

    • 如果能夠事先知道那些程式會被同時載入記憶體等待執行,組譯程式(在組譯時)可以指派給這些程式適當的位址(使得這些程式的空間不會重疊也不會浪費空間)。

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


2 2 21
2.2.2 程式重定位

  • 組譯程式不可能知道程式的真實載入位址等資訊。

    • 只有當程式被(載入程式)載入到主記憶體時,才能知道它的起始位址。

    • 因此,程式通常只要能找到一個合適的空間就載入。


2 2 22
2.2.2 程式重定位

  • 請參考Figure 2.6 (P. 58)。

  • 試考慮若將此程式從位址 5000或7420開始載入的情況:

    • 5 0000 COPY START 0

    • ….

    • 15 0006 CLOOP +JSUB RDREC(4B101036)

    • ….

    • 125 1036 RDREC CLEAR X (B410)


2.7 程式重定址的範例

1036+5000

1036+7420


2 2 23
2.2.2 程式重定位

  • 無論程式載入的位址為何,RDREC都是離程式起始的位址1036個bytes。

    • 組譯程式產生15 CLOOP +JSUB RDREC 的目的碼時,可以同時產生重定位資訊(修正記錄)給載入器,以修正目的碼。

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

    • 15 CLOOP +JSUB RDREC(4B101036)


2 2 24
2.2.2 程式重定位

  • 組譯程式能知道目的程式的那些部份需要修改(依據真實的載入位址)。

    • 組譯程式產生指令的目的碼時,同時產生重定位資訊(修正記錄)。

    • 目的程式中同時包含目的碼及重定位資訊的程式被稱為可重定位程式(relocatable program)。

  • 那些指令需要重定位修正?

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


2 2 25
2.2.2 程式重定位

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

    • SIC/XE的格式四且其運算元為記憶體標記。

    • SIC 中RSUB除外的一般指令。

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

    • LineLocSource StatementObject code

    • 15 0006 CLOOP +JSUB RDREC 4B101036

    • 40 0013 +JSUB WRREC 4B10105D

    • 65 0026 +JSUB WRREC 4B10105D


修正記錄

欄1 M

欄2-7 需要修改之位址欄的起始位址,此位址乃相對於程式的起始處(16進制)

欄8-9 需要修改之位址欄的長度,以半位元組表示(16進制)

以JSUB指令為例,其修改記錄如下:

M00000705


2 8 2 6
2.8 對應圖2.6的目的程式


2 2 26
2.2.2 程式重定位

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

  • 總共31個指令需要修正:

    • Line 10~70

    • Line 125~175

    • Line 210~240


2.2.2程式重定位


ad