在回答问题时,你们通常会非常迅速和乐于助人,所以我要就我遇到的MIPS问题寻求帮助。我尝试了一下,您可以在下面看到我的代码,但是我感觉到这是错误的,因为10使我感到困惑。我需要做的就是告诉别人我是否走对头(如果代码错误,那么我对MIPS还是陌生的),或者给出提示/显示有效的代码。
这里是:10*($a0+4)
,我应该将其存储在$v0
我的代码:
addi $t0, $a0, 2
li $t1, $t1, 3
li $t2, $t2, 1
addi $t3, $t2, $t1
sll $v0, t3, $t0
答案 0 :(得分:0)
如果您在代码中添加了注释,则会立即发现问题
addi $t0, $a0, 2 # $t0 = $a0 + 2
li $t1, $t1, 3 # $t1 = 3
li $t2, $t2, 1 # $t2 = 1
addi $t3, $t2, $t1 # $t3 = $t2 + $t1 = 3
sll $v0, t3, $t0 # $v0 = $t3 << $t0 = 3 << ($a0 + 2) = 8*($a0 + 2)
但是等等! addi
用于添加立即数,因此这两行将导致语法错误。 li
是采用单个操作数的伪指令,因此两行li
的语法也错误。 $
的最后一行中也缺少t3
要将x乘以10,可以使用mult
指令(在这种情况下可能效率不高)或执行(x << 3) + (x << 1)
。一个示例实现就是这样
addi $a0, $a0, 4 # $a0 = $a0 + 4
sll $a0, $a0, 1 # $a0 = $a0 << 1 = 2*$a0
sll $t0, $a0, 2 # $t0 = $a0 << 3 = 8*$a0
add $v0, $t0, $a0
记住要写评论