【正确答案】两条指令发生数据相关冲突的例子如下:
ADD R1,R2,R3 (R2)+(R3)→R1
(将寄存器R2和R3的内容相加存储到寄存器R1)
SUB R4,R1,R5 (R1)-(R5)→R4
(将寄存器R1的内容减去寄存器R5的内容,并将相减的结果存储到寄存器R4)
分析如下:
首先这两条指令发生写后读(RAW)相关。两条指令在流水线中的执行情况见表1。
表1
[*]
ADD指令在时钟4时将结果写入寄存器堆(R1),但SUB指令在时钟3时读寄存器堆(R1)。本来ADD指令应先写入R1,SUB指令后读R1,结果变成SUB指令先读R1,ADD指令后写R1,因而发生数据冲突。如果硬件上不采取措施,则第2条指令SUB至少应该推迟两个时钟周期(2×100ns),即SUB指令中的指令译码并取数周期应该在ADD指令的写回周期之后才能保证不会出错,见表2。
表2
[*]