下表显示了产生结果的指令和使用结果的指令之间的操作延迟。
Load R1, Loc 1; Load R1 from memory location Loc1
Load R2, Loc 2; Load R2 from memory location Loc 2
Add R1, R2, R1; Add R1 and R2 and save result in R1
Dec R2; Decrement R2
Dec R1; Decrement R1
Mpy R1, R2, R3; Multiply R1 and R2 and save result in R3
Store R3, Loc 3; Store R3 in memory location Loc 3
假设每条指令需要一个周期来执行,执行上述代码段所需的周期数是多少?
(一) 7
(乙) 10
(三) 13
(四) 14答案: (C)
解释:
在给定的问题中有 7 条指令,每条指令需要 1 个时钟周期才能完成。 (可以使用流水线)
如果指令是在执行阶段和任何其它指令s不能是在执行阶段。因此,至少需要 7 个时钟周期。
现在,根据它们的操作,两个指令之间应该存在延迟或延迟。表的第1行表示,在第一个生成 ALU 操作结果和第二个使用结果的两个操作之间,应该有 2 个时钟周期的延迟。
时钟周期:
1) 加载 R1,位置 1;从内存位置 Loc1 加载 R1
只需 1 个时钟周期,只需在 loc1 上加载 R1。
2) 加载 R2,位置 2;从内存位置 Loc2 加载 R2
只需 1 个时钟周期,只需在 loc2 上加载 r2。
3) 添加R1、R2、R1;将 R1 和 R2 相加并将结果保存在 R1 中
R1=R1+R2;
因此,该指令使用的是 R1 和 R2 的结果,即指令 1 和指令 2 的结果。
因为指令 1 是加载操作,指令 3 是 ALU 操作。因此,指令 1 和指令 3 之间应该有 1 个时钟周期的延迟。由于 I2 已经存在。
因为指令 2 是加载操作,指令 3 是 ALU 操作。因此,指令 2 和指令 3 之间应该有 1 个时钟周期的延迟。
4) 12月R2;递减 R2
该指令依赖于指令 2,指令 2 和指令 4 之间应该有一个时钟周期的延迟。因为指令 2 是加载,4 是 ALU。由于指令 3,它已经存在。
5) 减 R1 减 R1
该指令依赖于指令 3
由于指令 I3 是 ALU,而 I5 也是 ALU,因此它们之间应该有 2 个时钟周期的延迟,其中 1 个时钟周期延迟由于 I4 已经存在,因此 I4 和 I5 之间的一个时钟周期延迟。
6) MPY R1、R2、R3;将 R1 和 R2 相乘并将结果保存在 R3 中
R3=R1*R2;
该指令使用指令 5 的结果,因为指令 5 和 6 都是 ALU,所以应该有 2 个时钟周期的延迟。
7) Store R3, Loc 3 在内存位置 Loc3 中存储 R3
该指令依赖于 ALU 指令 6 和存储指令 7,因此它们之间应该有 2 个时钟周期的延迟。
因此,总共有 13 个时钟周期。
该解决方案由Shashank Shanker khare 提供。
这个问题的测验