我已经获得了此代码,我需要识别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&我无法发现任何其他危险,但我相信还有更多。有人能帮我解释一下吗?
答案 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会有错误的值)