首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mips SLL算子

Mips SLL算子
EN

Stack Overflow用户
提问于 2020-09-12 23:07:18
回答 2查看 207关注 0票数 0

我试图用lls实现2^15并减少1。我基本上试着做2^15,2^14等等,然后打印这个值。然而,我有麻烦,我不知道为什么。它在两次迭代后停止,因为它会转到0。产量是(32768,16384,0 -16384 -32768 -49152 -65536 -81920等),有什么建议吗?谢谢

代码语言:javascript
复制
   addi $s1, $zero, 2

Loop2:
beqz $s1, end2 #if 15 reches 0 than end
sll $t1, $s1, 14
#decrement by 1
addi $s1,$s1,-1


#add 1 into $v0 print
addi $v0, $zero, 1

#move ($s0) into $a0
move $a0, $t1

syscall
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-12 23:34:53

在本例中,sll $t1, $s1, 2的意思是$t1 = $s1 << 2,它只是将$s1乘以4。

代码语言:javascript
复制
addi $s1, $zero, 2
sll $t1, $s1, 14

关于编辑的问题

这是我的解决办法:

代码语言:javascript
复制
addi $s1, $zero, 2  # base is 2
sll $t1, $s1, 14    # $t1 = 2 << 14

Loop2:
addi $v0, $zero, 1  # use print int service
move $a0, $t1       # load $t1 into argument
syscall

srl $t1, $t1, 1     # shift right, effectively decrement the exp by 1

bnez $t1, Loop2     # loop until $t1 is zero

以下是我改变的几点主要内容:

  • beqz $s1, end2 #if 15 reches 0 than end移到循环的末尾,并翻转了逻辑。,
    • ,思想是,除非结果变为0,否则您想要返回。不确定end2是另一个标签还是只是一个错误,但是您想让某个分支回到end2的开头

  • addi $s1,$s1,-1实际上是在改变基数,而不是指数。因此,基本上是2 14,1 << 14,0 << 14,-1 << 14,等等。在这种情况下,为了降低指数,您所要做的就是将先前的结果移除(或右移)1。因此,在我的srl $t1, $t1, 1中。
票数 -1
EN

Stack Overflow用户

发布于 2020-09-12 23:41:13

我认为您正在寻找一个可变数量的转移,所以使用sllv

尝试如下所示,这是1 << n的汇编代码

代码语言:javascript
复制
li $t0, 1
sllv $t1, $t0, $s1

代替你的轮班(sll $t1, $s1, 2)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63865697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档