## Binary to ASCII, 16 bit to 5 digits (1 at a time) no temp register (!)

```; 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
mov     W, #1000 & 255

;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
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
jnc add10               ;40 inst in loop for worst case.
output(temp);
output(LO);
ret

```

• Hello, after implementing the above 16-bit to 5 digit BCD converter code, I found it gave WRONG answers. After much code tracing, I realize that there's an error in the SUB100 code. The current instruction is: SB C, in fact it should be SNB C. Make this change and the "subtraction until result goes negative loop" works properly.

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 14:22, local time: 2019/12/10 17:32, TOP NEW HELP FIND:  35.172.217.40:LOG IN

 ©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?Please DO link to this page! Digg it! / MAKE! /  SX Microcontroller Radix Math Method - Binary to ASCII, 16 bit to 5 digits (1 at a time) no temp register

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.

Link? Put it here:
if you want a response, please enter your email address:
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
 Did you find what you needed? "No. I'm looking for: " "No. Take me to the search page." "No. Take me to the top so I can drill down by catagory" "No. I'm willing to pay for help, please refer me to a qualified consultant" "No. But I'm interested. me at when this page is expanded."

### Welcome to sxlist.com!

Site supported by
& kind contributors
just like you!

(here's why

Copies of the site on CD
are available at minimal cost.

.