prog START 0 . 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 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 . 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 fakulteta_r . izpisi rezultat na standard output CLEAR S 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 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 +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 temp WORD 0 device BYTE X'FA' stevke BYTE 100 stevke_r BYTE 100 oldvalue WORD 0 stackptr WORD 0 stack RESW 1000