我开始写一个MIPS程序,我得到一个十六进制表示的字符串,如A23B,并希望将它组合成1个整数十六进制数。我真的迷失在如何提取说一个数字的部分,说B并将其转换为十六进制为mips然后获取另一个。我并不是在寻找一个完整的程序,因为我知道这不是它的目的,而是因为我真的迷失了,所以我要开始了,谢谢。
答案 0 :(得分:3)
考虑一下。假设您的数据段看起来像这样
.data
str: .space 5 #enough room for a 4 digit hex number
此外,str
指向的内存包含要转换为数字的字符串。要将其第一个字节转换为$t1
,您可以使用:
la $t0 str
lb $t1 0($t0)
接下来,有四种情况:
'0' < $t1 < '9'
'a' < $t1 < 'f'
'A' < $t1 < 'F'
我会假设你知道如何检查这些案件。
除了最后一种情况外,我们必须按给定的值递增总和;因此,案件的下一步将是:
sum += $t1 - '0'
sum += $t1 - 'a' + 10
sum += $t1 - 'A' + 10
显然这是伪代码,但它说明了数字和字母的ASCII值是连续的主要观点,因此计算它们的值是微不足道的。
最后,因为我们知道每个数字恰好代表4位,并且因为我们从左到右开始读取,所以我们必须将剩余的总和移位4位:
sll $sum $sum 4
这是一个字符的步骤,转换你需要循环遍历每个字符的整个字符串。