MIPS:整数乘法和除法

Con*_*ack 12 mips

所以我在MIPS中构建一个计算器程序,我正在尝试编写乘法和除法函数.

目前我在循环中读取整数,如下所示:

li $v0, 5
syscall
Run Code Online (Sandbox Code Playgroud)

然后最终调用我的函数multidivi根据用户想要执行的操作.

因此,假如我在整数$a0$a1,这将是一个干净的方式繁殖$a0$a1和/或分裂$a0$a1?我一直在网上寻找,但我找不到干净简单的方法,因为我必须将结果回复$v0

gus*_*bro 20

要相乘,请使用mult有符号乘法和multu无符号乘法.请注意,两个32位数相乘的结果产生一个64位数.如果您希望结果返回$ v0,这意味着您假设结果将适合32位.

32个最高有效位将保存在HI特殊寄存器中(可通过mfhi指令访问),32个最低有效位将保存在LO特殊寄存器中(可通过mflo指令访问):

例如:

  li $a0, 5
  li $a1, 3
  mult $a0, $a1
  mfhi $a2 # 32 most significant bits of multiplication to $a2
  mflo $v0 # 32 least significant bits of multiplication to $v0
Run Code Online (Sandbox Code Playgroud)

划分,div用于签名除法和divu无符号除法.在这种情况下,HI特殊注册表将保留提醒,而LO特殊注册表将保留该部门的商.

例如:

  div $a0, $a1
  mfhi $a2 # reminder to $a2
  mflo $v0 # quotient to $v0
Run Code Online (Sandbox Code Playgroud)

  • @JohnDemetriou:如果你已经知道结果适合32位,你可以使用`mflo'检索低有效位 (4认同)
  • 多后。您如何将这两个(hi 和 lo)合并为一个结果?如果我知道结果适合 32 位寄存器? (2认同)
  • @Leonard:两个 32 位数字的乘法产生一个 64 位数字。这两个寄存器始终用于存储结果。乘法的 32 个高有效二进制数字存储在“HI”中,而 32 个较低有效的数字存储在“LO”中。您可以分别使用 `mfhi` 和 `mflo` 来检索它们。如果您事先只知道乘法适合 32 位,您可以只检索“LO”部分(即使用`mflo`)而忽略“HI”部分。 (2认同)