Changes

Jump to: navigation, search

Programming:Integer Division

411 bytes added, 16:31, 16 November 2015
/* Fast 32bit division */ correction and additional information is added
'''Not used:''' IX, IY
 
'''CPC Cycles:''' 1080-2572 (1826 on average), 270-643 usec (456 on average)
<pre>
div div_r macro local t1,t2 ADD HL, HL
EX DE, HL
ADD HL, HL
EX DE, HL
JP NCADC HL, t1HL
INC HL
t1
LD A, L
ADD A, C
LD A, H
ADC A, B
JP JR NC, t2
ADD HL, BC
INC DE
t2
endm
div_e macro
local t1,t2
EX DE, HL
ADD HL, HL
EX DE, HL
ADC HL, HL
JR C, t1
LD A, L
ADD A, C
LD A, H
ADC A, B
JR NC, t2
t1
ADD HL, BC
INC DE
t2
endm
div32x16 proc ; BCDE = HLDE/BC, HL = HLDE%BC
local t1DIV16, DIV32_DIV32R, DIV320DIV32F
DEC BC
LD A, B
LD A, B
ADC A, H
JP JR NC, DIV32_DIV16
PUSH DE
EX DE, HL
LD HL, 0000
CALL DIV320DIV32R
EX DE, HL
EX (SP), HL
EX DE, HL
CALL DIV320DIV32F
POP BC
RET
DIV32_DIV16 CALL DIV320DIV32F
LD BC, 0000
RET
DIV320 DIV32R ; DE = HLDE/(-BC), HL = HLDE%(-BC), -BC < $8000 CALL t1 t1$+3
rept 8
divdiv_r endm RET endp DIV32E ; DE = HLDE/(-BC), HL = HLDE%(-BC) CALL $+3 rept 8 div_e
endm
RET
endp
</pre>
 
== Web links ==
22
edits