在执行条件跳转时如何在管道中查找指令

时间:2019-03-14 01:31:28

标签: assembly pipeline y86

我在准备考试时遇到了一个问题。问题是

回答以下有关在类F的类中介绍的5级管​​道中条件跳转的实现的以下问题时,请考虑以下y86代码段: D,E,M,WB。

1: irmovq $8, %rsi
2: irmovq $1, %r9
3: jmp label1
4: label2: addq %rsi, %r10
5: label1: subq %r9, %rsi
6: jne label2
7: andq %rbx, %rdx
8: irmovq $10, %r10
9: halt

a。当jne指令完成F级时,处理器中下一条指令的地址是否可用?圈一个

                     YES                 NO

b。如果处理器假定条件跳转为TAKEN,那么当jne指令完成F级时,下一条指令的地址在哪个管道内部寄存器(变量)中?圈一个                 icode ifun rA rB valC valP valM valE

c。如果处理器假定条件跳转未选中,那么当jne指令完成F级时,下一条指令的地址在哪个管道内部寄存器(变量)中?圈一个

            icode  ifun  rA  rB  valC  valP  valM  valE
d。在哪个阶段之后,管道会知道是否应该执行条件跳转?圈出正确的阶段

                      F D E M WB

我的答案没有解释。以下是答案:

1)是

2)valC

3)valP

4)E

请其他人解释一下该过程。我正在考试,我真的需要帮助

1 个答案:

答案 0 :(得分:1)

  

管道将在哪个阶段之后知道是否应该执行条件跳转?圈出正确的阶段

某些有序流水线CPU在解码阶段处理已采取/未采取的分支,以使其在管道中只有1个周期的气泡。 (例如,MIPS做到了这一点,这就是为什么1个分支延迟槽足以使经典的5级MIPS管道完全隐藏控制依赖项/危害。https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Control_hazards)。

在分支到达Execute之前停滞或推测的设计也是可行的,但是性能较低。

因此,除非您对y86经典5级管道的设计有其他线索,否则这个问题似乎无法回答。

在“解码”中解析分支方向要求这些标志尽快准备好,因此,cmp或sub以及jcc始终会导致数据依赖性停滞。检查标志比在解码后检查一个寄存器 更容易,该寄存器需要检查并从寄存器文件中读取。 (MIPS没有标志;它具有beq $t1, $t2, target之类的指令以相等性分支(可以用比减法更少的等待时间来完成),或者bltz $t1, target来检查一个reg的符号位。 / p>