diff --git a/vaja2/sklad/rekurzija.asm b/vaja2/sklad/rekurzija.asm new file mode 100644 index 0000000..8448336 --- /dev/null +++ b/vaja2/sklad/rekurzija.asm @@ -0,0 +1,57 @@ +prog START 0 + JSUB stackinit + LDA #5 + JSUB fakulteta_r + LDA #10 + 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 klicujoče 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 + + +oldvalue WORD 0 +stackptr WORD 0 +stack RESW 1000