; 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
Comments:
James Newton responds: "Thank you very, very much for finding and posting that correction. I have updated the listing."
Questions:
| file: /techref/scenix/lib/math/radix/b2a-16b5a-rl_sx.htm, 3KB, , updated: 2008/10/14 15:22, local time: 2010/3/19 20:42,
38.107.191.113:LOG IN
|
| ©2010 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? Please DO link to this page! Digg it! <A HREF="http://piclist.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? |
|
Support the PICList by honoring its finest. |
|
.