对于在ARM CPU上处理数据异常的正确方法,我有些困惑。
例如,这文档指出,当输入数据中止异常状态时,LR寄存器被设置为PC-8的地址。我假设在错误加载或存储指令之后的2条指令被取出到管道中。但返回PC-8地址真的安全吗?如果紧接错误加载指令之后的指令是一个分支,那该怎么办?这是否意味着PC寄存器实际上被设置为分支目标指令,而不是顺序跟随加载指令的寄存器。在这种情况下,返回到PC-8将返回到程序中的某个随机位置,在分支目的地之后的2步),而不是错误的加载指令。我是不是漏掉了什么?
发布于 2014-04-26 23:24:45
如果一个LDR或STR中止,下面两个指令中的一个是分支,那么分支还没有产生任何效果,而中止模式的LR将包含中止指令+ 8的地址。因此,如果您想要重新执行中止指令,那么LR-8就是要返回的地址。
https://stackoverflow.com/questions/23316378
复制相似问题