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
|
||||
.JSUB char
|
||||
.JSUB nl
|
||||
LDA #txt
|
||||
JSUB string
|
||||
JSUB nl
|
||||
.LDA #txt
|
||||
.JSUB string
|
||||
.JSUB nl
|
||||
|
||||
LDCH #12
|
||||
JSUB num
|
||||
|
||||
halt J halt
|
||||
|
||||
|
|
@ -45,19 +48,63 @@ nl STB regB
|
|||
string STA regA
|
||||
STB regB
|
||||
STT regT
|
||||
STL regL
|
||||
.STL regL
|
||||
STS regS .shranimo registre
|
||||
|
||||
loop LDB #1
|
||||
CLEAR A .da lahko comparamo z 0
|
||||
LDCH @regA
|
||||
COMP #0
|
||||
JSUB char
|
||||
WD #1
|
||||
.add +1 to regA
|
||||
LDA regA
|
||||
ADD #1
|
||||
STA regA
|
||||
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
|
||||
LDB regB
|
||||
LDT regT
|
||||
|
|
@ -66,12 +113,14 @@ loop LDB #1
|
|||
|
||||
RSUB
|
||||
|
||||
|
||||
.digits za num
|
||||
digs RESB 5 .0 bo prazna za lazje izpisovanje
|
||||
BYTE 0 .konec števke
|
||||
|
||||
.txt
|
||||
txt BYTE C'hi'
|
||||
BYTE 0
|
||||
.parametri
|
||||
param1 RESB 1
|
||||
param2 RESB 2
|
||||
|
||||
.constante
|
||||
newline BYTE 0x0D
|
||||
|
|
|
|||
10
ass1/fac.asm
10
ass1/fac.asm
|
|
@ -1,9 +1,11 @@
|
|||
prog START 0
|
||||
JSUB sinit
|
||||
LDA #5
|
||||
zacetek CLEAR X
|
||||
loop RD #0xFA
|
||||
COMP #0
|
||||
JEQ halt
|
||||
JSUB fact
|
||||
|
||||
|
||||
WD #1
|
||||
J loop
|
||||
|
||||
halt J halt
|
||||
|
||||
|
|
|
|||
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