rekurzija.asm completed

This commit is contained in:
aljazbrodar. 2025-11-08 10:40:53 +01:00
parent 414325bf95
commit 83a4e6015a
2 changed files with 46 additions and 12 deletions

View file

@ -1,3 +1,5 @@
1
9
5 5
10 10
0 0

View file

@ -1,5 +1,7 @@
prog START 0 prog START 0
. beri stevke do newline (\n = 10), nato evalviraj . inicializiraj sklad
JSUB stackinit
. beri stevke do newline (\n = 10), nato evalviraj stevilo
LDX #1 . zacnemo z 1 za lazje preverjanje pogoja v loop_e LDX #1 . zacnemo z 1 za lazje preverjanje pogoja v loop_e
loop RD device . FA.dev loop RD device . FA.dev
COMP #10 . newline COMP #10 . newline
@ -8,7 +10,7 @@ loop RD device . FA.dev
+STCH stevke, X +STCH stevke, X
TIX #-1 . primerjava TIX tu nima pomena TIX #-1 . primerjava TIX tu nima pomena
J loop J loop
evaluate . T zacasno hrani rezultat, na koncu v A evaluate . T zacasno hrani rezultat; na koncu v A
LDT #0 LDT #0
. S hrani potence st. deset . S hrani potence st. deset
LDS #1 LDS #1
@ -28,39 +30,67 @@ loop_e LDCH stevke, X
RMO X, A RMO X, A
SUB #1 SUB #1
RMO A, X RMO A, X
. ce je X = 0, si prebral vse stevke
COMP #0 COMP #0
JGT loop_e JGT loop_e
. ce je rezultat nic koncaj sicer izracunaj fakulteto in preberi naslednjo vrstico . ce je rezultat nic koncaj sicer izracunaj fakulteto in preberi naslednjo vrstico
RMO T, A RMO T, A
COMP #0 COMP #0
JEQ HALT JEQ HALT
JSUB stackinit
JSUB fakulteta_r JSUB fakulteta_r
. JSUB izpis . izpisi rezultat na standard output
STA temp
CLEAR A
CLEAR T
CLEAR S CLEAR S
CLEAR X JSUB izpis
CLEAR A
J prog J prog
HALT J HALT HALT J HALT
END prog END prog
izpis LDX #1
loop_i RMO A, S . kopiraj stevilo v S
. pridobi stevko, z mod 10
DIV #10
MUL #10
RMO A, T . odstevanec gre v T
RMO S, A
SUBR T, A
STCH stevke_r, X
TIX #-1 . primerjava nima pomena
RMO S, A
DIV #10
COMP #0
JGT loop_i
. izpis iz pomnilnika
RMO X, A
SUB #1
RMO A, X
loop_ii LDCH stevke_r, X
ADD #48 . pretvori v ascii
WD #1
RMO X, A
SUB #1
RMO A, X
COMP #0
JGT loop_ii
. izpis newline
LDA #10
WD #1
RSUB
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
COMP #1 . robni primer n = 1
JEQ exit
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 RMO A, B . premakni vrednost podroblema v B
RMO A, B . premakni vrednost podroblema v B JSUB stackpop
+LDA @stackptr . nalozi parameter klicujoce 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
@ -92,9 +122,11 @@ stackpop STA oldvalue
CLEAR A CLEAR A
LDA oldvalue LDA oldvalue
RSUB RSUB
temp WORD 0 temp WORD 0
device BYTE X'FA' device BYTE X'FA'
stevke BYTE 100 stevke BYTE 100
stevke_r BYTE 100
oldvalue WORD 0 oldvalue WORD 0
stackptr WORD 0 stackptr WORD 0