[A83] Re: Hex to decimal


[Prev][Next][Index][Thread]

[A83] Re: Hex to decimal




For numbers <=19d, the following should work quite nicely:

	cp	10
	jr	c,@done
	add	a,6
@done




At first I thought you could do:
	and	a
	daa
AND A sets the half carry, clears the carry, and sets the addition flag all
at once. But this would mess up input values of 0-3. Alas.

-----Original Message-----
From: assembly-83-bounce@lists.ticalc.org
[mailto:assembly-83-bounce@lists.ticalc.org]On Behalf Of Thomas Lutz
Sent: Monday, July 09, 2001 9:12 PM
To: assembly-83@lists.ticalc.org
Subject: [A83] Re: Hex to decimal



Not to sound stupid, but what exactly do rlc, adc, and daa do? I also assume
the @ sign is a different format than ZiLOG (I label using colon's). My code
seems to work...I just need it for values <19d, but I'd like to understand
this
code. Thanks a lot for your help and suggestions.
-Tom

Kirk Meyer wrote:

> If you actually want to transfer it to a floating point (i.e., OP1), then
> use SetXXOP1. Um, the code you gave doesn't even get to the second half of
> it. To convert into just a register (hex number has to be in the range 0
to
> 99), the following should work:
>
> ;Input: C = hex
> ;Output: A = decimal (0-99)
>         ld      b,8
>         xor     a
> @loop   rlc     c
>         adc     a,a
>         daa
>         djnz    @loop
>         ret
>
> This is if you wanted to convert a strictly hex number to decimal (i.e.
$1F
> to $31). You need a different routine to convert $14 to 14.
>
> -----Original Message-----
> From: assembly-83-bounce@lists.ticalc.org
> [mailto:assembly-83-bounce@lists.ticalc.org]On Behalf Of Thomas Lutz
> Sent: Monday, July 09, 2001 8:53 PM
> To: assembly-83@lists.ticalc.org
> Subject: [A83] Re: Hex to decimal
>
> Nevermind I figured it out...if anyone has any optimization suggestions
> feel free...
> Thanks..
> -Tom
>
> ;******************************
> ; Hex to decimal routine
> ;Inputs: A=1 less than number in hex
> ;C=number in decimal floating points format
> ;******************************
> HexToDecimal:
>  ld b,9
> HexLoop:
>  inc c
>  dec a
>  cp 0
>  ret z ;Return if a=0
>  djnz HexLoop
>  ;c=9 now...increase first four bits, reset last four
>  push af
>  ld a,c
>  and 11110000b
>  add a,10h
>  ld c,a
>  ld b,9
>  pop af
>  jr HexLoop
>
> Thomas Lutz wrote:
>
> > What kind of code could I use for taking a hex value in the accumulator
> > and transfering it to a real variable in floating point format? Thanks.
> > -Tom





References: