132 lines
6.3 KiB
Text
132 lines
6.3 KiB
Text
00000 prog START 0
|
|
. inicializiraj sklad
|
|
00000 4B20D6 JSUB stackinit
|
|
. beri stevke do newline (\n = 10), nato evalviraj stevilo
|
|
00003 050001 LDX #1 . zacnemo z 1 za lazje preverjanje pogoja v loop_e
|
|
00006 DB2112 loop RD device . FA.dev
|
|
00009 29000A COMP #10 . newline
|
|
0000C 33200D JEQ evaluate
|
|
0000F 1D0030 SUB #48 . ASCII koda za 0
|
|
00012 5790011C +STCH stevke,X
|
|
00016 2D0FFF TIX #-1 . primerjava TIX tu nima pomena
|
|
00019 3F2FEA J loop
|
|
0001C 750000 evaluate LDT #0
|
|
. S hrani potence st. deset
|
|
0001F 6D0001 LDS #1
|
|
. zmanjsaj X za 1
|
|
00022 AC10 RMO X,A
|
|
00024 1D0001 SUB #1
|
|
00027 AC01 RMO A,X
|
|
. nalozi stevko, pomnozi s S, shrani oz. pristej rez. v T
|
|
00029 53A0F0 loop_e LDCH stevke,X
|
|
0002C 9840 MULR S,A
|
|
0002E 9005 ADDR A,T
|
|
. povecaj potenco
|
|
00030 AC40 RMO S,A
|
|
00032 21000A MUL #10
|
|
00035 AC04 RMO A,S
|
|
. zmanjsaj X
|
|
00037 AC10 RMO X,A
|
|
00039 1D0001 SUB #1
|
|
0003C AC01 RMO A,X
|
|
. ce je X = 0, si prebral vse stevke
|
|
0003E 290000 COMP #0
|
|
00041 372FE5 JGT loop_e
|
|
. ce je rezultat nic koncaj sicer izracunaj fakulteto in preberi naslednjo vrstico
|
|
00044 AC50 RMO T,A
|
|
00046 290000 COMP #0
|
|
00049 33200D JEQ HALT
|
|
0004C 4B2055 JSUB fakulteta_r
|
|
. izpisi rezultat na standard output
|
|
0004F B440 CLEAR S
|
|
00051 4B2008 JSUB izpis
|
|
00054 B400 CLEAR A
|
|
00056 3F2FA7 J prog
|
|
00059 3F2FFD HALT J HALT
|
|
0005C END prog
|
|
|
|
0005C 050001 izpis LDX #1
|
|
0005F AC04 loop_i RMO A,S . kopiraj stevilo v S
|
|
. pridobi stevko, z mod 10
|
|
00061 25000A DIV #10
|
|
00064 21000A MUL #10
|
|
00067 AC05 RMO A,T . odstevanec gre v T
|
|
00069 AC40 RMO S,A
|
|
0006B 9450 SUBR T,A
|
|
0006D 57A0AD STCH stevke_r,X
|
|
00070 2D0FFF TIX #-1 . primerjava nima pomena
|
|
00073 AC40 RMO S,A
|
|
00075 25000A DIV #10
|
|
00078 290000 COMP #0
|
|
0007B 372FE1 JGT loop_i
|
|
. izpis iz pomnilnika
|
|
0007E AC10 RMO X,A
|
|
00080 1D0001 SUB #1
|
|
00083 AC01 RMO A,X
|
|
00085 53A095 loop_ii LDCH stevke_r,X
|
|
00088 190030 ADD #48 . pretvori v ascii
|
|
0008B DD0001 WD #1
|
|
0008E AC10 RMO X,A
|
|
00090 1D0001 SUB #1
|
|
00093 AC01 RMO A,X
|
|
00095 290000 COMP #0
|
|
00098 372FEA JGT loop_ii
|
|
. izpis newline
|
|
0009B 01000A LDA #10
|
|
0009E DD0001 WD #1
|
|
000A1 4F0000 RSUB
|
|
|
|
000A4 16100121 fakulteta_r +STL @stackptr . link reg. na sklad
|
|
000A8 4B2041 JSUB stackpush
|
|
000AB 0E100121 +STA @stackptr . parameter na sklad
|
|
000AF 4B203A JSUB stackpush
|
|
|
|
000B2 290001 COMP #1 . robni primer n = 1
|
|
000B5 33200C JEQ exit
|
|
000B8 1D0001 SUB #1 . pripravimo podproblem
|
|
000BB 290001 COMP #1 . zaustavitveni pogoj
|
|
000BE 332003 JEQ exit . ce je z. p. izpolnjen RSUB, v A je vrednost podproblema
|
|
000C1 4B2FE0 JSUB fakulteta_r
|
|
|
|
000C4 AC03 exit RMO A,B . premakni vrednost podroblema v B
|
|
000C6 4B2039 JSUB stackpop
|
|
000C9 02100121 +LDA @stackptr . nalozi parameter klicujoce funkcije ("starša")
|
|
000CD 9830 MULR B,A . pomnozi, shrani v A
|
|
000CF 4B2030 JSUB stackpop
|
|
000D2 0A100121 +LDL @stackptr
|
|
000D6 4F0000 RSUB
|
|
|
|
000D9 0F2042 stackinit STA oldvalue
|
|
000DC B400 CLEAR A
|
|
000DE 012043 LDA #stack
|
|
000E1 0F203D STA stackptr
|
|
000E4 B400 CLEAR A
|
|
000E6 032035 LDA oldvalue
|
|
000E9 4F0000 RSUB
|
|
|
|
000EC 0F202F stackpush STA oldvalue
|
|
000EF B400 CLEAR A
|
|
000F1 03202D LDA stackptr
|
|
000F4 190003 ADD #3
|
|
000F7 0F2027 STA stackptr
|
|
000FA B400 CLEAR A
|
|
000FC 03201F LDA oldvalue
|
|
000FF 4F0000 RSUB
|
|
|
|
00102 0F2019 stackpop STA oldvalue
|
|
00105 B400 CLEAR A
|
|
00107 032017 LDA stackptr
|
|
0010A 1D0003 SUB #3
|
|
0010D 0F2011 STA stackptr
|
|
00110 B400 CLEAR A
|
|
00112 032009 LDA oldvalue
|
|
00115 4F0000 RSUB
|
|
|
|
00118 000000 temp WORD 0
|
|
0011B FA device BYTE X'FA'
|
|
0011C 64 stevke BYTE 100
|
|
0011D 64 stevke_r BYTE 100
|
|
|
|
0011E 000000 oldvalue WORD 0
|
|
00121 000000 stackptr WORD 0
|
|
00124 00....00 stack RESW 1000
|