18

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

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

li $v0, 5
syscall

然后最终调用我的函数multidivi具体取决于用户想要执行的操作。

因此,假设我在$a0and中有整数,那么乘以和/或除以的$a1干净方法是什么?我一直在网上四处寻找,但我找不到一个干净简单的方法来做到这一点,因为我必须将结果答案发回$a0$a1$a0$a1$v0

4

1 回答 1

30

要相乘,请使用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

除法,div用于有符号除法和divu无符号除法。在这种情况下,HI特殊寄存器将保存余数,而LO特殊寄存器将保存除法的商。

例如:

div $a0, $a1
mfhi $a2 # remainder to $a2
mflo $v0 # quotient to $v0
于 2013-04-17T13:19:45.100 回答