diff --git a/vaja2/sklad/rekurzija.asm b/vaja2/sklad/rekurzija.asm index 8448336..e5d9e30 100644 --- a/vaja2/sklad/rekurzija.asm +++ b/vaja2/sklad/rekurzija.asm @@ -1,26 +1,60 @@ -prog START 0 - JSUB stackinit - LDA #5 - JSUB fakulteta_r - LDA #10 - JSUB fakulteta_r -HALT J HALT +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 + +fakulteta_r +STL @stackptr . link reg. na sklad JSUB stackpush - +STA @stackptr .parameter na sklad + +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 + 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 + 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 @@ -51,6 +85,8 @@ stackpop STA oldvalue LDA oldvalue RSUB +device BYTE X'FA' +stevke BYTE 100 oldvalue WORD 0 stackptr WORD 0