Divide 8 bit int by 8 bit to 24 bit float (AN575)
by Nikolai Golovchenko
;***********************************************
;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*10-2+5+14*25-2+4+3 = 449 instruction
; cycles worst case (including call and return)
;***********************************************
fdiv24_8_8
mov W, BARGB0
snb Z
retw #1 ;divide by zero
clr AEXP
mov W, AARGB0
snb Z
retw #0 ;zero result
;loop to use all 8 bits of dividend (integer 8 by 8 divide)
mov AARGB1, W
clr BARGB1
mov W, #$08
mov AARGB0, W ;aargb0 is used as loop counter
fdiv24_8_8b
rl AARGB1
rl BARGB1
mov W, BARGB0
mov W, BARGB1-w
snb C
mov BARGB1, W
decsz AARGB0
jmp fdiv24_8_8b
rl AARGB1 ;aargb1 is the integer quotient so far
;loop to fill all the bits of 16bit mantissa
clr AARGB0
mov W, #$8E
mov AEXP, W
clrb C
fdiv24_8_8c
rl BARGB1
mov W, BARGB0
sb C ;check carry (9th bit)
jmp fdiv24_8_8d
sub BARGB1, W
setb C
jmp fdiv24_8_8e
fdiv24_8_8d
mov W, BARGB1-w
snb C
mov BARGB1, W
fdiv24_8_8e
rl AARGB1
rl AARGB0
dec AEXP
sb AARGB0.7
jmp fdiv24_8_8c
clrb AARGB0.7 ;replace explicit msb with sign
retw #0
;***********************************************
; Nikolai http://techref.massmind.org/member/NG--944
file: /Techref/scenix/lib/math/div/8by8to24fp-ng_sx.htm, 2KB, , updated: 2004/6/10 13:40, local time: 2024/11/19 23:48,
owner: NG--944,
|
| ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://linistepper.com/Techref/scenix/lib/math/div/8by8to24fp-ng_sx.htm"> SX Microcontroller Math Method - Divide 8 bit int by 8 bit to 24 bit float (AN575)</A> |
Did you find what you needed?
|