0
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
4

0 回答 0