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
|