我正在准备测试并有这样的例子。以下代码:
1: SLL $1, $1, 2
2: LW $2, 1000($1)
3: BEQL $2, $0, END
4: ADDI $3, $2, 1
5: MULT $3, $2
6: MFLO $4
END:
7: J QUIT
...
QUIT:
100: NOP
在 RISC 处理器(带有准 MIPS 指令集)上执行
- 五级管道
- 无绕过
- 没有动态调度
- 分支延迟槽
- 另外我们知道,该分支不会被占用
我的任务是了解分支延迟槽在这种情况下如何工作并构建正确的管道图。
我有一个官方的解决方案,它给出了下图,没有任何解释:
1: SLL $1, $1, 2 IDEMW
2: LW $2, 1000($1) I---DEMW
3: BEQL $2, $0, END I---DEMW
4: ADDI $3, $2, 1 IDx
5: MULT $3, $2 IDEMW
6: MFLO $4 I---DEMW
据我了解,ADDI 在分支延迟槽中执行,并在处理器理解后停止,该分支没有被采用,这导致我们得到错误的结果。我的问题是
- 我对吗?
- 如果是,为什么ADDI在Branch Delay Slot中执行而不是Jump?