首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM7处理器何时增加其PC寄存器?

ARM7处理器何时增加其PC寄存器?
EN

Stack Overflow用户
提问于 2010-04-15 19:35:25
回答 1查看 994关注 0票数 3

我在思考这个问题:ARM7(有3条流水线)处理器什么时候增加它的PC寄存器。

我原以为一条指令执行完后,处理器会先检查最后一次执行中是否有异常,然后根据当前状态将PC加2或4。如果发生异常,ARM7将改变其运行模式,将PC存储在当前模式的LR中,并开始处理当前异常,而不修改PC寄存器。

但是在分析返回的指令时,这是没有意义的。我不明白为什么PC从未定义的指令异常返回时会分配LR,而LR-4从预取异常返回时会分配LR,这两个异常不是都发生在解码状态吗?更重要的是,根据我的教科书,当PC从预取-中止-异常返回时,无论处理器在异常发生前处于什么状态(ARM或Thumb),都会被分配LR-4。然而,我认为如果原始状态是Thumb,那么PC应该被分配LR-2,因为Thumb指令是2字节长,而不是ARM指令的4字节长,我们只想在当前状态下回滚指令。我的推理有没有什么问题,或者教科书有什么问题。

这似乎是一个很长的问题。我真的希望有人能帮我找到正确的答案。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-15 20:50:01

您从未定义指令处理返回到LR,因为它指向导致陷阱的指令之后的指令;您不希望再次返回相同的未定义指令,它只会命中相同的陷阱。

如果您想再次执行相同的指令,您可以从prefetch-abort返回LR-4;大概是因为您已经为它映射了一些内存,所以它现在可以工作了。

在流水线中的哪个点,ARM7实际上增加其PC是无关紧要的,因为在执行期间的PC的值以及随后的中止处理程序中的LR的值是作为ARM架构标准的一部分制定的,这主要基于古老的ARM2对其PC所做的事情。

但是,我认为如果PC的初始状态是Thumb,则应分配LR-2

这是有道理的,但是异常处理程序需要知道导致它触发的原始代码是ARM代码还是Thumb代码。这可能也会影响兼容性,因为周围有很多非拇指感知的异常处理代码。因此,Thumb架构在进入异常处理程序时伪造LR,以便处理程序始终使用相同的指令返回,这是它们用于非Thumb代码的指令。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2644837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档