working on sicxe

This commit is contained in:
Jaka Furlan 2025-11-29 16:12:58 +01:00
parent 1b990e190c
commit d836b3955d
79 changed files with 2011 additions and 917 deletions

View file

@ -1,44 +1,44 @@
arith START 0
start LDA x
ADD y
STA sum .shrani vsoto
LDA x
SUB y
STA diff .shrani razliko
LDA x
MUL y
STA prod .sharni produkt
LDA x
DIV y
STA quot .shrani kvocient
LDA y
MUL quot
STA z
LDA x
SUB z
STA mod .shrani modulo
halt J halt
END start
.podatki
x WORD 20
y WORD 3
.rezultati
sum RESW 1
diff RESW 1
prod RESW 1
quot RESW 1
mod RESW 1
.za modulo
z RESW 1
arith START 0
start LDA x
ADD y
STA sum .shrani vsoto
LDA x
SUB y
STA diff .shrani razliko
LDA x
MUL y
STA prod .sharni produkt
LDA x
DIV y
STA quot .shrani kvocient
LDA y
MUL quot
STA z
LDA x
SUB z
STA mod .shrani modulo
halt J halt
END start
.podatki
x WORD 20
y WORD 3
.rezultati
sum RESW 1
diff RESW 1
prod RESW 1
quot RESW 1
mod RESW 1
.za modulo
z RESW 1

View file

@ -1,46 +1,46 @@
arith START 0
start LDT x
LDS y
ADDR T, S .shrani vsoto
STS sum
SUBR T, S .resetiraj S nazaj na y
SUBR S, T
STT diff .shrani razliko
ADDR S, T .popravi T
MULR T, S
STS prod .sharni produkt
LDT x
LDS y
DIVR S, T
STT quot .shrani kvocient
LDT x
LDS y
LDB quot
MULR S, B
SUBR B, T
STT mod .shrani modulo
halt J halt
END start
.podatki
x WORD 20
y WORD 3
.rezultati
sum RESW 1
diff RESW 1
prod RESW 1
quot RESW 1
mod RESW 1
.za modulo
z RESW 1
arith START 0
start LDT x
LDS y
ADDR T, S .shrani vsoto
STS sum
SUBR T, S .resetiraj S nazaj na y
SUBR S, T
STT diff .shrani razliko
ADDR S, T .popravi T
MULR T, S
STS prod .sharni produkt
LDT x
LDS y
DIVR S, T
STT quot .shrani kvocient
LDT x
LDS y
LDB quot
MULR S, B
SUBR B, T
STT mod .shrani modulo
halt J halt
END start
.podatki
x WORD 20
y WORD 3
.rezultati
sum RESW 1
diff RESW 1
prod RESW 1
quot RESW 1
mod RESW 1
.za modulo
z RESW 1

View file

@ -1,7 +1,7 @@
cat START 0
.beri in pisi
loop RD #0
WD #1
J loop
cat START 0
.beri in pisi
loop RD #0
WD #1
J loop
END loop

View file

@ -1,137 +1,137 @@
echo START 0
start .LDCH txt
.JSUB char
.JSUB nl
.LDA #txt
.JSUB string
.JSUB nl
LDCH #12
JSUB num
halt J halt
.char
char STB regB
STT regT
.STL regL
STS regS .shranimo registre
WD #1
.obnovimo registre
LDB regB
LDT regT
.LDL regL
LDS regS
RSUB
.nl
nl STB regB
STT regT
STS regS .shranimo registre
LDCH newline
WD #1
LDX #1
LDCH newline, X
WD #1
.obnovimo registre
LDB regB
LDT regT
LDS regS
RSUB
.string
string STA regA
STB regB
STT regT
.STL regL
STS regS .shranimo registre
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
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
LDL regL
LDS regS
RSUB
.digits za num
digs RESB 5 .0 bo prazna za lazje izpisovanje
BYTE 0 .konec števke
.txt
txt BYTE C'hi'
BYTE 0
.constante
newline BYTE 0x0D
BYTE 0x0A
.registri
regA RESW 1
regB RESW 1
regT RESW 1
regS RESW 1
regL RESW 1
echo START 0
start .LDCH txt
.JSUB char
.JSUB nl
.LDA #txt
.JSUB string
.JSUB nl
LDCH #12
JSUB num
halt J halt
.char
char STB regB
STT regT
.STL regL
STS regS .shranimo registre
WD #1
.obnovimo registre
LDB regB
LDT regT
.LDL regL
LDS regS
RSUB
.nl
nl STB regB
STT regT
STS regS .shranimo registre
LDCH newline
WD #1
LDX #1
LDCH newline, X
WD #1
.obnovimo registre
LDB regB
LDT regT
LDS regS
RSUB
.string
string STA regA
STB regB
STT regT
.STL regL
STS regS .shranimo registre
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
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
LDL regL
LDS regS
RSUB
.digits za num
digs RESB 5 .0 bo prazna za lazje izpisovanje
BYTE 0 .konec števke
.txt
txt BYTE C'hi'
BYTE 0
.constante
newline BYTE 0x0D
BYTE 0x0A
.registri
regA RESW 1
regB RESW 1
regT RESW 1
regS RESW 1
regL RESW 1
END start

View file

@ -1,68 +1,68 @@
prog START 0
zacetek CLEAR X
loop RD #0xFA
COMP #0
JEQ halt
JSUB fact
WD #1
J loop
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
prog START 0
zacetek CLEAR X
loop RD #0xFA
COMP #0
JEQ halt
JSUB fact
WD #1
J loop
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

View file

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

View file

@ -1,38 +1,38 @@
poly START 0
start LDT x4
LDS x
MULR S, T
LDA x3
ADDR T, A . do sedaj izračunano (1x + 2)
LDT x2
MULR S, A
ADDR T, A .do sedaj izračunano ((1x+2)x + 3)
LDT x1
MULR S, A
ADDR T, A .do sedaj izračunano (((1x+2)x + 3)x + 4)
LDT x0
MULR S, A
ADDR T, A .do sedaj izračunano (((1x+2)x + 3)x + 4)x + 5
STA rez
halt J halt
END start
.polinom
x4 WORD 1
x3 WORD 2
x2 WORD 3
x1 WORD 4
x0 WORD 5
.tocka
x WORD 2
.rezultat
poly START 0
start LDT x4
LDS x
MULR S, T
LDA x3
ADDR T, A . do sedaj izračunano (1x + 2)
LDT x2
MULR S, A
ADDR T, A .do sedaj izračunano ((1x+2)x + 3)
LDT x1
MULR S, A
ADDR T, A .do sedaj izračunano (((1x+2)x + 3)x + 4)
LDT x0
MULR S, A
ADDR T, A .do sedaj izračunano (((1x+2)x + 3)x + 4)x + 5
STA rez
halt J halt
END start
.polinom
x4 WORD 1
x3 WORD 2
x2 WORD 3
x1 WORD 4
x0 WORD 5
.tocka
x WORD 2
.rezultat
rez RESW 1

View file

@ -1,66 +1,66 @@
.program prebere iz spomina seznam števil dolžine len
.in jih uredi z insertion sortom
.pustimo prvi element paddan, da lažje rečunamo premike
prog START 0
LDX #6
loop LDB #len
COMPR X, B .i < len
JEQ halt .zaključi
LDA arr, X .A = arr[i]
RMO X, S .S <- i
LDT #3 .T <- 3
SUBR T, X .X <- j= i - 1
loop2 LDT #3
COMPR X, T .j >= 1
JLT insert .ko je j = 0 skoči
J next .skoči na preverjanje naslednjega pogoja
.shranimo S nazaj v X in ga zmanjšamo za ena
.nato skočimo nazaj v loop
exit2 RMO S, X .X <- i
LDT #3
ADDR T, X .X <- i + 1
J loop
next LDB arr, X
COMPR B, A .arr[j] > arr[i]
JGT swap
J insert .če pogoj ni izpolnjen
.sicer zamenjamo elementa
swap LDT #3
ADDR T, X .X <- j + 1
STB arr, X. arr[j+1] = arr[j]
LDT #6
SUBR T, X .x <- x-1
J loop2
insert LDT #3
ADDR T, X .j = j+1
STA arr, X .arr[j+1] = arr[i]
SUBR T, X .j = j
J exit2
halt J halt
arr WORD 0
WORD 5
WORD 3
WORD 8
WORD 1
WORD 4
WORD 7
WORD 2
WORD 9
arrEnd WORD 6
len EQU arrEnd - arr + 3
.program prebere iz spomina seznam števil dolžine len
.in jih uredi z insertion sortom
.pustimo prvi element paddan, da lažje rečunamo premike
prog START 0
LDX #6
loop LDB #len
COMPR X, B .i < len
JEQ halt .zaključi
LDA arr, X .A = arr[i]
RMO X, S .S <- i
LDT #3 .T <- 3
SUBR T, X .X <- j= i - 1
loop2 LDT #3
COMPR X, T .j >= 1
JLT insert .ko je j = 0 skoči
J next .skoči na preverjanje naslednjega pogoja
.shranimo S nazaj v X in ga zmanjšamo za ena
.nato skočimo nazaj v loop
exit2 RMO S, X .X <- i
LDT #3
ADDR T, X .X <- i + 1
J loop
next LDB arr, X
COMPR B, A .arr[j] > arr[i]
JGT swap
J insert .če pogoj ni izpolnjen
.sicer zamenjamo elementa
swap LDT #3
ADDR T, X .X <- j + 1
STB arr, X. arr[j+1] = arr[j]
LDT #6
SUBR T, X .x <- x-1
J loop2
insert LDT #3
ADDR T, X .j = j+1
STA arr, X .arr[j+1] = arr[i]
SUBR T, X .j = j
J exit2
halt J halt
arr WORD 0
WORD 5
WORD 3
WORD 8
WORD 1
WORD 4
WORD 7
WORD 2
WORD 9
arrEnd WORD 6
len EQU arrEnd - arr + 3
END prog

View file

@ -1,42 +1,42 @@
poly START 0
start LDA x0 .pristejemo x0 v A
LDB x
LDS x
LDT x1
MULR S, T
ADDR T, A .pristejemo x0 * x
LDT x2
MULR B, S .izracunamo x^2
MULR S, T
ADDR T, A
LDT x3
MULR B, S .izracunamo x^3
MULR S, T
ADDR T, A
LDT x4
MULR B, S .izracunamo x^4
MULR S, T
ADDR T, A
STA rez
halt J halt
END start
.polinom
x4 WORD 1
x3 WORD 2
x2 WORD 3
x1 WORD 4
x0 WORD 5
.tocka
x WORD 2
.rezultat
poly START 0
start LDA x0 .pristejemo x0 v A
LDB x
LDS x
LDT x1
MULR S, T
ADDR T, A .pristejemo x0 * x
LDT x2
MULR B, S .izracunamo x^2
MULR S, T
ADDR T, A
LDT x3
MULR B, S .izracunamo x^3
MULR S, T
ADDR T, A
LDT x4
MULR B, S .izracunamo x^4
MULR S, T
ADDR T, A
STA rez
halt J halt
END start
.polinom
x4 WORD 1
x3 WORD 2
x2 WORD 3
x1 WORD 4
x0 WORD 5
.tocka
x WORD 2
.rezultat
rez RESW 1

View file

@ -1,64 +1,64 @@
poly START 0
start LDA x
STA arg1
JSUB startSubrutine
LDA subRez
STA rez
halt J halt
END start
.subrutina za izračun tega polinoma v točki arg1
startSubrutine STA regA
STB regB
STT regT
STS regS .shranimo registre
LDA x0 .pristejemo x0 v A
LDX #3 .odmik v arrayu
LDS arg1
loop LDT x0, X .preberemo x_n
MULR S, T .izračunamo x_n * x^n
ADDR T, A .pristejemo v vsoto
LDT arg1
MULR T, S .zmožimo naslednjo potenco
LDT #3
ADDR T, X .povečamo odmik
LDT #13
COMPR T, X
JGT loop
STA subRez .shranimo rez
LDA regA .obnovimo registre
LDB regB
LDT regT
LDS regS
RSUB
.polinom
x0 WORD 5
WORD 4
WORD 3
WORD 2
WORD 1
.tocka
x WORD 2
.rezultat
rez RESW 1
.parameter subrutine
arg1 RESW 1
.rezultat subrutine
subRez RESW 1
.registri
regA RESW 1
regB RESW 1
regT RESW 1
regS RESW 1
poly START 0
start LDA x
STA arg1
JSUB startSubrutine
LDA subRez
STA rez
halt J halt
END start
.subrutina za izračun tega polinoma v točki arg1
startSubrutine STA regA
STB regB
STT regT
STS regS .shranimo registre
LDA x0 .pristejemo x0 v A
LDX #3 .odmik v arrayu
LDS arg1
loop LDT x0, X .preberemo x_n
MULR S, T .izračunamo x_n * x^n
ADDR T, A .pristejemo v vsoto
LDT arg1
MULR T, S .zmožimo naslednjo potenco
LDT #3
ADDR T, X .povečamo odmik
LDT #13
COMPR T, X
JGT loop
STA subRez .shranimo rez
LDA regA .obnovimo registre
LDB regB
LDT regT
LDS regS
RSUB
.polinom
x0 WORD 5
WORD 4
WORD 3
WORD 2
WORD 1
.tocka
x WORD 2
.rezultat
rez RESW 1
.parameter subrutine
arg1 RESW 1
.rezultat subrutine
subRez RESW 1
.registri
regA RESW 1
regB RESW 1
regT RESW 1
regS RESW 1

View file

@ -1,17 +1,17 @@
print START 0
zacetek CLEAR X
loop LDCH txt, X
WD #0xAA
TIX #len .#len, ker je len EQU in ne dejanska lokacija v spominu!!!!!
JLT loop
halt J halt
.constants
txt BYTE C'SIC/XE'
BYTE 0
txtend EQU *
len EQU txtend-txt .definicija konstante EQU, ki ni shranjena v pomnilniku, zato ko jo želimo uporabiti
.rabimo #len
print START 0
zacetek CLEAR X
loop LDCH txt, X
WD #0xAA
TIX #len .#len, ker je len EQU in ne dejanska lokacija v spominu!!!!!
JLT loop
halt J halt
.constants
txt BYTE C'SIC/XE'
BYTE 0
txtend EQU *
len EQU txtend-txt .definicija konstante EQU, ki ni shranjena v pomnilniku, zato ko jo želimo uporabiti
.rabimo #len
END zacetek

View file

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

View file

@ -1,38 +1,38 @@
scr START 0
LDCH txt
+STCH screen
LDX #3
+STCH screen, X
JSUB scrcfill
JSUB scrclear
halt J halt
scrclear LDCH #0
LDS #scrlen
LDX #0
loop +STCH screen, X
TIXR S
JLT loop
RSUB
scrcfill
LDS #scrlen
LDX #0
loop2 +STCH screen, X
TIXR S
JLT loop2
RSUB
txt BYTE C'hi'
screen EQU 0x0B800
scrcols EQU 80
scrrows EQU 25
scrlen EQU 2000
scr START 0
LDCH txt
+STCH screen
LDX #3
+STCH screen, X
JSUB scrcfill
JSUB scrclear
halt J halt
scrclear LDCH #0
LDS #scrlen
LDX #0
loop +STCH screen, X
TIXR S
JLT loop
RSUB
scrcfill
LDS #scrlen
LDX #0
loop2 +STCH screen, X
TIXR S
JLT loop2
RSUB
txt BYTE C'hi'
screen EQU 0x0B800
scrcols EQU 80
scrrows EQU 25
scrlen EQU 2000
END scr

View file

@ -1,33 +1,33 @@
prog START 0
JSUB sinit
LDT #4
STT @stkp
JSUB spush
JSUB spop
CLEAR T
LDT @stkp
halt J halt
.rutine za sklad
sinit LDA #stkRESW .inicializiraj stkp
STA stkp
RSUB
spush LDA stkp .poveca stkp za 3
ADD #3
STA stkp
RSUB
spop LDA stkp .zmanjsa stkp za 3
SUB #3
STA stkp
RSUB
.podatki za sklad
stkp WORD 0
stkRESW WORD 1000
END prog
prog START 0
JSUB sinit
LDT #4
STT @stkp
JSUB spush
JSUB spop
CLEAR T
LDT @stkp
halt J halt
.rutine za sklad
sinit LDA #stkRESW .inicializiraj stkp
STA stkp
RSUB
spush LDA stkp .poveca stkp za 3
ADD #3
STA stkp
RSUB
spop LDA stkp .zmanjsa stkp za 3
SUB #3
STA stkp
RSUB
.podatki za sklad
stkp WORD 0
stkRESW WORD 1000
END prog