divide movlw 32 ; 32-bit divide by 16-bit
movwf bitcnt
clrf remdrH ; Clear remainder
clrf remdrL
dvloop clrc ; Set quotient bit to 0
; Shift left dividend and quotient
rlf divid0 ; lsb
rlf divid1
rlf divid2
rlf divid3 ; lsb into carry
rlf remdrL ; and then into partial remainder
rlf remdrH
skpnc ; Check for overflow
goto subd
movfw divisH ; Compare partial remainder and divisor
subwf remdrH,w
skpz
goto testgt ; Not equal so test if remdrH is greater
movfw divisL ; High bytes are equal, compare low bytes
subwf remdrL,w
testgt skpc ; Carry set if remdr >= divis
goto remrlt
subd movfw divisL ; Subtract divisor from partial remainder
subwf remdrL
skpc ; Test for borrow
decf remdrH ; Subtract borrow
movfw divisH
subwf remdrH
bsf divid0,0 ; Set quotient bit to 1
; Quotient replaces dividend which is lost
remrlt decfsz bitcnt
goto dvloop
return
Comments:
Questions: