如何使用 MIPS 将存储的六进制数数组转换为十进制数?

How do I convert stored hexa number array to decimal with MIPS?

我需要一个存储为十六进制数的字符串数组,我需要将它转换为以 10 为底的数字(十进制)。

.data
    inputNumberArray:   .space  32

这个数组是使用

读取的
la   $a0, inputNumberArray  # load inputBase address to a0
li  $v0, 8          # read_string syscall code = 8
li  $a1, 32         # space allocated for inputBase
syscall

所以我有一个像

这样的数组

inputNumberArray = 3E8

我需要输出为

outputArray = 1000

谢谢 :D

终于成功了!

我有一个像 [7b] 这样的输入数组存储在 inputNumberArray

### HEXA -> DECIMAL
fromHexaStringToDecimal:
    # start counter
    la   $t2, inputNumberArray       # load inputNumber address to t2
    li   $t8, 1                      # start our counter
    li   $a0, 0                      # output number
    j    hexaStringToDecimalLoop

hexaStringToDecimalLoop:
    lb   $t7, 0($t2)
    ble  $t7, '9', inputSub48       # if t7 less than or equal to char '9' inputSub48
    addi $t7, $t7, -55              # convert from string (ABCDEF) to int
    j    inputHexaNormalized
inputHexaNormalized:
    blt  $t7, $zero, convertFinish  # print int if t7 < 0
    li   $t6, 16                    # load 16 to t6
    mul  $a0, $a0, $t6              # t8 = t8 * t6
    add  $a0, $a0, $t7              # add t7 to a0
    addi $t2, $t2, 1                # increment array position
    j    hexaStringToDecimalLoop

inputSub48:
    addi $t7, $t7, -48              # convert from string (ABCDEF) to int
    j    inputHexaNormalized

所以最后我会将十进制数存储在 $a0 中。

诀窍是检查数字是否有 ABCEDF 字符,在这种情况下总和为 -55,否则为 -48。

示例:

'9' -48 = 9     #  '9' char to 9 int
'A' -55 = 10    #  'A' char to 10 int

感谢@wallyk。我开始在 python 中重新编写,然后转换为 MIPS。