HomeWork # 16
ؼ: קҵ{d, ² SISC Assembler

* A assembler npU asmsisc2.asm ŪJ
       ½ĳXp asm.mc  machine code (NiH, iHS`)
* DnOק U{(`N comment ), , iHϥ asmutil2.cpp 
   U functions, Ѧ genasm.bat ͥX

* Ҧɮ:
    http://www.csie.nctu.edu.tw/~tsaiwn/sisc/asm/

    (1) Ҧ asm*.* 
         ( Assembler {δեνd asmsisc2.asm)
    (2)  sisc.exe     (Emulator for the machine code you generated)

 *** ²_,  AGAIN lineig 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"  μg 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"  μg 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
