下表显示了产生结果的指令与使用结果的指令之间的操作延迟。
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
假设每条指令执行一个周期,执行上述代码段所需的周期数是多少?
(A) 7
(B) 10
(C) 13
(D) 14答案: (C)
解释:
在给定的问题中,有7条指令,每条指令需要1个时钟周期才能完成。 (可以使用流水线)
如果指令是在执行阶段和任何其它指令s不能是在执行阶段。因此,将至少采用7个时钟周期。
现在,基于两个指令的操作,应该在两个指令之间存在等待时间或延迟。表中的EX-第一行表示,两个操作之间,其中第一是生产的ALU操作的结果和第2次使用的结果应该有2首时钟个循环的延迟。
时钟周期:
1) 加载R1,位置1;从内存位置Loc1加载R1
只需1个时钟周期,只需将R1加载到loc1即可。
2) 加载R2,位置2;从内存位置Loc2加载R2
只需1个时钟周期,只需将r2加载到loc2即可。
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个时钟周期的延迟,其中由于I4而已经有1个时钟周期延迟,因此I4和I5之间有一个时钟周期延迟。
6) MPY R1,R2,R3;将R1和R2相乘并将结果保存到R3中
R3 = R1 * R2;
该指令使用指令5的结果,因为指令5和6均为ALU,因此应该有2个时钟周期的延迟。
7) 存储R3,位置3将R3存储在内存位置Loc3中
该指令取决于ALU指令6和存储的指令7,因此它们之间应有2个时钟周期的延迟。
因此,总共将有13个时钟周期。
此解决方案由Shashank Shanker khare提供。
这个问题的测验