我试图用lls实现2^15并减少1。我基本上试着做2^15,2^14等等,然后打印这个值。然而,我有麻烦,我不知道为什么。它在两次迭代后停止,因为它会转到0。产量是(32768,16384,0 -16384 -32768 -49152 -65536 -81920等),有什么建议吗?谢谢
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发布于 2020-09-12 23:34:53
在本例中,sll $t1, $s1, 2的意思是$t1 = $s1 << 2,它只是将$s1乘以4。
addi $s1, $zero, 2
sll $t1, $s1, 14关于编辑的问题
这是我的解决办法:
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移到循环的末尾,并翻转了逻辑。,end2是另一个标签还是只是一个错误,但是您想让某个分支回到end2的开头addi $s1,$s1,-1实际上是在改变基数,而不是指数。因此,基本上是2 14,1 << 14,0 << 14,-1 << 14,等等。在这种情况下,为了降低指数,您所要做的就是将先前的结果移除(或右移)1。因此,在我的srl $t1, $t1, 1中。发布于 2020-09-12 23:41:13
我认为您正在寻找一个可变数量的转移,所以使用sllv。
尝试如下所示,这是1 << n的汇编代码
li $t0, 1
sllv $t1, $t0, $s1代替你的轮班(sll $t1, $s1, 2)。
https://stackoverflow.com/questions/63865697
复制相似问题