base:32_bit_hexadecimal_to_decimal_conversion
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
base:32_bit_hexadecimal_to_decimal_conversion [2015-04-17 04:30] – created - external edit 127.0.0.1 | base:32_bit_hexadecimal_to_decimal_conversion [2023-04-20 09:02] (current) – tww | ||
---|---|---|---|
Line 55: | Line 55: | ||
</ | </ | ||
+ | |||
+ | 16-bit version with tightened up loops and routine structure: | ||
+ | < | ||
+ | // Converts 16 bit values to 5 decimal digits. | ||
+ | ldx #-5 | ||
+ | !Loop: | ||
+ | ldy #16 // Divides a 16 bit value by 10 (Remainder in A) | ||
+ | lda #0 | ||
+ | clc | ||
+ | !: rol | ||
+ | cmp #10 | ||
+ | bcc !+ | ||
+ | sbc #10 | ||
+ | !: rol value | ||
+ | rol value+1 | ||
+ | dey | ||
+ | bpl !-- | ||
+ | sta result-[255-4], | ||
+ | inx | ||
+ | bne !Loop- | ||
+ | // Print result, skip leading zeros | ||
+ | ldx #4 | ||
+ | !: lda result,x | ||
+ | beq !Skip+ | ||
+ | ora #$30 | ||
+ | jsr $ffd2 | ||
+ | !Skip: | ||
+ | dex | ||
+ | bpl !- | ||
+ | rts | ||
+ | |||
+ | value: | ||
+ | result: .byte 0,0,0,0,0 | ||
+ | </ | ||
+ | NB! If you're only looking to convert, not print; Replace jsr $ffd2 with sta result,x. | ||
+ | |||
+ | NB!! If you want to maintain digit positioning, | ||
+ | |||
+ | NB!!! If you wish to extend to 24, 32 or whatever size, adjust the following values: | ||
+ | < | ||
+ | ldx #-5 // How many digits as a negative number | ||
+ | ldy #16 // How many bits as a positive number | ||
+ | sta result-[255-4], | ||
+ | ldx #4 // How many digits-1 as a positive number | ||
+ | value: | ||
+ | result: .byte 0, | ||
+ | Finally adjust the quantity of "rol value+n" | ||
+ | </ |
base/32_bit_hexadecimal_to_decimal_conversion.1429237815.txt.gz · Last modified: 2015-04-17 04:30 by 127.0.0.1