String 如何将数字的MIPS字符串转换为十六进制

String 如何将数字的MIPS字符串转换为十六进制,string,binary,mips,hex,String,Binary,Mips,Hex,我开始写一个MIPS程序,在这个程序中,我得到一个十六进制表示的字符串,比如说A23B,我想把它组合成一个完整的十六进制数。我真的迷失在如何提取一个数字,比如说B,并将其转换为十六进制的mips,然后获取另一个。我不是在寻找一个完整的程序,因为我知道这不是它的目的,而是作为一个开始,因为我真的迷路了,谢谢你。考虑一下这一点。假设您的数据段如下所示 .data str: .space 5 #enough room for a 4 digit hex number 而且,str指向的内存包含要转换

我开始写一个MIPS程序,在这个程序中,我得到一个十六进制表示的字符串,比如说A23B,我想把它组合成一个完整的十六进制数。我真的迷失在如何提取一个数字,比如说B,并将其转换为十六进制的mips,然后获取另一个。我不是在寻找一个完整的程序,因为我知道这不是它的目的,而是作为一个开始,因为我真的迷路了,谢谢你。

考虑一下这一点。假设您的数据段如下所示

.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
    

    这是一个字符的步骤,要转换整个字符串,您需要在每个字符上循环。

    是的,这有助于我开始。啊,那么字符串被加载到不同的字节中了?这是我遇到的一个问题,我不知道如何在存储器、字、字节等中加载字符串。非常感谢。稍后我会尝试发布我的完整代码,看看我是否接近,如果可以的话。另外,我认为lb应该是lb$t1,0($t0)来从字符串中获取第一个字节。对不起,这是lb的一个拼写错误。我很高兴听到我的帮助,我希望您“接受”答案:)另外,您会建议对案例进行转换还是进行大量分支?不,每一行都有几行。你只需要一行中的几个分支好吧,但对于大写字母,我不是必须先说减去65,然后再加10,才能将它们转换成用户输入的数字吗?比如说D,被解释为0x44,对吗?如果我减去65,然后再加上10,这将变成用户想要的十六进制表示形式的D,即数字13?如果我不能完全完成的话,我会在明天之前完成我的全部代码。