【问题标题】:MIPS Assembly Multiplication and Moving the Hi and Lo into RegisterMIPS 汇编乘法和将 Hi 和 Lo 移入寄存器
【发布时间】:2014-07-11 17:54:29
【问题描述】:

mult 指令可以将两个 32 位整数相乘,得到 64 位结果。结果的高 32 位 (32 - 63) 保存在 Hi 中,低位 (0 - 31) 保存在 Lo 中。乘法后,我可以使用mfhimflo 将结果移动到寄存器。但显然不可能将 64 位的数字写入 32 位的寄存器。如何将结果存储回寄存器并使用它?我应该将每个部分保存在单独的寄存器中并将它们连接起来吗?

【问题讨论】:

  • @BrettHale 您发布的链接是关于将数据从寄存器移动到 Hi 或 Lo。我的问题是相反的。事实上,我想知道如何将 HI 和 Lo 的 64 位数字存储在 32 位长的寄存器中并对其进行操作。
  • 显然你不能。您必须将产品处理为 64 位。如果高位字为零,则低位字可以用作 32 位。
  • 如果 Hi 不为零?

标签: assembly mips


【解决方案1】:

您是正确的,您将mfhimflo 分别保存到寄存器。您只需要检查您的产品是否同时使用两个寄存器(当 Hi 不为零时),然后您将其考虑在内并同时处理。

【讨论】:

  • 这正是我的问题。由于产品是 64 位长而寄存器是 32 位,我该如何处理它们?
  • 只能单独处理,这有什么问题?您想对结果做什么?
  • 我的问题是我是否必须跟踪数字的高低部分,或者 MIPS 是否有机制来做到这一点?假设我想将结果除以一个数字。我应该分别对高有效部分和低有效部分进行除法,然后在将它们移动到两个单独的寄存器后将每个结果相加,还是 MIPS 知道它们是一个数字的一​​部分?
  • 或者例如,如果我想打印产品,我应该先打印高重要部分,然后将其与较低的部分连接起来,还是 MIPS 会处理并打印右侧的两个部分订购,因为它知道这些是一个数字的一​​部分?
  • 不,在我看来,它似乎对它们是一个数字的一​​部分一无所知。根据 MIPS 上的文档,除了上面的命令之外,寄存器 Hi 和 Lo 无法通过任何方式访问,因此由于它们被复制到通用寄存器,它们只是常规数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多