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 阶段才会存储结果,因此第二条指令无法开始获取结果。您将如何通过插入 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