负载地址的危险以mips为单位

时间:2015-05-24 07:21:59

标签: assembly mips

基本上我遵循这些命令有一些mips指令

array: .word 10, 20, 30, 10,20, 30

  la $t0, array
  lw $t1, 0($t0)
  lw $t2, 4($t0)
  add $t1, $t2, $t1
  lw $t2, 8($t0)
  bne $t1, $t2, label
  sw $t2, 16($t0)

label:

对于前两个说明,我不知道"加载地址"可能会对下一个"加载词造成危害"指令,来自lw的$ t0是否需要来自la的$ t0的值?我们需要在哪个阶段停滞?我搜索了很多来源,但没有找到任何关于加载地址危险的文章。

1 个答案:

答案 0 :(得分:0)

la 是伪指令,可以重写为真正的MIPS指令。

la $t0, array
lw $t1, 0($t0)

作为示例,您可以将la写为以下

lui $t0,%hi_array
ori $t0,$t0,%lo_array
lw $t1, 0($t0)

当然,数据存在如下

1  2  3   4   5   6   7

IF ID EXE MEM WB
   IF ID  EXE MEM WB
      IF  ID  EXE MEM WB

ori指令需要在第三个时钟周期读取$t0,但在lui指令将其写入第五个时钟周期(即WB)之前,该值不可用。数据危害。 lw会出现同样的问题。