回分類題庫
d308: 程式作業3 系統程式2017
出處:

Difficulity : N/A
Accepted : 20 Times | Submit :665 Times | Clicks : 2381
Accepted : 16 Users | Submit : 65 Users | Accepted rate : 25%
Time Limit :10000 ms | Memory Limit : 64000 KBytes
題目加入時間 : 2017-04-25 09:54

Content :

可參考課本p.54  的pass2 pseudo code

將"SIC"組合語言程式的pass1產生的結果翻譯成object code以及object program
 
依能通過的測試資料,決定成績。

0~20: SIC組合語言  題目範例
 
21~30: 處理註解
-註解格式  .符號後的一行都是註解,因此可能為零個(.後直接是換行浮號)或多個字元。
               ex:  1000 LDA THREE
     1003 .
                     1003 . C1
                     1003 . C1 C2 ... 
               -輸出仍要將註解那一行輸出  
 
測驗pass2演算法的細節正確性。
31~40: 
-影響text record斷行的情形. (RESW, RESB, END)
-WORD 的輸入是十進位
 
41~70: 能處理完整的SIC組合語言

41~50 -Index addressing  (區分LDA BETA  和 LDA BETA,X的差別)
-SIC指令完整性: 每一行SIC指令都能轉換成object code
 
51~60 -BYTE  (ex: BYTE C'Hello',  BYTE X'F1' )

61~70 課本Fig 2.2和Fig 2.3

-text record 超過30個byte要斷行  

 
注意  當START 0時,進入SIC/XE模式  (輸出時address要補齊四個16進位數 ex: 0000 COPY START 0)  
71~90: SIC/XE組合語言(不包含Modification record),注意address mode         
-SIC/XE指令完整性: format 1, 2, 3, 4的差別
-FORMAT 1: 只有OP  ex:FIX  或是 SYMBOL OP ex: FIRST FIX 
  -#: ADD #3
-@: J @RET
  -Format4:  +JSUB #RDREC  和 +JSUB #3 的差別 
                -注意先pc relative, 若不行才使用base relative   (本段測資沒有base relative無法處理的例外)
-RSUB 雖然是format 3/4。但因不接受OPRAND,是故address為零,也不需經過pc relative address.
 
 
91~100: SIC/XE組合語言(包含Modification record)  ex:課本Fig 2.6和Fig 2.8

Input :

請參考範例輸入

開頭為SYMTAB, 每一行為 [symbol name] [address(Hex)], ex:

 TEST 1000

以 ==========表示symbol的結尾,

接下來是assembly program,

每一行為[address(Hex)] [source statement]

source statement最多可能包含  SYMBOL, OP, OPRAND  這三種欄位字串 
ex: FIRST LDA ALPHA 
 
或是只有 OP, OPRAND  這兩個欄位字串 
ex:  LDA ALPHA 
 
或是只有 SYMBOL, OP  這兩個欄位字串  ex: FORMAT 1
ex:  ALPHA FIX
 
或是只有 OP字串  
ex: RSUB  

 

Output :

請參考範例輸出

首先將每一行 assembly program輸出,並依需要翻譯出對應的object code

 ex: 輸出

 1000 FIRST LDA ALPHA 001003

以 ==========表示結尾,接下來是輸出對應的object program. 

為了格式的一致性,以30 byte斷開TEXT RECORD。

另外,注意演算法中需要斷開TEXT RECORD的時機。ex: 遇到RESW, RESB指令

 注意: 輸出範例的Header record為 HTEST  001000000006

T和001000之間有兩格空白(瀏覽器顯示有時會變成一個空白) 

 

Sample Input :

TEST 1000
FIRST 1000
ALPHA 1003
==========
1000 TEST START 1000
1000 FIRST LDA ALPHA
1003 ALPHA WORD 3
1006 END FIRST

Sample Output :

1000 TEST START 1000
1000 FIRST LDA ALPHA 001003
1003 ALPHA WORD 3 000003
1006 END FIRST
==========
HTEST  001000000006
T00100006001003000003
E001000

Hint :


  

Author :

(管理員:mtchi)

  Solve it!   Status Forum (11)

C++
C
JAVA
85240. sp17104703023 (5 ms , 516KB)
85176. sp17103702024 (5 ms , 537KB)
85359. sp17101703046 (6 ms , 474KB)
85239. sp17104703023 (6 ms , 514KB)
85226. sp17104703032 (6 ms , 557KB)
沒有解題記錄 84718. sp17104703042 (139 ms , 1605KB)
85027. sp17104703029 (145 ms , 1443KB)

執行時間會受很多因素影響因此僅供參考,主機等級請看這裡