62 lines
		
	
	
	
		
			644 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			644 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
loop = 100
 | 
						|
dvi4:
 | 
						|
	xor a
 | 
						|
	ld (.flag1),a
 | 
						|
	ld (.flag2),a
 | 
						|
	ld ix,0
 | 
						|
	add ix,sp
 | 
						|
	ld b,(ix+7)		! dividend
 | 
						|
	bit 7,b
 | 
						|
	jr z,1f
 | 
						|
	ld c,(ix+6)
 | 
						|
	ld d,(ix+5)
 | 
						|
	ld e,(ix+4)
 | 
						|
	call .negbd
 | 
						|
	ld (ix+7),d
 | 
						|
	ld (ix+6),e
 | 
						|
	ld (ix+5),h
 | 
						|
	ld (ix+4),l
 | 
						|
	ld a,1
 | 
						|
	ld (.flag1),a
 | 
						|
1:
 | 
						|
	ld b,(ix+3)
 | 
						|
	bit 7,b
 | 
						|
	jr z,2f
 | 
						|
	call .negst
 | 
						|
	ld a,1
 | 
						|
	ld (.flag2),a
 | 
						|
2:
 | 
						|
	call .dvu4
 | 
						|
	ld a,(.flag1)
 | 
						|
	jr z,3f
 | 
						|
	call .negbd
 | 
						|
3:
 | 
						|
	ld a,(.flag2)
 | 
						|
	ld b,a
 | 
						|
	ld a,(.flag1)
 | 
						|
	xor b
 | 
						|
	jr z,4f
 | 
						|
	call .negst
 | 
						|
4:
 | 
						|
	jr loop
 | 
						|
.negbd:
 | 
						|
	xor a
 | 
						|
	ld h,a
 | 
						|
	ld l,a
 | 
						|
	sbc hl,de
 | 
						|
	ex de,hl
 | 
						|
	ld h,a
 | 
						|
	ld l,a
 | 
						|
	sbc hl,bc
 | 
						|
	ret
 | 
						|
.negst:
 | 
						|
	pop iy
 | 
						|
	pop de
 | 
						|
	pop bc
 | 
						|
	call .negbd
 | 
						|
	push hl
 | 
						|
	push de
 | 
						|
	jp (iy)
 | 
						|
.data
 | 
						|
	.flag1: .byte 0
 | 
						|
	.flag2: .byte 0
 |