Changes

Jump to: navigation, search

Programming:Integer Division

1,029 bytes added, 15:23, 14 November 2015
the new fast division added
</pre>
 
== Fast 32bit division ==
 
'''Input:''' HL,DE=Value1, BC=Value2
 
'''Output:''' BCDE=Value1/Value2, HL=Value1 MOD Value2
 
'''Destroyed:''' AF
 
'''Not used:''' IX, IY
 
<pre>
div macro
local t1,t2
ADD HL, HL
EX DE, HL
ADD HL, HL
EX DE, HL
JP NC, t1
 
INC HL
t1
LD A, L
ADD A, C
LD A, H
ADC A, B
JP NC, t2
 
ADD HL, BC
INC DE
t2
endm
 
div32x16 proc ; BCDE = HLDE/BC, HL = HLDE%BC
local t1, DIV32_, DIV320
DEC BC
LD A, B
CPL
LD B, A
LD A, C
CPL
LD C, A
ADD A, L
LD A, B
ADC A, H
JP NC, DIV32_
 
PUSH DE
EX DE, HL
LD HL, 0000
CALL DIV320
EX DE, HL
EX (SP), HL
EX DE, HL
CALL DIV320
POP BC
RET
DIV32_
CALL DIV320
LD BC, 0000
RET
DIV320 ; DE = HLDE/(-BC), HL = HLDE%(-BC)
CALL t1
t1
rept 8
div
endm
RET
endp
</pre>
== Web links ==
22
edits