如何使用 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。
我需要一个存储为十六进制数的字符串数组,我需要将它转换为以 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。