3

在我的 mips 汇编代码中,我使用 multi 指令将 2 个大数相乘,因为结果无法放入一个寄存器中。这意味着该数字保存在 hi 和 lo 特殊寄存器中。我的问题是如何打印乘法的结果。我可以访问 hi 和 lo 并将它们放入其他寄存器(即 $t0、$t1),但我不知道如何组合这两个数字以打印结果。谢谢。

4

2 回答 2

3

(这个答案故意保持高水平,因为我很确定没有人在 mips 程序集中打印数字,除非他们是为了家庭作业而这样做。)

如果您不介意将其设置为十六进制,那没问题;只需以十六进制打印一个单词,然后再打印下一个。不要忘记在第二个单词中包含前导零!(实际上我认为我认为您正在使用的 spim 只能以 10 为基数打印,所以即使这也可能有点麻烦)。

如果你想要它以 10 为底,这个问题很快就会进入我称之为“痛苦的屁股”的类别。在“现实生活”中,我不会打扰;在 C 中进行打印,某个地方的某个编译器人员为您解决了所有这些问题。对于家庭作业,为自己编写一个函数,将输入重复除以 10,最终您将得到要打印的数字。如果 mips 没有 64 位除法指令(我无法告诉你),这将是一个非常有趣的问题,你可以解决。

于 2010-02-06T05:10:28.547 回答
-1

打印数字的解决方案实际上是将数字重复除以 10,然后得到其余的除法并存储在一个字符串中,然后倒置读取。但是如果 mips32 只有 32 位除法,唯一的挑战是除法 64 位数字。我在此页面中找到了一种方法:

https://www.codeproject.com/questions/714114/how-to-print-bit-in

于 2016-12-02T00:53:52.050 回答