93 lines
2.3 KiB
NASM
93 lines
2.3 KiB
NASM
prog START 0
|
|
. beri stevke do newline (\n = 10), nato evalviraj
|
|
LDX #1 . zacnemo z 1 za lazje preverjanje pogoja v loop_e
|
|
loop RD device . FA.dev
|
|
COMP #10 . newline
|
|
JEQ evaluate
|
|
SUB #48 . ASCII koda za 0
|
|
+STCH stevke, X
|
|
TIX #-1 . primerjava TIX tu nima pomena
|
|
J loop
|
|
evaluate . T zacasno hrani rezultat, na koncu v A
|
|
LDT #0
|
|
. S hrani potence st. deset
|
|
LDS #1
|
|
. zmanjsaj X za 1
|
|
RMO X, A
|
|
SUB #1
|
|
RMO A, X
|
|
. nalozi stevko, pomnozi s S, shrani oz. pristej rez. v T
|
|
loop_e LDCH stevke, X
|
|
MULR S, A
|
|
ADDR A, T
|
|
. povecaj potenco
|
|
RMO S, A
|
|
MUL #10
|
|
RMO A, S
|
|
. zmanjsaj X
|
|
RMO X, A
|
|
SUB #1
|
|
RMO A, X
|
|
|
|
COMP #0
|
|
JGT loop_e
|
|
|
|
. ce je rezultat nic koncaj sicer izracunaj fakulteto in preberi naslednjo vrstico
|
|
RMO T, A
|
|
COMP #0
|
|
JEQ HALT
|
|
JSUB fakulteta_r
|
|
HALT J HALT
|
|
END prog
|
|
|
|
|
|
fakulteta_r +STL @stackptr . link reg. na sklad
|
|
JSUB stackpush
|
|
+STA @stackptr . parameter na sklad
|
|
JSUB stackpush
|
|
|
|
SUB #1 . pripravimo podproblem
|
|
COMP #1 . zaustavitveni pogoj
|
|
JEQ exit . ce je z. p. izpolnjen RSUB, v A je vrednost podproblema
|
|
JSUB fakulteta_r
|
|
|
|
exit JSUB stackpop
|
|
RMO A, B . premakni vrednost podroblema v B
|
|
+LDA @stackptr . nalozi parameter klicujoce funkcije ("starša")
|
|
MULR B, A . pomnozi, shrani v A
|
|
JSUB stackpop
|
|
+LDL @stackptr
|
|
RSUB
|
|
|
|
stackinit STA oldvalue
|
|
CLEAR A
|
|
LDA #stack
|
|
STA stackptr
|
|
CLEAR A
|
|
LDA oldvalue
|
|
RSUB
|
|
|
|
stackpush STA oldvalue
|
|
CLEAR A
|
|
LDA stackptr
|
|
ADD #3
|
|
STA stackptr
|
|
CLEAR A
|
|
LDA oldvalue
|
|
RSUB
|
|
|
|
stackpop STA oldvalue
|
|
CLEAR A
|
|
LDA stackptr
|
|
SUB #3
|
|
STA stackptr
|
|
CLEAR A
|
|
LDA oldvalue
|
|
RSUB
|
|
|
|
device BYTE X'FA'
|
|
stevke BYTE 100
|
|
|
|
oldvalue WORD 0
|
|
stackptr WORD 0
|
|
stack RESW 1000
|