napisal rec.asm
This commit is contained in:
parent
92bf54646b
commit
fd7f0e07db
1 changed files with 136 additions and 0 deletions
136
ass1/rec.asm
Normal file
136
ass1/rec.asm
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
rec START 0
|
||||
JSUB stackinit
|
||||
|
||||
mainloop JSUB readnum
|
||||
COMP #0 .if 0 halt
|
||||
JEQ halt
|
||||
JSUB fac
|
||||
JSUB printnum
|
||||
J mainloop
|
||||
|
||||
readnum STL readret
|
||||
LDA #0
|
||||
STA currentnum
|
||||
readchar RD devFA
|
||||
COMP #10 .stop reading if newline
|
||||
JEQ endread
|
||||
COMP #48 .stop reading if 0
|
||||
JEQ endread
|
||||
SUB #48
|
||||
STA temp
|
||||
LDA currentnum
|
||||
MUL #10
|
||||
ADD temp
|
||||
STA currentnum
|
||||
J readchar
|
||||
endread LDA currentnum
|
||||
LDL readret
|
||||
RSUB
|
||||
|
||||
ending LDA temp
|
||||
JSUB printnum
|
||||
J mainloop
|
||||
|
||||
printnum STL printret
|
||||
STA num
|
||||
LDA #0
|
||||
STA digitcnt
|
||||
divloop LDA num
|
||||
COMP #0
|
||||
JEQ checkzero
|
||||
DIV #10
|
||||
STA quotient
|
||||
MUL #10
|
||||
STA saveA
|
||||
LDA num
|
||||
SUB saveA
|
||||
ADD #48 .convert to ascii number
|
||||
STA @stkptr
|
||||
JSUB push
|
||||
LDA digitcnt
|
||||
ADD #1
|
||||
STA digitcnt
|
||||
LDA quotient
|
||||
STA num
|
||||
J divloop
|
||||
checkzero LDA digitcnt
|
||||
COMP #0
|
||||
JGT printloop
|
||||
LDA #48
|
||||
WD devAA
|
||||
LDL printret
|
||||
RSUB
|
||||
printloop LDA digitcnt
|
||||
COMP #0
|
||||
JEQ printdone
|
||||
LDB stkptr
|
||||
COMPR X, B .stop print if stack empty
|
||||
JEQ printdone
|
||||
JSUB pop
|
||||
WD devAA
|
||||
LDA digitcnt
|
||||
SUB #1
|
||||
STA digitcnt
|
||||
J printloop
|
||||
printdone LDL printret
|
||||
LDA #0x0A .print newline
|
||||
WD devAA
|
||||
RSUB
|
||||
|
||||
halt J halt
|
||||
|
||||
fac COMP #1 .base case
|
||||
JGT facrecur
|
||||
LDA #1
|
||||
RSUB
|
||||
|
||||
.only works for < 10 (24 bit registers)
|
||||
facrecur JSUB push .recursive case
|
||||
SUB #1
|
||||
JSUB fac
|
||||
STA temp
|
||||
STL lastJ .save jump register
|
||||
LDB stkptr
|
||||
COMPR X, B .exit if stack empty
|
||||
JEQ ending
|
||||
JSUB pop
|
||||
MUL temp
|
||||
LDL lastJ
|
||||
RSUB
|
||||
|
||||
push STA temp
|
||||
STA @stkptr
|
||||
LDA stkptr
|
||||
ADD #3
|
||||
STA stkptr
|
||||
LDA temp
|
||||
RSUB
|
||||
|
||||
pop STA temp
|
||||
LDA stkptr
|
||||
SUB #3
|
||||
STA stkptr
|
||||
LDA @stkptr
|
||||
RSUB
|
||||
|
||||
stackinit STA temp
|
||||
LDA #stack
|
||||
STA stkptr
|
||||
LDX stkptr
|
||||
LDA temp
|
||||
RSUB
|
||||
|
||||
stkptr RESW 1
|
||||
temp RESW 1
|
||||
lastJ RESW 1
|
||||
printret RESW 1
|
||||
readret RESW 1
|
||||
currentnum RESW 1
|
||||
num RESW 1
|
||||
quotient RESW 1
|
||||
saveA RESW 1
|
||||
digitcnt RESW 1
|
||||
stack RESW 50
|
||||
devFA BYTE X'FA'
|
||||
devAA BYTE X'AA'
|
||||
END rec
|
||||
Loading…
Add table
Add a link
Reference in a new issue