
bsd2> perl siscasm.txt
Assembler for SISC 0.13 written by George Ho (kyho@csie.nctu.edu.tw).

usage:siscasm.pl <input file> <output file>


bsd2> perl siscasm.txt testNEW.asm  test.mc

Assembler for SISC 0.13 written by George Ho (kyho@csie.nctu.edu.tw).

}->ORG	 OR0	 0
ORG	0: the PC is now set to 0.
}->LDIiR1,01s; --2 1,01sa;wR1=1ie(00)u.edu.tw
}->LDIRR2,00;	2200   ; R2=0	(02)
}->LDIRR3,3A;  233A   ; R3 = length of this program
}->STORE{R2,THERE+1R2,THERE+1 ; 3209   ; store r2 into 9 ; STORE 2, 9
}->LOAD:R6,00 R6,0LOAD R6,00  ; L16D006 ;rLOAD?r6:from0??)(:08 :09 )
}->DB 20,4DD20,4D4d ;'M' ;  20 4d  ; r0="M"  μg LDI 0, 77
}->PUTC     ;  d1 00  ; print "M"
}->LDIRR0,28 ; LDI 0,'(' ; 20 28  ; "(" ===    LDI 0,40
}->PUTC    ;   d100   ; print "("   (:10h)
}->MOVE RR2,R0;   40 20   ; move r2 to r0  (:12h)
}->PUTI    ;   d300   ; print r0 as integer
}->LDIRR0,29; ')';  20 29 ; ")"   === LDI 0, 41
}->PUTC     ;  d1 00
}->LDIRR0,3D; '=' ; 203d;"="	  === LDI 0, 61
}->PUTC     ;  d1 00
}->MOVE RR6,R0;   40 60   ; move r6 to r0
}->PUTI    ;   d300   ; print r0 as integer
}->LDI RR0,0D;	200d; CR
}->PUTC     ;  d1 00
}->LDI RR0,0A;	20 0A ;LF
}->PUTC     ;  d1 00
}->MOVE RR3,R0 ; 40 30 ; move r3 to r0 (program length)
}->ADDRR2,R2,R1; 5221  ; r2 := r2+1 (r1 contains 1)
}->BRRR2,OK ; B232  ; jump to OK if R2=R0=R3
}->BR RR0,AGAIN; B006  ; goto :AGAIN=06
}->LDI R0,07I R0,07   ; 2007  ; bell
}->PUTC     ;  d1 00
}->HALT
}->END	 END
{}
------------
THERE, 8, AGAIN, 6, OK, 50,
------------
Last PC = 56.


bsd2> cat test.mc

     ; ;asmsisc2.asm --- by tsaiwn@csie.nctu.edu.tw
2101 ; LDI R1,01 ;   2 1,01  ; R1=1  (00)
2200 ; LDI R2,00 ;   2200   ; R2=0   (02)
233A ; LDI R3,3A ;  233A   ; R3 = length of this program
     ; ;AGAIN:	STORE R2,THERE+1 ; 3209   ; store r2 into 9 ; STORE 2, 9
     ; AGAIN:
3209 ;	   STORE R2,THERE2 ; 3209   ; store r2 into 9 ; STORE 2, 9
     ; ;THERE: LOAD R6,0  ;  16 00  ; LOAD r6 from ?? (:08 :09 )
     ; THERE:
16     ; THERE2:
0204d ; LDI R0,4d ;'M' ;  20 4d  ; r0="M"  μg LDI 0, 77
D100 ; PUTC	 ;  d1 00  ; print "M"
2028 ; LDI R0,28  ; LDI 0,'(' ; 20 28  ; "(" ===    LDI 0,40
D100 ; PUTC	;   d100   ; print "("	 (:10h)
4020 ; MOVE  R2,R0 ;   40 20   ; move r2 to r0	(:12h)
D300 ; PUTI	;   d300   ; print r0 as integer
2029 ; LDI R0,29 ; ')';  20 29 ; ")"   === LDI 0, 41
D100 ; PUTC	 ;  d1 00
203D ; LDI R0,3D ; '=' ; 203d;"="      === LDI 0, 61
D100 ; PUTC	 ;  d1 00
4060 ; MOVE  R6,R0 ;   40 60   ; move r6 to r0
D300 ; PUTI	;   d300   ; print r0 as integer
200D ; LDI  R0,0D ;  200d; CR
D100 ; PUTC	 ;  d1 00
200A ; LDI  R0,0A ;  20 0A ;LF
D100 ; PUTC	 ;  d1 00
4030 ; MOVE  R3,R0  ; 40 30 ; move r3 to r0 (program length)
5221 ; ADD R2,R2,R1 ; 5221  ; r2 := r2+1 (r1 contains 1)
B232 ; BR R2,OK  ; B232  ; jump to OK if R2=R0=R3
B006 ; BR  R0,AGAIN ; B006  ; goto :AGAIN=06
     ; OK:
2007 ;	  LDI R0,07   ; 2007  ; bell
D100 ; PUTC	 ;  d1 00
C000 ; HALT
     ;
