42 lines
		
	
	
	
		
			497 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			42 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
 |