我对在ARM CPU上处理数据中止异常的正确方法感到困惑。
例如this文件说当输入数据中止异常状态时,LR寄存器被设置为PC-8的地址。我假设在错误的加载或存储指令之后的2条指令被提取到管道中。但返回PC-8地址真的很安全。如果紧跟在错误加载指令之后的指令是分支怎么办?这是否意味着PC寄存器实际上设置为分支目标指令而不是顺序跟随加载指令的指令。在这种情况下,返回到PC-8将返回到程序中的一些随机位置,分支目的地后面的两个步骤) 而不是错误的加载指令。我在这里错过了什么吗?
答案 0 :(得分:1)
如果LDR
或STR
中止,并且以下两个指令之一是分支,那么分支将不会产生任何影响,并且中止模式的LR
将包含中止指令的地址+ 8.因此,如果要重新执行中止指令,LR-8
是要返回的地址。