43 lines
497 B
ArmAsm
43 lines
497 B
ArmAsm
.define .dvi
|
|
|
|
! signed long divide
|
|
.text
|
|
.dvi:
|
|
movem.l d0/d4,.savdvi
|
|
move.l (sp)+,.retdvi
|
|
move.l (sp)+,d0
|
|
move.l (sp)+,d1
|
|
clr.l d4
|
|
tst.l d0 ! divisor
|
|
bpl 1f
|
|
neg.l d0
|
|
not d4
|
|
1:
|
|
tst.l d1 ! dividend
|
|
bpl 2f
|
|
neg.l d1
|
|
not d4
|
|
swap d4
|
|
not d4
|
|
swap d4
|
|
2:
|
|
move.l d1,-(sp)
|
|
move.l d0,-(sp)
|
|
jsr .dvu
|
|
tst d4
|
|
beq 5f
|
|
neg.l d1 ! quotient
|
|
5:
|
|
tst.l d4
|
|
bpl 6f
|
|
neg.l d2 ! remainder
|
|
6:
|
|
movem.l .savdvi,d0/d4
|
|
move.l .retdvi,-(sp)
|
|
rts
|
|
.data
|
|
.savdvi: .space 12
|
|
.retdvi: .long 0
|
|
.text
|
|
.align 2
|