危害(组装)

Hazards (assembly)

我已获得此代码,我需要识别 RAW、WAR 和 WAW 危害。

1. MOV R3, R7
2. LD R8, (R3)
3. ADD R3, R3, 4
4. LOAD R9, (R3)
5. BNE R8, R9, L3

我认为第 1 和 2、1 和 3 以及 4 和 5 行之间存在 RAW 危险。我无法发现任何其他危险,但我相信还有更多。谁能帮我解释一下?

大部分问题都是在并发执行的时候考虑的,为了提高性能指令没有按顺序执行。如果 BNE 修改了 R8 的内容(在 ARM 中它只是用标签修改 PC 或用寄存器覆盖它而不修改它)那么我可以找到的危害在哪里:

1 & 2:RAW(你有这个)

3 & 4: RAW(假设它是字节可寻址的,并且 R3 确实具有您之前指令中想要的地址)

4 & 5: RAW(你有这个)

1 & 3:RAW,WAW(你得到了这个,但是当你写入 R3 并在 3 中读取它的值时,WAW 也可能发生。)

2 & 5: WAW (如果BNE修改了R8那么2和5会导致和WAW)

2 & 3:WAR(如果 3 先行,则 2 的值会错误)