base:32_bit_hexadecimal_to_decimal_conversion
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
Next revision | |||
— | base:32_bit_hexadecimal_to_decimal_conversion [2015-04-17 04:30] – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== 32 bit hexadecimal to decimal conversion ====== | ||
+ | |||
+ | By Graham. | ||
+ | |||
+ | In cases you need to print decimal values, you can use this routine to convert any unsigned 32 bit value to decimal. It doesn' | ||
+ | |||
+ | < | ||
+ | printdec | ||
+ | jsr hex2dec | ||
+ | |||
+ | ldx #9 | ||
+ | l1 lda result,x | ||
+ | bne l2 | ||
+ | dex ; skip leading zeros | ||
+ | bne l1 | ||
+ | |||
+ | l2 lda result,x | ||
+ | ora #$30 | ||
+ | jsr $ffd2 | ||
+ | dex | ||
+ | bpl l2 | ||
+ | rts | ||
+ | |||
+ | ; converts 10 digits (32 bit values have max. 10 decimal digits) | ||
+ | hex2dec | ||
+ | ldx #0 | ||
+ | l3 jsr div10 | ||
+ | sta result,x | ||
+ | inx | ||
+ | cpx #10 | ||
+ | bne l3 | ||
+ | rts | ||
+ | |||
+ | ; divides a 32 bit value by 10 | ||
+ | ; remainder is returned in akku | ||
+ | div10 | ||
+ | ldy #32 ; 32 bits | ||
+ | lda #0 | ||
+ | clc | ||
+ | l4 rol | ||
+ | cmp #10 | ||
+ | bcc skip | ||
+ | sbc #10 | ||
+ | skip rol value | ||
+ | rol value+1 | ||
+ | rol value+2 | ||
+ | rol value+3 | ||
+ | dey | ||
+ | bpl l4 | ||
+ | rts | ||
+ | |||
+ | value .byte $ff, | ||
+ | |||
+ | result | ||
+ | </ | ||
base/32_bit_hexadecimal_to_decimal_conversion.txt · Last modified: 2023-04-20 09:02 by tww