HomeWork # 16 目標: 修改所給的程式範例, 完成簡易的 SISC Assembler * 你的 assembler 要把如下的 asmsisc2.asm 讀入後 翻議出如 asm.mc 的 machine code (類似就可以啦, 可以沒有注解) * 主要是修改 各程式(注意 comment 部份), , 可以使用 asmutil2.cpp 內各 functions, 參考 genasm.bat 生出執行檔 * 所有相關檔案: http://www.csie.nctu.edu.tw/~tsaiwn/sisc/asm/ (1) 抓所有 asm*.* (部份完成的 Assembler 程式及測試用範例 asmsisc2.asm) (2) 抓 sisc.exe (Emulator for the machine code you generated) *** 簡單起見, 像 AGAIN 那line可改寫為 AGAIN STORE 2, 9 C:\> type asmsisc2.asm ;asmsisc2.asm --- by tsaiwn@csie.nctu.edu.tw ORG 0 LDI 1, 1 ; 2 1,01 ; R1=1 (00) LDI 2, 0 ; 2200 ; R2=0 (02) LDI 3, 58 ; 233A ; R3 = length of this program AGAIN STORE 2, THERE+1 ; 3209 ; store r2 into 9 ; STORE 2, 9 THERE LOAD 6,0 ; 16 00 ; LOAD r6 from ?? (:08 :09 ) LDI 0,'M' ; 20 4d ; r0="M" 或寫成 LDI 0, 77 PUTC ; d1 00 ; print "M" LDI 0, '(' ; 20 28 ; "(" === LDI 0,40 PUTC ; d100 ; print "(" (:10h) MOV 2,0 ; 40 20 ; move r2 to r0 (:12h) PUTI ; d300 ; print r0 as integer LDI 0, ')'; 20 29 ; ")" === LDI 0, 41 PUTC ; d1 00 LDI 0, '=' ; 203d;"=" === LDI 0, 61 PUTC ; d1 00 MOV 6,0 ; 40 60 ; move r6 to r0 PUTI ; d300 ; print r0 as integer LDI 0,13 ; 200d; CR PUTC ; d1 00 LDI 0,10 ; 20 0A ;LF PUTC ; d1 00 MOV 3,0 ; 40 30 ; move r3 to r0 (program length) ADD 2,2,1 ; 5221 ; r2 := r2+1 (r1 contains 1) BR 2, OK ; B232 ; jump to OK if R2=R0=R3 BR 0,AGAIN ; B006 ; goto :AGAIN=06 OK: LDI 0,7 ; 2007 ; bell PUTC ; d1 00 HALT ; c000 ; halt END C:\> type asm.mc 21 01 2200 ; R2=0 (02) 233A ; R3 = length of this program 3209 ; store r2 into 9 ; STORE 2, 9 16 00 ; LOAD r6 from ?? (:08 :09 ) 20 4d ; r0="M" 或寫成 LDI 0, 77 d1 00 ; print "M" 20 28 ; "(" === LDI 0,40 d100 ; print "(" (:10h) 40 20 ; move r2 to r0 (:12h) d300 ; print r0 as integer 20 29 ; ")" === LDI 0, 41 d1 00 203d ;"=" === LDI 0, 61 d1 00 40 60 ; move r6 to r0 d300 ; print r0 as integer 200d ; CR d1 00 20 0A ;LF d1 00 40 30 ; move r3 to r0 (program length) 5221 ; r2 := r2+1 (r1 contains 1) B232 ; jump to OK if R2=R0=R3 B006 ; goto :AGAIN=06 2007 ; bell d1 00 c000 ; halt