【问题标题】:MIPS - assembly BEQ commandMIPS - 汇编 BEQ 命令
【发布时间】:2014-08-07 21:10:13
【问题描述】:

我复制了一张我在 MIPS - Aseembly 上的作业图片。

我理解(我认为)代码中会发生什么,直到该行:

beq $11, $0, 3

我知道代码现在为地址创建了一个 PC-RELATIVE 分支:

PC+4+3*4 

但我不明白这里的代码是如何发生的 - 下一行要执行的是什么?

我会让我的问题更清楚:

Row 1: adds 15 to zero, puts it in $a0 register.

Row 2: ANDs $a0 register with 3, puts the result in $a0.

Row 3: ORs $a0 register with 22, puts the result in $a0.

Row 4: shifts $a0 to the left by 5 bits. Result - in $a0.

Row 5: if $a0 equals $a0, go to PC+4+6*24 address. The address is Row 7 which is:

slt $11, $10, $9

这会将值 0 放入 $t3 寄存器中,因为 $10=$9。

现在我进入第 8 行:

beq $11, $0, 3.

第 8 行有什么作用?

如有任何帮助,我们将不胜感激。

Direct link to my image - please click if you can't read properly.

【问题讨论】:

  • 由于在 MIPS 上,每个分支后面都有一个延迟槽,分支之后要执行的下一条指令将始终是分支之后的指令。但是,我认为这不是您要寻找的答案。我认为您需要更清楚地了解您要了解的内容。
  • 第 8 行是 beq,所以它是另一个比较和潜在的分支。不过,我想我可能错过了你的问题的重点。
  • 很难阅读,但屏幕截图似乎在您称为“第 5 行”的分支指令的延迟处放置了一条跳转指令。这会导致 MIPS 上出现未定义的行为。此外,“第 5 行”分支的目标似乎不是“第 7 行”,而是在某个位置之外。地址0x0040003C,我想。
  • @RossRidge 添加了图片链接,请查看编辑,非常感谢。

标签: assembly mips


【解决方案1】:

beq $11, $0, 3 表示如果$11 == $0 则从beq 跳转到前面的第三条指令。例如:

beq $11, $0, 3
instruction 1
instruction 2
instruction 3 < the target

数字 3 将首先进行符号扩展,然后添加到程序计数器 $pc 中:

$pc = $pc + 3 * 4 

或者简单地说:

$pc = $pc + 3 << 2

4 是因为每条 MIPS 指令都是 4 字节大小。

【讨论】:

  • 其实这是不正确的。 beq $rs, $rt, n 跳到 FOLLOWING 指令之后的第 n 条指令。因此,如果$11 等于$0,它将跳转到指令 4。
  • 我认为理查德是正确的。根据 MIPS 参考,如果采用 PC=PC+4+BranchAddr。
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多