Changes

Jump to: navigation, search

Programming:Integer Division

1,199 bytes added, 01:32, 5 August 2006
== 32bit division ==

'''Input:''' IY,BC=Value1, IX=Value2
'''Output:''' IY,BC=Value1/Value2, HL=Value1 MOD Value2
'''Destroyed:''' AF,DE,IY

<pre>
clcd32c db 0
clcd32 ld hl,0
db #dd:ld a,l
db #dd:or h
ret z ;IY,BC=Value1(Counter)
ld de,0 ;DE,HL=CalcVar
ld a,32 ;Set Counter to 32
clcd321 ld (clcd32c),a
rl c
rl b
db #fd:ld a,l:rla:db #fd:ld l,a
db #fd:ld a,h:rla:db #fd:ld h,a
rl l
rl h
rl e
rl d
ld a,l
db #dd:sub l
ld l,a
ld a,h
db #dd:sbc h
ld h,a
ld a,e
sbc 0
ld e,a
ld a,d
sbc 0
ld d,a
jr nc,clcd322
ld a,l
db #dd:add l
ld l,a
ld a,h
db #dd:adc h
ld h,a
ld a,e
adc 0
ld e,a
ld a,d
adc 0
ld d,a
scf
clcd322 ccf
ld a,(clcd32c)
dec a
jr nz,clcd321 ;HL=Value1 MOD Value2
rl c
rl b
db #fd:ld a,l:rla:db #fd:ld l,a
db #fd:ld a,h:rla:db #fd:ld h,a
ret ;IY,BC=Value1 DIV Value2
</pre>