所以我在MIPS中构建一个计算器程序,我正在尝试编写乘法和除法函数。
目前我在循环中读取整数:
li $v0, 5
syscall
然后最终调用我的函数multi
和divi
,具体取决于用户想要执行的操作。
假设我在$a0
和$a1
中有整数,那么将$a0
乘以$a1
和/或除$a0
的干净方法是什么?由$a1
?我一直在网上寻找,但我找不到干净简单的方法来做到这一点,因为我必须在$v0
答案 0 :(得分:19)
要相乘,请使用mult
进行有符号乘法,将multu
用于无符号乘法。请注意,两个32位数相乘的结果产生一个64位数。如果你希望结果返回$ v0,这意味着你假设结果将适合32位。
32个最高有效位将保存在HI
特殊寄存器中(可由mfhi
指令访问),32个最低有效位将保存在LO
特殊寄存器中(可通过{访问) {1}}指令):
E.g:
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
特殊注册将保留该分区的商。
E.g:
LO