我是汇编和MIPS的新手。我有一个算法,将两个32位数字相乘,得到一个64位数字。我将结果分成两个不同的寄存器,对于MIPS来说太大了。
您能帮我解释一下存储在上下寄存器中的两个不同数字吗?
答案 0 :(得分:1)
昨天,我们有a related question on this site:
一个64位数字将存储在两个寄存器中,因为一个寄存器只有32位。
数学背景
您可能会想象一台不是以二进制而是以十进制计算的计算机(或BCD-就像1960年代的某些计算机那样),并且寄存器可以存储3个十进制数字。
在这种情况下,数字123456(十进制)将被存储为123(在一个寄存器中)和456(在另一个寄存器中)。
不幸的是,不同的基地表现不同:
Decimal Hexadecimal
099 063
355 163
160 0A0
260 104
您可以看到,在数字99和355(十进制)之间,十六进制只有一位数字的差异,而十进制则是全部3位数字的差异。
对于数字160和260(十进制),恰恰相反。
这意味着:如果我们要将上面示例中的数字123456转换为十六进制,则不能先将数字123和456转换为十六进制,但是在转换之前,我们必须将数字123456作为完整数字:< / p>
Decimal Hexadecimal
123 7B
456 1C8
123456 1E240 (does neither contain 7-B nor 1-C-8)
如果寄存器是3位宽的倍数,则该规则的例外例如是“ binary <->八进制”,如果寄存器是4位宽的倍数,则是“ binary <->十六进制”,或者是“八进制<-” >十六进制”,如果寄存器的宽度是12位(或4个八进制或3个十六进制数字)的倍数:
Octal Hexadecimal
1234 29C
5670 BB8
12345670 29CBB8
这就是为什么十六进制在低级程序员中如此流行的原因!
立即返回您的程序
MIPS寄存器中存储的值是二进制而不是十进制。您有兴趣将整个64位数字打印为十进制。
因此,问题与我们对十六进制结果感兴趣的十进制计算机的示例相同:
但是,数字266201827和768509613是分别转换为十进制的两个寄存器!