【问题标题】:10*($a0+4) with MIPS assembly instructions10*($a0+4) 与 MIPS 汇编指令
【发布时间】:2018-08-01 09:42:08
【问题描述】:

当涉及到问题时,你们通常非常快速和乐于助人,所以我打算就我遇到的 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

【问题讨论】:

  • 请添加 cmets 以显示您的理解。你有没有尝试组装/运行它?

标签: mips instructions


【解决方案1】:

如果您将 cmets 放入代码中,您会立即看到问题

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 &lt;&lt; 3) + (x &lt;&lt; 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

记得写cmets

【讨论】:

  • 非常感谢您的帮助!我对这个很困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多