completed rec and again fixed echo
This commit is contained in:
parent
8c8a68cb89
commit
b16c3e23d8
6 changed files with 371 additions and 14 deletions
7
FA.dev
Normal file
7
FA.dev
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
0
|
||||||
|
|
@ -2,9 +2,12 @@ echo START 0
|
||||||
start .LDCH txt
|
start .LDCH txt
|
||||||
.JSUB char
|
.JSUB char
|
||||||
.JSUB nl
|
.JSUB nl
|
||||||
LDA #txt
|
.LDA #txt
|
||||||
JSUB string
|
.JSUB string
|
||||||
JSUB nl
|
.JSUB nl
|
||||||
|
|
||||||
|
LDCH #12
|
||||||
|
JSUB num
|
||||||
|
|
||||||
halt J halt
|
halt J halt
|
||||||
|
|
||||||
|
|
@ -45,19 +48,63 @@ nl STB regB
|
||||||
string STA regA
|
string STA regA
|
||||||
STB regB
|
STB regB
|
||||||
STT regT
|
STT regT
|
||||||
STL regL
|
.STL regL
|
||||||
STS regS .shranimo registre
|
STS regS .shranimo registre
|
||||||
|
|
||||||
loop LDB #1
|
loop LDB #1
|
||||||
|
CLEAR A .da lahko comparamo z 0
|
||||||
LDCH @regA
|
LDCH @regA
|
||||||
COMP #0
|
COMP #0
|
||||||
JSUB char
|
WD #1
|
||||||
.add +1 to regA
|
.add +1 to regA
|
||||||
LDA regA
|
LDA regA
|
||||||
ADD #1
|
ADD #1
|
||||||
STA regA
|
STA regA
|
||||||
JGT loop
|
JGT loop
|
||||||
|
|
||||||
|
LDA regA .obnovimo registre
|
||||||
|
LDB regB
|
||||||
|
LDT regT
|
||||||
|
.LDL regL
|
||||||
|
LDS regS
|
||||||
|
|
||||||
|
RSUB
|
||||||
|
.izpiše število zapisano v A na std izhod
|
||||||
|
num STA regA
|
||||||
|
STB regB
|
||||||
|
STT regT
|
||||||
|
STL regL
|
||||||
|
STS regS .shranimo registre
|
||||||
|
|
||||||
|
LDX #4 .X steje stevke, 4 je zadnji index arraya velikosti 5
|
||||||
|
LDS #10 .za množenje/deljenje
|
||||||
|
LDT #0x30 .za pretvorbo v ascii
|
||||||
|
|
||||||
|
loop2 RMO A, B
|
||||||
|
DIVR S, B .B = B/10
|
||||||
|
MULR S, B .B= B*10
|
||||||
|
SUBR B, A .A = ostanek
|
||||||
|
ADDR T, A .pretvorimo A v ascii
|
||||||
|
STCH digs, X .shranimo ascii ostanek
|
||||||
|
|
||||||
|
.zmanjšamo X in primerjamo z #5
|
||||||
|
RMO X, A
|
||||||
|
SUB #1
|
||||||
|
RMO A, X
|
||||||
|
LDA #0
|
||||||
|
COMPR X, A
|
||||||
|
|
||||||
|
RMO B, A .premaknemo kar je še potrebno izračunati v A
|
||||||
|
DIVR S, A .A je sedaj naslednja števka
|
||||||
|
|
||||||
|
JEQ loop2
|
||||||
|
JGT loop2
|
||||||
|
|
||||||
|
.kličemo string za izpis
|
||||||
|
LDA #digs
|
||||||
|
JSUB string
|
||||||
|
JSUB nl
|
||||||
|
|
||||||
LDA regA .obnovimo registre
|
LDA regA .obnovimo registre
|
||||||
LDB regB
|
LDB regB
|
||||||
LDT regT
|
LDT regT
|
||||||
|
|
@ -66,12 +113,14 @@ loop LDB #1
|
||||||
|
|
||||||
RSUB
|
RSUB
|
||||||
|
|
||||||
|
|
||||||
|
.digits za num
|
||||||
|
digs RESB 5 .0 bo prazna za lazje izpisovanje
|
||||||
|
BYTE 0 .konec števke
|
||||||
|
|
||||||
.txt
|
.txt
|
||||||
txt BYTE C'hi'
|
txt BYTE C'hi'
|
||||||
BYTE 0
|
BYTE 0
|
||||||
.parametri
|
|
||||||
param1 RESB 1
|
|
||||||
param2 RESB 2
|
|
||||||
|
|
||||||
.constante
|
.constante
|
||||||
newline BYTE 0x0D
|
newline BYTE 0x0D
|
||||||
|
|
|
||||||
14
ass1/fac.asm
14
ass1/fac.asm
|
|
@ -1,11 +1,13 @@
|
||||||
prog START 0
|
prog START 0
|
||||||
JSUB sinit
|
zacetek CLEAR X
|
||||||
LDA #5
|
loop RD #0xFA
|
||||||
|
COMP #0
|
||||||
|
JEQ halt
|
||||||
JSUB fact
|
JSUB fact
|
||||||
|
WD #1
|
||||||
|
J loop
|
||||||
|
|
||||||
|
halt J halt
|
||||||
|
|
||||||
halt J halt
|
|
||||||
|
|
||||||
.fakulteta
|
.fakulteta
|
||||||
fact COMP #1
|
fact COMP #1
|
||||||
|
|
|
||||||
66
ass1/fact.asm
Normal file
66
ass1/fact.asm
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
prog START 0
|
||||||
|
JSUB sinit
|
||||||
|
LDA #5
|
||||||
|
JSUB fact
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
halt J halt
|
||||||
|
|
||||||
|
.fakulteta
|
||||||
|
fact COMP #1
|
||||||
|
JGT rec
|
||||||
|
LDA #1 .base case
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
rec STL @stkp
|
||||||
|
JSUB spush
|
||||||
|
STA @stkp
|
||||||
|
JSUB spush
|
||||||
|
STB @stkp
|
||||||
|
JSUB spush
|
||||||
|
|
||||||
|
RMO A, B .shrani n v B
|
||||||
|
SUB #1 .n-1
|
||||||
|
JSUB fact .fact(n-1)
|
||||||
|
MULR B, A .n * fact(n-1)
|
||||||
|
|
||||||
|
JSUB spop
|
||||||
|
LDB @stkp
|
||||||
|
JSUB spop
|
||||||
|
.LDA @stkp da ne povozimo odgovora?
|
||||||
|
JSUB spop
|
||||||
|
LDL @stkp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
|
||||||
|
.rutine za sklad
|
||||||
|
sinit STA stkA
|
||||||
|
LDA #stkRESW .inicializiraj stkp
|
||||||
|
STA stkp
|
||||||
|
LDA stkA
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
spush STA stkA
|
||||||
|
LDA stkp .poveca stkp za 3
|
||||||
|
ADD #3
|
||||||
|
STA stkp
|
||||||
|
LDA stkA
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
spop STA stkA
|
||||||
|
LDA stkp .zmanjsa stkp za 3
|
||||||
|
SUB #3
|
||||||
|
STA stkp
|
||||||
|
LDA stkA
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
.podatki za sklad
|
||||||
|
stkp WORD 0
|
||||||
|
stkA WORD 0
|
||||||
|
stkRESW RESW 1000
|
||||||
|
|
||||||
|
END prog
|
||||||
233
ass1/rec.asm
Normal file
233
ass1/rec.asm
Normal file
|
|
@ -0,0 +1,233 @@
|
||||||
|
prog START 0
|
||||||
|
zacetek JSUB sinit .inicializiramo sklad
|
||||||
|
.beremo iz 0xFA, dokler ne preberemo 0
|
||||||
|
loop3 CLEAR A
|
||||||
|
JSUB rdNum
|
||||||
|
COMP #0
|
||||||
|
JEQ halt
|
||||||
|
|
||||||
|
|
||||||
|
JSUB fact
|
||||||
|
JSUB num
|
||||||
|
J loop3
|
||||||
|
|
||||||
|
halt J halt
|
||||||
|
|
||||||
|
.beri število v A dokler ne naletiš na newline in jo pretvori v int
|
||||||
|
rdNum STL @stkp
|
||||||
|
JSUB spush
|
||||||
|
STA @stkp
|
||||||
|
JSUB spush
|
||||||
|
STB @stkp
|
||||||
|
JSUB spush
|
||||||
|
|
||||||
|
CLEAR A
|
||||||
|
CLEAR B .v B bomo shranili prebran rezultat
|
||||||
|
LDS #10 .za množenje
|
||||||
|
loop4 RD #0xFA
|
||||||
|
COMP #0xD .beremo newline
|
||||||
|
JEQ nwl
|
||||||
|
.else
|
||||||
|
MULR S, B
|
||||||
|
SUB #0x30 .pretvorimo v int
|
||||||
|
ADDR A, B
|
||||||
|
J loop4
|
||||||
|
|
||||||
|
nwl RD #0xFA .prebre še 0x0A
|
||||||
|
CLEAR A
|
||||||
|
RMO B, A
|
||||||
|
|
||||||
|
JSUB spop
|
||||||
|
LDB @stkp
|
||||||
|
JSUB spop
|
||||||
|
.LDA @stkp da ne povozimo odgovora?
|
||||||
|
JSUB spop
|
||||||
|
LDL @stkp
|
||||||
|
|
||||||
|
RSUB
|
||||||
|
.fakulteta
|
||||||
|
fact COMP #1
|
||||||
|
JGT rec
|
||||||
|
LDA #1 .base case
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
rec STL @stkp
|
||||||
|
JSUB spush
|
||||||
|
STA @stkp
|
||||||
|
JSUB spush
|
||||||
|
STB @stkp
|
||||||
|
JSUB spush
|
||||||
|
|
||||||
|
RMO A, B .shrani n v B
|
||||||
|
SUB #1 .n-1
|
||||||
|
JSUB fact .fact(n-1)
|
||||||
|
MULR B, A .n * fact(n-1)
|
||||||
|
|
||||||
|
JSUB spop
|
||||||
|
LDB @stkp
|
||||||
|
JSUB spop
|
||||||
|
.LDA @stkp da ne povozimo odgovora?
|
||||||
|
JSUB spop
|
||||||
|
LDL @stkp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
|
||||||
|
.rutine za sklad
|
||||||
|
.inicializira kazalec na sklad
|
||||||
|
sinit STA stkA
|
||||||
|
LDA #stkRESW .inicializiraj stkp
|
||||||
|
STA stkp
|
||||||
|
LDA stkA
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
.pusha na sklad, pred klicem te subrutine shrani na sklad kar želiš
|
||||||
|
spush STA stkA
|
||||||
|
LDA stkp .poveca stkp za 3
|
||||||
|
ADD #3
|
||||||
|
STA stkp
|
||||||
|
LDA stkA
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
.popa iz sklada, po koncu te subrutine iz sklada beri kar želš
|
||||||
|
spop STA stkA
|
||||||
|
LDA stkp .zmanjsa stkp za 3
|
||||||
|
SUB #3
|
||||||
|
STA stkp
|
||||||
|
LDA stkA
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
|
||||||
|
.nl
|
||||||
|
nl STL @stkp
|
||||||
|
JSUB spush
|
||||||
|
STB @stkp .shranimo registre
|
||||||
|
JSUB spush
|
||||||
|
STT @stkp
|
||||||
|
JSUB spush
|
||||||
|
STS @stkp
|
||||||
|
JSUB spush
|
||||||
|
|
||||||
|
|
||||||
|
LDCH newline
|
||||||
|
WD #1
|
||||||
|
LDX #1
|
||||||
|
LDCH newline, X
|
||||||
|
WD #1
|
||||||
|
|
||||||
|
.obnovimo registre
|
||||||
|
JSUB spop
|
||||||
|
LDS @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDT @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDB @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDL @stkp
|
||||||
|
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
.string
|
||||||
|
string STL @stkp
|
||||||
|
JSUB spush
|
||||||
|
STB @stkp .shranimo registre
|
||||||
|
JSUB spush
|
||||||
|
STT @stkp
|
||||||
|
JSUB spush
|
||||||
|
STS @stkp
|
||||||
|
JSUB spush
|
||||||
|
STA regA
|
||||||
|
|
||||||
|
loop LDB #1
|
||||||
|
CLEAR A .da lahko comparamo z 0
|
||||||
|
LDCH @regA
|
||||||
|
COMP #0
|
||||||
|
WD #1
|
||||||
|
.add +1 to regA
|
||||||
|
LDA regA
|
||||||
|
ADD #1
|
||||||
|
STA regA
|
||||||
|
JGT loop
|
||||||
|
|
||||||
|
LDA regA .obnovimo registre
|
||||||
|
JSUB spop
|
||||||
|
LDS @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDT @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDB @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDL @stkp
|
||||||
|
|
||||||
|
RSUB
|
||||||
|
.izpiše število zapisano v A na std izhod
|
||||||
|
num STL @stkp
|
||||||
|
JSUB spush
|
||||||
|
STB @stkp .shranimo registre
|
||||||
|
JSUB spush
|
||||||
|
STT @stkp
|
||||||
|
JSUB spush
|
||||||
|
STS @stkp
|
||||||
|
JSUB spush
|
||||||
|
|
||||||
|
LDX #4 .X steje stevke, 4 je zadnji index arraya velikosti 5
|
||||||
|
LDS #10 .za množenje/deljenje
|
||||||
|
LDT #0x30 .za pretvorbo v ascii
|
||||||
|
|
||||||
|
|
||||||
|
loop2 RMO A, B
|
||||||
|
DIVR S, B .B = B/10
|
||||||
|
MULR S, B .B= B*10
|
||||||
|
SUBR B, A .A = ostanek
|
||||||
|
ADDR T, A .pretvorimo A v ascii
|
||||||
|
STCH digs, X .shranimo ascii ostanek
|
||||||
|
|
||||||
|
.zmanjšamo X in primerjamo z #5
|
||||||
|
RMO X, A
|
||||||
|
SUB #1
|
||||||
|
RMO A, X
|
||||||
|
LDA #0
|
||||||
|
COMPR X, A
|
||||||
|
|
||||||
|
RMO B, A .premaknemo kar je še potrebno izračunati v A
|
||||||
|
DIVR S, A .A je sedaj naslednja števka
|
||||||
|
|
||||||
|
JEQ loop2
|
||||||
|
JGT loop2
|
||||||
|
|
||||||
|
.kličemo string za izpis
|
||||||
|
LDA #digs
|
||||||
|
JSUB string
|
||||||
|
JSUB nl
|
||||||
|
|
||||||
|
JSUB spop
|
||||||
|
LDS @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDT @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDB @stkp
|
||||||
|
JSUB spop
|
||||||
|
LDL @stkp
|
||||||
|
|
||||||
|
RSUB
|
||||||
|
|
||||||
|
|
||||||
|
.digits za num
|
||||||
|
digs RESB 5 .0 bo prazna za lazje izpisovanje
|
||||||
|
BYTE 0 .konec števke
|
||||||
|
|
||||||
|
.constante
|
||||||
|
newline BYTE 0x0D
|
||||||
|
BYTE 0x0A
|
||||||
|
|
||||||
|
.shramba za string
|
||||||
|
regA WORD 0
|
||||||
|
|
||||||
|
.podatki za sklad
|
||||||
|
stkp WORD 0
|
||||||
|
stkA WORD 0
|
||||||
|
stkRESW RESW 1000
|
||||||
|
|
||||||
|
END prog
|
||||||
Loading…
Add table
Add a link
Reference in a new issue