好~我把(3)和(4)都整理成**流水线时序表**(5 级:IF/ID/EX/M/WB),空白表示该拍无操作。 # (3) 指令: I1: LOAD R1,[a] I2: LOAD R2,[b] I3: ADD R1,R2 (结果写回 R2) I4: STORE R2,[x] ### 时序表(到 14 拍) | 指令 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | | I1 | IF | ID | EX | M | WB | | | | | | | | | | | I2 | | IF | ID | EX | M | WB | | | | | | | | | | I3 | | | IF | ID | ID | ID | ID | EX | M | WB | | | | | | I4 | | | | | | | IF | ID | ID | ID | ID | EX | M | | > 说明:I3 在 ID 等待到 R1@5、R2@6 写回后才在第 7 拍完成读寄存器;I4 受 I3 占据 ID 反压,IF 被阻塞到第 7 拍开始;又因需等 R2@10 写回,ID 等到第 11 拍才读到新 R2,随后 EX→M 结束。 --- # (4) 指令(提示给定): I1: LOAD R1,[x] I2: LOAD R2,[a] I3: SHL R1 (x*2) I4: ADD R1,R2 (写回 R2) I5: STORE R2,[x] ### 时序表(到 16 拍) | 指令 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | | I1 | IF | ID | EX | M | WB | | | | | | | | | | | | | I2 | | IF | ID | EX | M | WB | | | | | | | | | | | | I3 | | | IF | ID | ID | ID | EX | M | WB | | | | | | | | | I4 | | | | | | | IF | ID | ID | ID | EX | M | WB | | | | | I5 | | | | | | | | | | IF | ID | ID | ID | ID | EX | M | * 关键等待: * I3 需等 R1@5 写回,故在 ID 等到第 6 拍读寄存器→7 EX→9 WB; * I4 需等 I3 的 R1 在第 9 拍写回,故在第 10 拍读寄存器→11 EX→13 WB; * I5 需等 R2 在第 13 拍写回,于第 14 拍读寄存器→15 EX→16 M(STORE 在 M 完成写内存)。 如果你想把这两张表导成可打印的 Word/Excel,我也可以直接帮你生成文件。