因此,我正在用MIPS构建一个计算器程序,我正在尝试编写乘法和除法函数。MIPS:整数乘法和除法
目前我在整数的循环中读取,像这样:
li $v0, 5
syscall
并最终调用我的函数multi
和divi
取决于其操作的用户想要做的。
因此,假如我有在整数和$a0
$a1
,这将成为$a1
繁殖$a0
和/或通过$a1
划分$a0
一个干净的方式?我一直在网上四处寻找,但我无法找到一个清洁,简单的方法来做到这一点,因为我所得到的答案发送回$v0
因此,我正在用MIPS构建一个计算器程序,我正在尝试编写乘法和除法函数。MIPS:整数乘法和除法
目前我在整数的循环中读取,像这样:
li $v0, 5
syscall
并最终调用我的函数multi
和divi
取决于其操作的用户想要做的。
因此,假如我有在整数和$a0
$a1
,这将成为$a1
繁殖$a0
和/或通过$a1
划分$a0
一个干净的方式?我一直在网上四处寻找,但我无法找到一个清洁,简单的方法来做到这一点,因为我所得到的答案发送回$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 # reminder to $a2
mflo $v0 # quotient to $v0
之后。你如何将两个(hi和lo)合并成一个结果?如果我知道结果将适合32位寄存器? –
@JohnDemetriou:如果你已经知道结果适合32位,那么你可以使用'mflo'检索低有效位。 – gusbro
谢谢你的帮助非常有帮助 –
是不是有什么毛病'MULT'指令? – paxdiablo
为什么不仅仅是分支,而是它是一个多重还是一个分裂? – rmmh