在MIPS汇编中使用逻辑移位乘以2的幂 [英] Multiplication by a power of 2 using Logical shifts in MIPS assembly
本文介绍了在MIPS汇编中使用逻辑移位乘以2的幂的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有人能给我一些建议,告诉我如何编写一个在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
"
ask_2: .asciiz "Enter Multiplicand
"
result: .asciiz "The Answer is:
"
推荐答案
将数字左移n比特将该数字乘以2n。例如n << 3 = n*2³ = n*8
。对应的指令为
SLL $s1, $s2, 1
要将任何数字相乘,可以将该数字拆分为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
这篇关于在MIPS汇编中使用逻辑移位乘以2的幂的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文