started up asm

This commit is contained in:
aljazbrodar. 2025-12-18 13:49:58 +01:00
parent ef273790b8
commit acce30cea1
45 changed files with 1167 additions and 728 deletions

View file

@ -0,0 +1,132 @@
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