在MIPS汇编中使用逻辑移位乘以2的幂 [英] Multiplication by a power of 2 using Logical shifts in MIPS assembly

查看:19
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆