危险(装配)

时间:2018-03-15 14:20:11

标签: assembly processor

我已经获得了此代码,我需要识别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号线和1号线之间存在RAW危险。 2,1& 3和4&我无法发现任何其他危险,但我相信还有更多。有人能帮我解释一下吗?

1 个答案:

答案 0 :(得分:0)

并发执行发生时会考虑大多数问题,并且不会按顺序执行改进性能指令。如果BNE修改了R8的内容(在ARM中它只是用标签修改PC或者用寄存器覆盖它而不修改它)那么我可以找到的危险在哪里:

1& 2:RAW(你有这个)

3& 4:RAW(您可以在您想要的内容之前加载4个字节的内容,假设它是字节可寻址的,R3确实具有您之前指令所需的地址)

4& 5:RAW(你有这个)

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

2& 5:WAW(如果BNE修改R8,那么2和5可以导致和WAW)

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