流水线MIPS推迟了分支示例

时间:2015-01-29 16:11:01

标签: assembly mips pipeline

我给出了这个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

我应该假设没有结构性危险并且延迟分支被使用。

问题是:

  • 如果分支
  • ,将如何执行指令
  • 是有用的延迟槽中的指令
  • 将在延迟槽中执行指令产生错误的结果
  • 如果没有分支,即分支的条件不符合
  • ,该怎么办?

我准备考试,我不太明白这种延迟分支的概念。任何帮助将不胜感激。

3 个答案:

答案 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)

  1. lw r4,0(r1)将在分支被执行之前执行。这就是推迟分支的原因。
  2. 不,如果分支被采取则不行。
  3. 不,因为无论如何r4都会被or r4,r2,r3覆盖。
  4. 所有说明按顺序执行。

答案 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指令可能会发出陷阱,在这种情况下,您的行为会出现错误

  • 如果没有分支,即分支条件不满足怎么办

    然后没有问题,程序继续执行