基本上我遵循这些命令有一些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的值?我们需要在哪个阶段停滞?我搜索了很多来源,但没有找到任何关于加载地址危险的文章。
答案 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
会出现同样的问题。