mov $10, %eax
add $2, %eax
mov $4, %ebx
mov $5, %ecx
add $1, %ebx
add $1, %ecx
add %ecx, %eax
add %ebx, %eax
如果你有上面的程序集,一般的5阶段管道看起来如下所示,但由于存在数据依赖性,第一条指令不会将结果存储到第5阶段,因此第二条指令可以& #39;开始取结果。您如何通过插入NOP指令等待周期结束?
Instruction Cycle 1 2 3 4 5 6 7
mov $10, %eax IF ID EX MEM WB
add $2, %eax IF ID EX MEM WB
mov $4, %ebx IF ID EX MEM WB
编辑不确定这是否正确,但这是我提出的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
mov $10, %eax F D E M W
NOP F D E M W
NOP F D E M W
NOP F D E M W
add $2, %eax F D E M W
mov $4, %ebx F D E M W
mov $5, %ecx F D E M W
NOP F D E M W
NOP F D E M W
add $1, %ebx F D E M W
add $1, %ecx F D E M W
NOP F D E M W
NOP F D E M W
NOP F D E M W
add %ecx, %eax F D E M W
add %ebx, %eax F D E M W