我需要多少个摊位才能正确执行以下指令。我有些困惑于我的操作,所以来这里寻求专家的答案。
lw $1,0($2);
beq $1,$2,Label;
请注意,判断分支是否发生的检查将在解码阶段进行。但是,beq指令的源寄存器rs(在本例中为$1)将在lw指令的写回阶段更新。因此,我们需要将内存阶段的新数据转发到beq指令的解码阶段吗?
阶段如下:
IF:指令获取; ID:指令解码 Ex:执行/ALU阶段 MEM:从内存读取数据 WB:将数据存储在目标寄存器中
这是我迄今为止所做的。
当lw处于执行阶段而beq处于解码阶段时,停顿条件变为真,并创建了一个气泡。现在,lw处于Mem阶段,而由于气泡,beq仍处于解码阶段,再次出现了停顿条件,第二个停顿已经发生。现在,lw处于WB(写回)阶段,而beq仍处于解码阶段,但$1的值仍将在WB阶段末更新,这最终意味着beq仍将使用错误的$1值。