Ozw*_*rld 3 assembly mips bit-shift multiplication mips32
有人可以告诉我如何制作使用 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"
Run Code Online (Sandbox Code Playgroud)
将数字左移 n 位将该数字乘以 2 n。例如n << 3 = n*2³ = n*8。对应的指令是
SLL $s1, $s2, 1
Run Code Online (Sandbox Code Playgroud)
要乘以任何数字,您可以将数字拆分为 2 的幂和。例如:
n*10 = n*8 + n*2 = (n << 3) + (n << 1)
SLL $t1, $s2, 1
SLL $t2, $s2, 3
ADD $s2, $t1, $t2
Run Code Online (Sandbox Code Playgroud)
如果更快,您也可以使用减法
n*15 = n*16 - n = (n << 4) - n
SLL $t1, $s2, 4
SUB $s1, $t1, $s2
Run Code Online (Sandbox Code Playgroud)