所以我正在 MIPS 中构建一个计算器程序,我正在尝试编写乘法和除法函数。
目前我在一个循环中读取整数,如下所示:
li $v0, 5
syscall
然后最终调用我的函数multi
,divi
具体取决于用户想要执行的操作。
因此,假设我在$a0
and中有整数,那么乘以和/或除以的$a1
干净方法是什么?我一直在网上四处寻找,但我找不到一个干净简单的方法来做到这一点,因为我必须将结果答案发回$a0
$a1
$a0
$a1
$v0
所以我正在 MIPS 中构建一个计算器程序,我正在尝试编写乘法和除法函数。
目前我在一个循环中读取整数,如下所示:
li $v0, 5
syscall
然后最终调用我的函数multi
,divi
具体取决于用户想要执行的操作。
因此,假设我在$a0
and中有整数,那么乘以和/或除以的$a1
干净方法是什么?我一直在网上四处寻找,但我找不到一个干净简单的方法来做到这一点,因为我必须将结果答案发回$a0
$a1
$a0
$a1
$v0
要相乘,请使用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