; by Rich Leggitt with tweaks by Scott Dattalo and bugfix by Dmitry Kiryashov and Nikolai Golovchenko and Ted Inoue. ; given 16 bit data in HI and LO, extract decimal digits ; requires one Output register called temp, HI and LO are destroyed. ; 42 instructions and less than 290 instructions executed clr temp skip sub10k inc temp mov W, #10000 & 255 sub LO, W ;Scott Dattalo says: ;If you have a ram location that's known to be zero, then ;the following [the IF] can be replaced with [the ELSE] IFNDEF known_zero mov W, #10000 >> 8 sb C mov W, #(10000 >> 8)+1 ELSE mov W, << known_zero add W, #(1000 >> 8) + 1 ENDIF sub HI, W jc sub10k ;11*7=77 inst in loop for 60900 (worst) output(temp); mov W, #10 mov temp, W add1K dec temp mov W, #1000 & 255 add LO, W ;Scott Dattalo says: ;If you have a ram location that's known to be zero, then ;the following [the IF] can be replaced with [the ELSE] IFNDEF known_zero mov W, #1000 >> 8 snb C mov W, #(1000 >> 8)+1 ELSE mov W, << known_zero add W, #1000 > > 8 ENDIF add HI, W jnc add1k ;10*10=100 inst in loop for 60900 output(temp); ;Scott takes over here clr temp mov W, #100 skip sub100 inc temp sub LO, W snb C jmp sub100 dec HI sb HI.7 ;Check msb instead of carry for underflow. jmp sub100 ;4 inst per loop to 200 then 7 per loop to 900. ;Total 64(?) in loop for worst case ;at this point, HI = 0xff, and 0 <= LO <= 99 output(temp) mov W, #10 mov temp, W add10 dec temp add LO, W jnc add10 ;40 inst in loop for worst case. output(temp); output(LO); ret
James Newton responds: "Thank you very, very much for finding and posting that correction. I have updated the listing."
|file: /Techref/scenix/lib/math/radix/b2a-16b5a-rl_sx.htm, 3KB, , updated: 2008/10/14 14:22, local time: 2019/12/10 17:32,
|©2019 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://www.sxlist.com/techref/scenix/lib/math/radix/b2a-16b5a-rl_sx.htm"> SX Microcontroller Radix Math Method - Binary to ASCII, 16 bit to 5 digits (1 at a time) no temp register</A>
|Did you find what you needed?|
Welcome to sxlist.com!
& kind contributors
just like you!
Please don't rip/copy
Copies of the site on CD
are available at minimal cost.
Welcome to www.sxlist.com!