如何在MIPS中将两个数字相乘,从而得出大于32位的乘积?

时间:2019-03-31 13:00:16

标签: assembly mips qtspim

实际上,我的任务是在MIPS中将两个32位数字相乘,然后生成64位的输出。据我了解,最低有效的32位将保存在“ lo”寄存器中,其余的将保存在“ hi”寄存器中。

当我将100000和200000相乘时,在“ lo”寄存器中得到a817c800,在“ hi”寄存器中得到4

mult $t1, $t2 
    mflo $s0
    mfhi $s1 

enter image description here

1 个答案:

答案 0 :(得分:1)

  

当我将100000和200000相乘时,在“ lo”寄存器中得到a817c800,在“ hi”寄存器中得到4

正确。

由于结果为64位宽,并且您使用的是32位MIPS CPU,因此需要两个寄存器来存储结果。

在您的代码中,高32位在s1中,低32位在s0中。因此,两个寄存器s1s0表示64位值4a817c800(十六进制),即20000000000(十进制)。这是正确的结果。

您的下一个问题可能是如何使用qtspim打印出64位数字。不幸的是,我没有使用MIPS模拟器的经验(仅使用真正的MIPS CPU),所以我完全不知道这是否可行。