Changes

Jump to: navigation, search

Programming:Integer Division

437 bytes added, 13:27, 26 December 2015
/* Fast 32bit division */ a bit faster
'''Destroyed:''' AF,DE,IY
 
'''CPC Cycles:''' approximately 7800, 1900 usec
 
'''Size:''' 91 bytes
<pre>
ret ;IY,BC=Value1 DIV Value2
</pre>
 
== Fast 32bit division ==
'''Not used:''' IX, IY
 
'''CPC Cycles:''' 1016-2444 (1730 on average), 254-611 usec (432 on average)
 
'''Size:''' 277 bytes
<pre>
div div_r macro local t1,t2 ADD SLA HL, HLE EX RL DE, HLD ADD ADC HL, HL EX DE, HL JP NC, t1
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
SLA E
RL D
ADC HL, HL
JR C, t1
LD A, L ADD A, C LD A, H ADC A, B JR NC, t2t1 ADD HL, BC INC DEt2 endmdiv32x16 proc ; BCDE = HLDE/BC, HL = HLDE%BC local t1DIV16, DIV32_DIV32R, DIV320DIV32E
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 DIV320DIV32E
POP BC
RET
DIV32_DIV16 CALL DIV320DIV32E
LD BC, 0000
RET
DIV320 DIV32R ; DE = HLDE/(-BC), HL = HLDE%(-BC), -BC < $8000 CALL t1 t1$+3
rept 8
divdiv_r endm RETDIV32E ; DE = HLDE/(-BC), HL = HLDE%(-BC) CALL $+3 rept 8 div_e
endm
RET
endp
</pre>
 
== Web links ==
22
edits