SPO_JakaFurlan/ass1/echo.asm
2025-11-08 17:05:13 +01:00

137 lines
No EOL
1.8 KiB
NASM

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