;Division of 16bit by 8 bit with a result in Q16.16 form
;
; X_Int.X_Frac = X_Int / Y
;
; RAM - 6 bytes (1 temp):
; X_Int = X_IntH:X_IntL 16 bit input/ output integer part
; X_Frac = X_FracH:X_FracL 16 bit output fractional part
; Y divisor / temporary
; Counter counter
;
; Size = 39 instructions
; Execution time = 6+16*15-2+3+16*15-2+3+3(return)
; = 491 instruction cycles
;
; 8-July-2000 by Nikolai Golovchenko
; 16-February-2001 fixed, reduced execution time and temporaries
Div16by8to16_16
clr X_FracL
clr X_FracH
mov W, #16
mov Counter, W
mov W, Y ;keep Y value in accumulator
clr Y ;and use Y register as temporary
;Find integer part
Div16by8to16_16a
rl X_IntL ;shift next msb into temporary
rl X_IntH
rl Y
rl Counter ;carry has 9th bit of temporary
;copy carry to counter
sub Y, W ;substract Y (in w) from temporary
snc ;if no borrow, set Counter.0
setb Counter.0
sb Counter.0 ;if Counter.0 clear (borrow) restore temporary
add Y, W
clc ;restore counter
rr Counter
;at this point carry is the next bit of result
decsz Counter ;repeat 16 times to find integer part
jmp Div16by8to16_16a
;shift last integer bit
rl X_IntL
rl X_IntH
;Find fractional part
setb Counter.4 ;Counter = 16
Div16by8to16_16b
;Shift zero bit into temporary
rl X_FracL
rl X_FracH
rl Y
rl Counter ;carry has 9th bit of temporary
;copy carry to counter
sub Y, W ;substract Y(in w) from temporary
snc ;if no borrow, set Counter.0
setb Counter.0
sb Counter.0 ;if Counter.0 clear (borrow) restore temporary
add Y, W
clc ;restore counter
rr Counter
decsz Counter ;repeat 16 times
jmp Div16by8to16_16b
;shift last fractional bit
rl X_FracL
rl X_FracH
mov Y, W ;restore divisor
retp
| file: /Techref/scenix/lib/math/div16by8to16_16.htm, 2KB, , updated: 2001/4/16 21:59, local time: 2025/10/24 16:01,
owner: NG--944,
216.73.216.180,10-8-63-169:LOG IN
|
| ©2025 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://techref.massmind.org/Techref/scenix/lib/math/div16by8to16_16.htm"> Division of 16 bit by 8 bit integers with result in fixed point format Q16.16</A> |
| Did you find what you needed? |
Welcome to massmind.org! |
|
Ashley Roll has put together a really nice little unit here. Leave off the MAX232 and keep these handy for the few times you need true RS232! |
.