44 lines
		
	
	
	
		
			493 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			493 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .dvi
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
 | 
						|
 ! signed long divide
 | 
						|
	.sect .text
 | 
						|
.dvi:
 | 
						|
	move.l	4(sp),d2
 | 
						|
	move.l	8(sp),d1
 | 
						|
	move.l	d4,-(sp)
 | 
						|
	clr.l	d4
 | 
						|
	tst.l	d2	! divisor
 | 
						|
	bpl	1f
 | 
						|
	neg.l	d2
 | 
						|
	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	d2,-(sp)
 | 
						|
	jsr	.dvu
 | 
						|
	tst	d4
 | 
						|
	beq	5f
 | 
						|
	neg.l	d1	! quotient
 | 
						|
5:
 | 
						|
	tst.l	d4
 | 
						|
	bpl	6f
 | 
						|
	neg.l	d0	! remainder
 | 
						|
6:
 | 
						|
	move.l	(sp)+,d4
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	add.l	#8,sp
 | 
						|
	move.l	a0,-(sp)
 | 
						|
	rts
 | 
						|
 | 
						|
.align 2
 |