流水线 MIPS 延迟分支示例
Pipelined MIPS delayed branching example
我得到了这个 MIPS 伪汇编代码:
add r7,r8,r9
beq r1,r2,40 ---
lw r4,O(r1) '
sub r5,r1,r4 '
and r6,r4,r2 '
<--------------- '
or r4,r2,r3
我假设 没有结构性危害 并且使用了 延迟分支 。
问题是:
- 分支情况下指令如何执行
- 延迟槽中的指令是否有用
- 执行延迟槽中的指令会不会产生错误的结果
- 如果没有分支,即不满足分支条件怎么办
我正在准备考试,对延迟分支这个概念不是很理解。任何帮助将不胜感激。
MIPS 有一个五级流水线。一个效果是无论是否采用分支,都会执行分支之后的指令。简而言之,与传统的汇编语言相比,您需要将分支上移一条指令。
因此,如果采用分支,则执行的代码将是:
add r7,r8,r9
lw r4,O(r1)
or r4,r2,r3
如果分支未被采用,则执行的代码将是:
add r7,r8,r9
lw r4,O(r1)
sub r5,r1,r4
and r6,r4,r2
or r4,r2,r3
缺少结构性危险提示本质上意味着您不必考虑其他管道效应。
-
lw r4,0(r1)
将在分支发生之前执行。这就是延迟分支。
- 不,如果分支被占用则不会。
- 不,因为 r4 无论如何都会被
or r4,r2,r3
覆盖。
- 所有指令按顺序执行。
延迟分支是指无论是否采用分支,都执行分支语句后面的指令。
下面是我对您问题的回答:
分支情况下指令如何执行
分支后面的指令将被执行,所以:
add r7,r8,r9
beq r1,r2,40
lw r4,O(r1) # This instruction is executed even if the branch is taken
or r4,r2,r3
延迟槽中的指令是否有用
在这种情况下,如果分支未被采用,则为是。如果采用分支 r4 将被覆盖,因此它不会有用
执行延迟槽中的指令会不会产生错误的结果
不,因为如果采用分支指令 or r4,r2,r3
将覆盖 r4
。
但是请注意,延迟槽中的 lw
指令可能会发出陷阱,在这种情况下你会得到错误的行为
如果没有分支,即不满足分支条件怎么办
那就没问题了,程序继续执行
我得到了这个 MIPS 伪汇编代码:
add r7,r8,r9
beq r1,r2,40 ---
lw r4,O(r1) '
sub r5,r1,r4 '
and r6,r4,r2 '
<--------------- '
or r4,r2,r3
我假设 没有结构性危害 并且使用了 延迟分支 。
问题是:
- 分支情况下指令如何执行
- 延迟槽中的指令是否有用
- 执行延迟槽中的指令会不会产生错误的结果
- 如果没有分支,即不满足分支条件怎么办
我正在准备考试,对延迟分支这个概念不是很理解。任何帮助将不胜感激。
MIPS 有一个五级流水线。一个效果是无论是否采用分支,都会执行分支之后的指令。简而言之,与传统的汇编语言相比,您需要将分支上移一条指令。
因此,如果采用分支,则执行的代码将是:
add r7,r8,r9
lw r4,O(r1)
or r4,r2,r3
如果分支未被采用,则执行的代码将是:
add r7,r8,r9
lw r4,O(r1)
sub r5,r1,r4
and r6,r4,r2
or r4,r2,r3
缺少结构性危险提示本质上意味着您不必考虑其他管道效应。
-
lw r4,0(r1)
将在分支发生之前执行。这就是延迟分支。 - 不,如果分支被占用则不会。
- 不,因为 r4 无论如何都会被
or r4,r2,r3
覆盖。 - 所有指令按顺序执行。
延迟分支是指无论是否采用分支,都执行分支语句后面的指令。
下面是我对您问题的回答:
分支情况下指令如何执行
分支后面的指令将被执行,所以:
add r7,r8,r9
beq r1,r2,40
lw r4,O(r1) # This instruction is executed even if the branch is taken
or r4,r2,r3
延迟槽中的指令是否有用
在这种情况下,如果分支未被采用,则为是。如果采用分支 r4 将被覆盖,因此它不会有用
执行延迟槽中的指令会不会产生错误的结果
不,因为如果采用分支指令
or r4,r2,r3
将覆盖r4
。但是请注意,延迟槽中的
lw
指令可能会发出陷阱,在这种情况下你会得到错误的行为如果没有分支,即不满足分支条件怎么办
那就没问题了,程序继续执行