spo/ass1/rec.asm
2025-11-03 19:17:22 +01:00

96 lines
No EOL
1.7 KiB
NASM

REC START 0
FIRST LDT #10
RD DEVICE
COMP #13
JEQ SKIP .read \r
AND MASK1
COMP #0
JEQ END
SUB #48 .convert to int from char
ADDR A, B
MULR T, B
J FIRST .read next digit
SKIP RD DEVICE .read \n
CLEAR A
ADD #1
RMO A, X
RMO B, A
DIV #10
COMP #0
JEQ END
JSUB FAK
RMO X, A
JSUB PRINT
CLEAR B
J FIRST
END CLEAR A
ADD #48
WD STDOUT
HALT J HALT
FAK RMO A, T
RMO L, A
JSUB PUSH .push return address
RMO T, A
COMP #1
JEQ RET
MULR A, X
SUB #1
JSUB FAK
RET RMO A, T
JSUB POP .get return address
RMO A, L
RMO T, A
RSUB
PUSH STA @S_PTR
LDA S_PTR
ADD #3
STA S_PTR
RSUB
POP LDA S_PTR
SUB #3
STA S_PTR
LDA @S_PTR
RSUB
PRINT RMO A, B
LDS #0
LOOP1 AND MASK
SHIFTL A, 4
COMP #10
JLT NUMBER
ADD #55
J SKIP1
NUMBER ADD #48
SKIP1 WD STDOUT
SHIFTL B, 4
RMO S, A
COMP #5
ADD #1
RMO A, S
RMO B, A
JLT LOOP1
LDA #10
WD STDOUT
RSUB
MASK1 WORD X'0000FF'
MASK WORD X'F00000'
STDOUT BYTE X'01'
DEVICE BYTE X'FA'
S_PTR WORD X'001000'
END FIRST