我对这个有点不知所措。我正在上计算机体系结构课程,我们得到以下汇编代码:
ADDI $S4, $zero, 3
loop: LW $S1, 0($S5)
ADD $S6, $S1, $S6
SW $S6, 0($S5)
ADDI $S5, $S5, 4
ADDI $S4, $S4, -1
BNZ $S4, loop
我们应该用暂停来说明代码的流水线执行以说明危险,然后用图解说明它实现转发。该图是一个图表(标记为 1 2 3 4.... 的列我认为是循环;行标记为指令,所以我假设给定代码的每一行)。
所以我从流水线中得到的是它允许你一次执行多个指令。但是,如果在前一条指令写入该寄存器之前调用该寄存器,它将不得不停止。这遵循 IF->ID->EX->MEM->WB,其中寄存器在 ID 中读取,并在 WB 中写入。所以我如何看待这一点,每个周期,一条指令移动到该过程的下一步,同时执行下一条指令。对我来说,这听起来像是代码必须一直停止,直到第一条指令完成对寄存器的写入,然后指令集才能继续。我不知道我刚才所说的是否接近正确,也不知道如何填写图表以显示信息......
话虽如此,看代码,我认为应该在第 4 行 (SW $S6, 0($55)) 有一个摊位,因为 $S6 仍然会在舞台上...... EX?,这意味着它有还没有写,并且必须在那个阶段停止一次,一次用于 MEM,另一次用于 WB。
任何关于我应该去哪里的帮助将不胜感激。
谢谢