在MIPS中将数字乘以12

在MIPS中将数字乘以12,mips,Mips,好的,我试着用MIPS做一个粗略的程序,把任何数字乘以12。我决定用换档来实现。MIPS非常新,因此不确定如何执行此操作。我相信这里会有人这么好,让我看看 addi $a0, 2 sll $t0,$a0,2 li $v0,2 move $a0,$t0 syscall li $v0,5 syscall 如果您试图将12转换为两个倍数的幂,则可以使用shift轻松实现: 12 = 4 * 3 = 4 * (2 + 1) 因此,假设a0具有原始值,您将在组装中执行以下等效操作: t0

好的,我试着用MIPS做一个粗略的程序,把任何数字乘以12。我决定用换档来实现。MIPS非常新,因此不确定如何执行此操作。我相信这里会有人这么好,让我看看

addi $a0, 2

sll $t0,$a0,2

li $v0,2

move $a0,$t0

syscall

li $v0,5

syscall

如果您试图将12转换为两个倍数的幂,则可以使用shift轻松实现:

12 = 4 * 3 =  4 * (2 + 1)
因此,假设a0具有原始值,您将在组装中执行以下等效操作:

t0 = a0<<1  # the 2 part
t0 = t0 + a0 # that's the 2+1 done
a0 = t0<<2  # that's the  4 * (2 + 1) put back to the original register

现在a0有了结果

到目前为止你得到了什么?不,发布随机无关指令不算12是1100个仓位,所以你需要将x左移1,再加上x,左移结果2@jakub_d几乎是添加了一些值,比如我可以编写代码来得到我想要的答案,但是我不能让代码自动执行正确的计算。像这样?添加$t0,$t0,a0 sll$t0,$t0,2通过实施您的解决方案,我得到的a0是180,应该是24。这对我很有用-您从a0开始的数字是多少?实际上是在a0,当你要呼叫第一条ssl线路时?我在回答中提到的答案是t0而不是a0,如果你想在a0中使用它,最后的ssl可能是sll a0,t0,2我不想在t0中使用它,我从a0中的2开始,我应该得到24,我的意思是,在这种情况下,我得到18,而不是6。
sll $t0, $a0, 1
add $t0, $t0, $a0
sll $a0, $t0, 2