我给出了这个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
我应该假设没有结构性危险并且延迟分支被使用。
问题是:
我准备考试,我不太明白这种延迟分支的概念。任何帮助将不胜感激。
答案 0 :(得分:1)
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
缺乏结构性危险提示基本上意味着您不必考虑其他管道效应。
答案 1 :(得分:1)
lw r4,0(r1)
将在分支被执行之前执行。这就是推迟分支的原因。or r4,r2,r3
覆盖。答案 2 :(得分:1)
延迟分支意味着无论是否采用分支,都会执行分支语句后面的指令。
以下是我对你问题的回答:
如果分支
,将如何执行指令分支后面的指令将被执行,所以:
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
指令可能会发出陷阱,在这种情况下,您的行为会出现错误
如果没有分支,即分支条件不满足怎么办
然后没有问题,程序继续执行