Full Version : 8-by-8-bit Divide to 24-bit Float (PIC ASM)
avr >>PIC 8051 ZILOG ARM TI H8 ETC >>8-by-8-bit Divide to 24-bit Float (PIC ASM)


Admin3- 04-18-2006
Divide 8 bit int by 8 bit to 24 bit float (AN575)
by Nikolai Golovchenko

CODE
;***********************************************
;Floating point division of two unsigned integer
;8 bit variables
;
;Input: AARGB0 - dividend (nominator)
;       BARGB0 - divisor (denominator)
;Output:
;       AEXP, AARGB0, AARGB1 - quotient
;       (MICROCHIP format - AN575)
;       w = 0 on success
;       w = 1 error: divide by zero
;Temporaries:
;       BARGB1
;
;RAM - 5 bytes
;ROM - 41 words
;Speed - 7 + 4 + 8 * 9 + 4 + 14 * 23 + 4 = 413 instruction
;       cycles worst case (including call and return)
;***********************************************
fdiv24_8_8
       movfw BARGB0
       skpnz
        retlw 1               ;divide by zero
       clrf AEXP
       movfw AARGB0
       skpnz
        retlw 0               ;zero result
;loop to use all 8 bits of dividend (integer 8 by 8 divide)
       movwf AARGB1
       clrf BARGB1
       movlw 0x08
       movwf AARGB0   ;aargb0 is used as loop counter
fdiv24_8_8b
       rlf AARGB1, f
       rlf BARGB1, f
       movfw BARGB0
       subwf BARGB1, w
       skpnc
        movwf BARGB1
       decfsz AARGB0, f
        goto fdiv24_8_8b
       rlf AARGB1, f  ;aargb1 is the integer quotient so far
;loop to fill all the bits of 16bit mantissa
       clrf AARGB0
       movlw 0x8E
       movwf AEXP
       clrc
fdiv24_8_8c
       rlf BARGB1, f
       movfw BARGB0
       skpc                   ;check carry (9th bit)
        goto fdiv24_8_8d
       subwf BARGB1, f
       setc
       goto fdiv24_8_8e
fdiv24_8_8d
       subwf BARGB1, w
       skpnc
        movwf BARGB1
fdiv24_8_8e
       rlf AARGB1, f
       rlf AARGB0, f
       decf AEXP, f
       btfss AARGB0, 7
        goto fdiv24_8_8c
       bcf AARGB0, 7  ;replace explicit msb with sign
       retlw 0



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