implement prefix calculator
This commit is contained in:
parent
09178c6d94
commit
76257daea8
3 changed files with 226 additions and 2 deletions
193
calculator/calc.asm
Normal file
193
calculator/calc.asm
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
calc START 0
|
||||
nextln LDA #stack
|
||||
STA sp
|
||||
CLEAR A
|
||||
STA ldigit
|
||||
readlp TD stdin
|
||||
JEQ readlp
|
||||
CLEAR A
|
||||
RD stdin
|
||||
COMP #0
|
||||
JEQ halt
|
||||
COMP white .whitespace (parse number?)
|
||||
JEQ newexp
|
||||
COMP opn . (
|
||||
JEQ newexp
|
||||
COMP cls . )
|
||||
JEQ endexp
|
||||
COMP plus . +
|
||||
JEQ pplus
|
||||
COMP minus . -
|
||||
JEQ pminus
|
||||
COMP times . *
|
||||
JEQ ptimes
|
||||
COMP slash . /
|
||||
JEQ pslash
|
||||
COMP lnfeed . \n
|
||||
JEQ prtres
|
||||
J pdigit
|
||||
|
||||
|
||||
newexp CLEAR A
|
||||
STA ldigit
|
||||
J readlp
|
||||
endexp CLEAR A
|
||||
STA ldigit
|
||||
LDA sp
|
||||
SUB #3
|
||||
STA sp
|
||||
LDS @sp
|
||||
SUB #3
|
||||
STA sp
|
||||
LDT @sp
|
||||
SUB #3
|
||||
STA sp
|
||||
LDA @sp
|
||||
COMP plus . +
|
||||
JEQ xplus
|
||||
COMP minus . -
|
||||
JEQ xminus
|
||||
COMP times . *
|
||||
JEQ xtimes
|
||||
COMP slash . /
|
||||
JEQ xslash
|
||||
pres STT @sp
|
||||
LDA sp
|
||||
ADD #3
|
||||
STA sp
|
||||
J readlp
|
||||
|
||||
pplus CLEAR A
|
||||
STA ldigit
|
||||
LDA plus
|
||||
STA @sp
|
||||
LDA sp
|
||||
ADD #3
|
||||
STA sp
|
||||
J readlp
|
||||
pminus CLEAR A
|
||||
STA ldigit
|
||||
LDA minus
|
||||
STA @sp
|
||||
LDA sp
|
||||
ADD #3
|
||||
STA sp
|
||||
J readlp
|
||||
ptimes CLEAR A
|
||||
STA ldigit
|
||||
LDA times
|
||||
STA @sp
|
||||
LDA sp
|
||||
ADD #3
|
||||
STA sp
|
||||
J readlp
|
||||
pslash CLEAR A
|
||||
STA ldigit
|
||||
LDA slash
|
||||
STA @sp
|
||||
LDA sp
|
||||
ADD #3
|
||||
STA sp
|
||||
J readlp
|
||||
pdigit SUB zero
|
||||
RMO A,B
|
||||
LDA ldigit
|
||||
COMP #1
|
||||
JEQ pndgit
|
||||
pcdgit RMO B,A
|
||||
STA @sp
|
||||
LDA sp
|
||||
ADD #3
|
||||
STA sp
|
||||
LDA #1
|
||||
STA ldigit
|
||||
J readlp
|
||||
pndgit LDA sp
|
||||
SUB #3
|
||||
STA sp
|
||||
LDA @sp
|
||||
MUL #10
|
||||
ADDR A,B
|
||||
J pcdgit
|
||||
|
||||
xplus ADDR S,T
|
||||
J pres
|
||||
xminus SUBR S,T
|
||||
J pres
|
||||
xtimes MULR S,T
|
||||
J pres
|
||||
xslash DIVR S,T
|
||||
J pres
|
||||
|
||||
prtres LDB #base
|
||||
STB bp
|
||||
LDA sp
|
||||
SUB #3
|
||||
STA sp
|
||||
LDA @sp
|
||||
AND negsgn
|
||||
COMP negsgn
|
||||
JEQ prtneg
|
||||
prtnxt LDA @bp
|
||||
COMP #0
|
||||
JEQ prtext
|
||||
LDA @sp
|
||||
DIV @bp
|
||||
ADD zero
|
||||
WD stdout
|
||||
SUB zero
|
||||
LDB @bp
|
||||
MULR B,A
|
||||
LDB @sp
|
||||
SUBR A,B
|
||||
STB @sp
|
||||
LDA bp
|
||||
ADD #3
|
||||
STA bp
|
||||
J prtnxt
|
||||
prtext
|
||||
LDA lnfeed
|
||||
WD stdout
|
||||
J nextln
|
||||
prtneg
|
||||
LDA minus
|
||||
WD stdout
|
||||
LDA #0
|
||||
SUB #1
|
||||
LDS @sp
|
||||
MULR S,A
|
||||
STA @sp
|
||||
J prtnxt
|
||||
|
||||
|
||||
|
||||
halt J halt
|
||||
|
||||
stdin BYTE 0x00
|
||||
stdout BYTE 0x01
|
||||
zero WORD 48
|
||||
lnfeed WORD 10
|
||||
white WORD 32
|
||||
opn WORD 40
|
||||
cls WORD 41
|
||||
plus WORD 43
|
||||
minus WORD 45
|
||||
times WORD 42
|
||||
slash WORD 47
|
||||
|
||||
ldigit WORD 0
|
||||
negsgn WORD 0x800000
|
||||
|
||||
bp RESW 1
|
||||
base WORD 10000000
|
||||
WORD 1000000
|
||||
WORD 100000
|
||||
WORD 10000
|
||||
WORD 1000
|
||||
WORD 100
|
||||
WORD 10
|
||||
WORD 1
|
||||
WORD 0
|
||||
|
||||
sp RESW 1
|
||||
stack RESW 256
|
||||
Loading…
Add table
Add a link
Reference in a new issue