Full Version : Hughe's Divide 24-bit by 6 Routine (PIC ASM)
avr >>PIC 8051 ZILOG ARM TI H8 ETC >>Hughe's Divide 24-bit by 6 Routine (PIC ASM)


Admin3- 04-18-2006
Hughe shares this code:

Divide a 24 bit number by 6 and round up if the remainder is 3 or more - can be used for any 8 bit constant divisor with 2 values changed.

CODE

CBLOCK
 iA:3
 iB
 iC
ENDC

DivBySix24:
 movlw .24 ; loop for 24 shifts
 movwf iC ; iC is loop counter

 clrf iB ; clear remainder reg

 bcf STATUS,C; clear result bit
DivBySixLoop:
 rlf iA+0 ; roll result bit onto iA
 rlf iA+1
 rlf iA+2
 rlf iB ; and top bit of iA onto iB

 movlw D'6' ; check if remainder (iB) >= 6
 subwf iB,w ; w = iB-6
 btfss STATUS,C; carry set if iB >= 6
   goto DivBySixNogo

 movwf iB ; iB-6 (w) into iB
   ; the carry gets rolled onto iA as a result
DivBySixNogo:
 decfsz iC,f ; loop until all bits checked
   goto DivBySixLoop
 rlf iA+0 ; roll last result bit onto A
 rlf iA+1
 rlf iA+2

; the folowing could be left off if no rounding is required

 movlw D'3' ; if remainder is 3 or more round up
 subwf iB,w ; w = iB-3
 btfss STATUS,C; carry set if iB >= 3
   return
 incf iA+0,f ; increment Result
 btfsc STATUS,Z
   incf iA+1,f
 btfsc STATUS,Z
   incf iA+2,f

 return



Forumer™ is Voted #1 Free Forum Hosting provider
Build your own community today with the largest message board hosting company.