MiniUnix/usr/source/as/as27.s
/
/
/ a7 -- pdp-11 assembler
expres:
clr xsymbol
expres1:
mov r5,-(sp)
mov $'+,-(sp)
clr r2
mov $1,r3
br 1f
advanc:
jsr pc,readop
1:
mov r4,r0
jsr r5,betwen; 0; 177
br .+4
br 7f
movb (r4),r0
tst r0
bne 1f
tstb passno
beq 1f
jsr r5,error; 'u
1:
cmp r0,$40
bne 1f
mov r4,xsymbol
clr r1
br oprand
1:
mov 2(r4),r1
br oprand
7:
cmp r4,$141
blo 1f
asl r4
mov curfb-[2*141](r4),r0
mov 2(r0),r1
movb (r0),r0
br oprand
1:
mov $esw1,r1
1:
cmp (r1)+,r4
beq 1f
tst (r1)+
bne 1b
tst (sp)+
mov (sp)+,r5
rts pc
1:
jmp *(r1)
esw1:
'+; binop
'-; binop
'*; binop
'/; binop
'&; binop
037; binop
035; binop
036; binop
'%; binop
'[; brack
'^; binop
1; exnum
2; exnum1
'!; binop
200; 0
binop:
cmpb (sp),$'+
beq 1f
jsr pc,errore
1:
movb r4,(sp)
br advanc
exnum1:
mov numval,r1
br 1f
exnum:
jsr pc,getw
mov r4,r1
1:
mov $1,r0
br oprand
brack:
mov r2,-(sp)
mov r3,-(sp)
jsr pc,readop
jsr pc,expres1
cmp r4,$']
beq 1f
jsr r5,error; ']
1:
mov r3,r0
mov r2,r1
mov (sp)+,r3
mov (sp)+,r2
oprand:
mov $exsw2,r5
1:
cmp (sp),(r5)+
beq 1f
tst (r5)+
bne 1b
br eoprnd
1:
jmp *(r5)
exsw2:
'+; exadd
'-; exsub
'*; exmul
'/; exdiv
037; exor
'&; exand
035;exlsh
036;exrsh
'%; exmod
'^; excmbin
'!; exnot
200; 0
excmbin:
mov r0,r3
br eoprnd
exrsh:
neg r1
beq exlsh
inc r1
clc
ror r2
exlsh:
jsr r5,combin; relte2
als r1,r2
br eoprnd
exmod:
jsr r5,combin; relte2
mov r3,r0
mov r2,r3
clr r2
dvd r1,r2
mov r3,r2
mov r0,r3
br eoprnd
exadd:
jsr r5,combin; reltp2
add r1,r2
br eoprnd
exsub:
jsr r5,combin; reltm2
sub r1,r2
br eoprnd
exand:
jsr r5,combin; relte2
com r1
bic r1,r2
br eoprnd
exor:
jsr r5,combin; relte2
bis r1,r2
br eoprnd
exmul:
jsr r5,combin; relte2
mpy r2,r1
mov r1,r2
br eoprnd
exdiv:
jsr r5,combin; relte2
mov r3,r0
mov r2,r3
clr r2
dvd r1,r2
mov r0,r3
br eoprnd
exnot:
jsr r5,combin; relte2
com r1
add r1,r2
br eoprnd
eoprnd:
mov $'+,(sp)
jmp advanc
combin:
tstb passno
bne combin1
mov r0,-(sp)
bis r3,(sp)
bic $!40,(sp)
bic $!37,r0
bic $!37,r3
cmp r0,r3
ble 1f
mov r0,-(sp)
mov r3,r0
mov (sp)+,r3
1:
tst r0
beq 1f
cmp (r5)+,$reltm2
bne 2f
cmp r0,r3
bne 2f
mov $1,r3
br 2f
1:
tst (r5)+
clr r3
2:
bis (sp)+,r3
rts r5
combin1:
mov r1,-(sp)
clr maxtyp
jsr pc,maprel
mov r0,r1
mpy $6,r1
mov r3,r0
jsr pc,maprel
add (r5)+,r0
add r1,r0
movb (r0),r3
bpl 1f
cmp r3,$-1
beq 2f
jsr r5,error; 'r
2:
mov maxtyp,r3
1:
mov (sp)+,r1
rts r5
maprel:
cmp r0,$40
bne 1f
mov $5,r0
rts pc
1:
bic $!37,r0
cmp r0,maxtyp
blos 1f
mov r0,maxtyp
1:
cmp r0,$5
blos 1f
mov $1,r0
1:
rts pc
X = -2
M = -1
reltp2:
.byte 0, 0, 0, 0, 0, 0
.byte 0, M, 2, 3, 4,40
.byte 0, 2, X, X, X, X
.byte 0, 3, X, X, X, X
.byte 0, 4, X, X, X, X
.byte 0,40, X, X, X, X
reltm2:
.byte 0, 0, 0, 0, 0, 0
.byte 0, M, 2, 3, 4,40
.byte 0, X, 1, X, X, X
.byte 0, X, X, 1, X, X
.byte 0, X, X, X, 1, X
.byte 0, X, X, X, X, X
relte2:
.byte 0, 0, 0, 0, 0, 0
.byte 0, M, X, X, X, X
.byte 0, X, X, X, X, X
.byte 0, X, X, X, X, X
.byte 0, X, X, X, X, X
.byte 0, X, X, X, X, X