bsd2> perl siscasm.txt Assembler for SISC 0.13 written by George Ho (kyho@csie.nctu.edu.tw). usage:siscasm.pl 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 ;