48 lines
		
	
	
	
		
			472 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			472 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define .dvu2
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| 
 | |
| ! 16-bit divide
 | |
| ! parameters:
 | |
| !    bc: divisor
 | |
| !    de: dividend
 | |
| !    de: quotient (out)
 | |
| !    hl: remainder (out)
 | |
| ! no overflow detection
 | |
| 
 | |
| 
 | |
| 
 | |
| .dvu2:
 | |
| 	or a
 | |
| 	ld h,d
 | |
| 	ld l,e
 | |
| 	sbc hl,bc
 | |
| 	jp m,3f
 | |
| 	jp c,3f	! bc > de?
 | |
| 	ld hl,0
 | |
| 	ld a,16
 | |
| 0:
 | |
| 	add hl,hl
 | |
| 	ex de,hl
 | |
| 	add hl,hl
 | |
| 	ex de,hl
 | |
| 	jr nc,1f
 | |
| 	inc hl
 | |
| 	or a
 | |
| 1:
 | |
| 	sbc hl,bc
 | |
| 	inc de
 | |
| 	jp p,2f
 | |
| 	add hl,bc
 | |
| 	dec de
 | |
| 2:
 | |
| 	dec a
 | |
| 	jr nz,0b
 | |
| 	ret
 | |
| 3:
 | |
| 	ld hl,0
 | |
| 	ex de,hl
 | |
| 	ret
 |