有人可以指导我如何在 MIPS 汇编中使用移位来制作乘法代码吗?我不明白数字 2^n 如何帮助我使用奇数被乘数进行乘法
我目前有这段代码,我正在尝试制作一个计算器
.text
li $v0, 4
la $a0, ask_1
syscall
li $v0,5
syscall
move $s1, $v0
li $v0, 4
la $a0, ask_2
syscall
li $v0,5
syscall
move $s2, $v0
#sll $s2, $s2, 3 #$s2 * $s2^3 = result
srl $s2, $s2, 1
li $v0, 1
la $a0, ($s2)
syscall
.data
ask_1: .asciiz "Enter Multiplier\n"
ask_2: .asciiz "Enter Multiplicand\n"
result: .asciiz "The Answer is:\n"
Shifting a number n bits left multiples the number by 2n. For example n << 3 = n*2³ = n*8
. The corresponding instruction is
SLL $s1, $s2, 3 # $s1 = $s2 * 8 shift left by 3 bit-positions
要乘以任何数字,您可以将数字分解为 2 的幂和。例如:
-
n*10 = n*8 + n*2 = (n << 3) + (n << 1)
SLL $t1, $s2, 1
SLL $t2, $s2, 3
ADD $s2, $t1, $t2
如果速度更快,您也可以使用减法
-
n*15 = n*16 - n = (n << 4) - n
SLL $t1, $s2, 4
SUB $s1, $t1, $s2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)