【问题标题】:How do I convert stored hexa number array to decimal with MIPS?如何使用 MIPS 将存储的十六进制数组转换为十进制?
【发布时间】:2016-02-16 00:13:17
【问题描述】:

我需要一个存储为 Hexa 数字的字符串数组,我需要将其转换为以 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

【问题讨论】:

  • 用其他语言你会怎么做?它通常有助于用高级语言编写算法,然后根据逐语句分解在汇编中实现它。
  • 另见this answer
  • 我正在尝试这样做,但组装有时很难管理

标签: assembly mips mars-simulator


【解决方案1】:

终于搞定了!

我有一个类似 [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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多