rekurzija checkpoint

This commit is contained in:
aljazbrodar. 2025-11-07 17:52:08 +01:00
parent 8854ec93a2
commit e6d4b3694a

View file

@ -1,26 +1,60 @@
prog START 0 prog START 0
JSUB stackinit . beri stevke do newline (\n = 10), nato evalviraj
LDA #5 LDX #1 . zacnemo z 1 za lazje preverjanje pogoja v loop_e
JSUB fakulteta_r loop RD device . FA.dev
LDA #10 COMP #10 . newline
JSUB fakulteta_r JEQ evaluate
HALT J HALT 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 END prog
fakulteta_r +STL @stackptr .link reg. na sklad
fakulteta_r +STL @stackptr . link reg. na sklad
JSUB stackpush JSUB stackpush
+STA @stackptr .parameter na sklad +STA @stackptr . parameter na sklad
JSUB stackpush JSUB stackpush
SUB #1 .pripravimo podproblem SUB #1 . pripravimo podproblem
COMP #1 .zaustavitveni pogoj COMP #1 . zaustavitveni pogoj
JEQ exit .ce je z.p. izpolnjen RSUB, v A je vrednost podproblema JEQ exit . ce je z. p. izpolnjen RSUB, v A je vrednost podproblema
JSUB fakulteta_r JSUB fakulteta_r
exit JSUB stackpop exit JSUB stackpop
RMO A, B .premakni vrednost podroblema v B RMO A, B . premakni vrednost podroblema v B
+LDA @stackptr .nalozi parameter klicujoče funkcije ("starša") +LDA @stackptr . nalozi parameter klicujoce funkcije ("starša")
MULR B, A .pomnozi, shrani v A MULR B, A . pomnozi, shrani v A
JSUB stackpop JSUB stackpop
+LDL @stackptr +LDL @stackptr
RSUB RSUB
@ -51,6 +85,8 @@ stackpop STA oldvalue
LDA oldvalue LDA oldvalue
RSUB RSUB
device BYTE X'FA'
stevke BYTE 100
oldvalue WORD 0 oldvalue WORD 0
stackptr WORD 0 stackptr WORD 0