Assembler for SISC 0.99 written by George Ho (kyho@csie.nctu.edu.tw).
(何凱元)
patched by Jimmy Chen(jinming@csie.nctu.edu.tw).陳俊明
可用指令:
"LOAD","LDI","STORE","MOVE","ADD","FADD","OR","AND","XOR",
"ROTR","BR","HALT","NOP","GETC","PUTC","GETI","PUTI","GETS","PUTS",
"CMP","JLT","JEQ","JGT","CALL","RET"
假指令:
ORG,DB,END
注意:
Label前不可有空白,Label後加":",而且要自成一行 (可跟註解同一行)
指令與假指令前一定要有空白或TAB
registers前一定要加R, R0,R1,R2...RD,RE,RF
執行方法:
*** rename your siscasm.txt to siscasm.pl
perl siscasm.pl
參考程式--猜數字
================================== INPUT ==============================
ORG 0
CMP R0,R0
JEQ begin
HELLO: ; Hello
DB 48,45,4C,4C,4F,0D,0A,32,24,24
INPUT: ; Please input a num:
DB 49,4E,50,55,54,20,41,20,4E,55,4D,24
LARGER:
DB 54,6F,6F,20,6C,61,72,67,65,21,20,61,67,61,69,6E,3A,0D,0A,24
LESS:
DB 54,6F,6F,20,73,6D,61,6C,6C,21,20,61,67,61,69,6E,3A,0D,0A,24
WIN:
DB 59,6F,75,20,67,6F,74,20,69,74,21,0D,0A,24
;
NOP
begin:
PUTS HELLO
LDI R1,80 ;THE ANSWER
start:
PUTS INPUT
GETI
CMP R1,R0 ;COMPARE R1,R0
JLT larger ;F1,lessthen ;IF LT GOTO lessthen
JEQ end ;F2,end ;IF EQ GOTO end
;larger
PUTS LESS
CMP R0,R0
JEQ start ;goto start
larger:
PUTS LARGER
CMP R0,R0
JEQ start ;goto start
end:
PUTS WIN
HALT
END
================================== OUTPUT ==============================
F000 ; CMP R0,R0
F252 ; JEQ begin
; HELLO: ; Hello
4845
4C4C
4F0D
0A32
2424
; INPUT: ; Please input a num:
494E
5055
5420
4120
4E55
4D24
; LARGER:
546F
6F20
6C61
7267
6521
2061
6761
696E
3A0D
0A24
; LESS:
546F
6F20
736D
616C
6C21
2061
6761
696E
3A0D
0A24
; WIN:
596F
7520
676F
7420
6974
210D
0A24
; ;
0000 ; NOP
; begin:
D604 ; PUTS HELLO
2180 ; LDI R1,80 ;THE ANSWER
; start:
D60E ; PUTS INPUT
D200 ; GETI
F010 ; CMP R1,R0 ;COMPARE R1,R0
F166 ; JLT larger ;F1,lessthen ;IF LT GOTO lessthen
F26C ; JEQ end ;F2,end ;IF EQ GOTO end
; ;larger
D62E ; PUTS LESS
F000 ; CMP R0,R0
F256 ; JEQ start ;goto start
; larger:
D61A ; PUTS LARGER
F000 ; CMP R0,R0
F256 ; JEQ start ;goto start
; end:
D642 ; PUTS WIN
C000 ; HALT
;