.z80 aseg org 0100h Test: ld hl,9 ld de,5 call divide rst 38h ;---------------------------------------------------------------------- ; 16 bit Divide from Bill Smith ;------------------------------ ; divide 16-bit number in [hl] by [bc] ; on exit, [de] is 16-bit quotient, [hl] is remainder ; divide: add hl,hl ;hi *2 ex de,hl ;[de] becomes lo ld hl,0 ;init hi ld a,16 ;16 bits divid0: adc hl,hl ;Repeat hi *2 push hl ; save in case borrow or a ; clear borrow sbc hl,bc ; sbc hl,bc ;hi=hi-divisor ccf ; invert borrow for shift later jr c,divid1 ; if borrow { pop hl ; replace with original hi push hl ; stack phase divid1: inc sp inc sp ; drop ex de,hl ; get lo adc hl,hl ; lo *2 + remainder ex de,hl dec a ; count-- jr nz,divid0 ;Until (bit count eq 0) ret end