From 83a4e6015a4dbf898b7275a1b17d2a3bd89efbba Mon Sep 17 00:00:00 2001 From: "aljazbrodar." Date: Sat, 8 Nov 2025 10:40:53 +0100 Subject: [PATCH] rekurzija.asm completed --- vaja2/sklad/FA.dev | 2 ++ vaja2/sklad/rekurzija.asm | 56 ++++++++++++++++++++++++++++++--------- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/vaja2/sklad/FA.dev b/vaja2/sklad/FA.dev index d3860de..cb3856f 100644 --- a/vaja2/sklad/FA.dev +++ b/vaja2/sklad/FA.dev @@ -1,3 +1,5 @@ +1 +9 5 10 0 diff --git a/vaja2/sklad/rekurzija.asm b/vaja2/sklad/rekurzija.asm index 50cce3d..c7f7447 100644 --- a/vaja2/sklad/rekurzija.asm +++ b/vaja2/sklad/rekurzija.asm @@ -1,5 +1,7 @@ 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 loop RD device . FA.dev COMP #10 . newline @@ -8,7 +10,7 @@ loop RD device . FA.dev +STCH stevke, X TIX #-1 . primerjava TIX tu nima pomena J loop -evaluate . T zacasno hrani rezultat, na koncu v A +evaluate . T zacasno hrani rezultat; na koncu v A LDT #0 . S hrani potence st. deset LDS #1 @@ -28,39 +30,67 @@ loop_e LDCH stevke, X RMO X, A SUB #1 RMO A, X - + . ce je X = 0, si prebral vse stevke 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 stackinit JSUB fakulteta_r - . JSUB izpis - STA temp - CLEAR A - CLEAR T + . izpisi rezultat na standard output CLEAR S - CLEAR X + JSUB izpis + CLEAR A J prog HALT J HALT 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 JSUB stackpush +STA @stackptr . parameter na sklad JSUB stackpush + COMP #1 . robni primer n = 1 + JEQ exit 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 +exit RMO A, B . premakni vrednost podroblema v B + JSUB stackpop +LDA @stackptr . nalozi parameter klicujoce funkcije ("starša") MULR B, A . pomnozi, shrani v A JSUB stackpop @@ -92,9 +122,11 @@ stackpop STA oldvalue CLEAR A LDA oldvalue RSUB + temp WORD 0 device BYTE X'FA' stevke BYTE 100 +stevke_r BYTE 100 oldvalue WORD 0 stackptr WORD 0