10 *($ a0 + 4),带MIPS组装说明

时间:2018-08-01 09:42:08

标签: mips instructions

在回答问题时,你们通常会非常迅速和乐于助人,所以我要就我遇到的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

1 个答案:

答案 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

记住要写评论