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

问题描述:

我一直在思考这个问题:ARM7(带有3个流水线)处理器何时增加其PC寄存器。ARM7处理器何时增加其PC寄存器?

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

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

似乎很长的问题。我真的希望任何人都能帮助我得到正确的答案。

在此先感谢。

您从未定义的指令处理返回LR,因为它指向导致陷阱的指令之后的指令;你不想再次返回到同一个未定义的指令,它只会碰到同样的陷阱。

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

在基于哪一点时流水线上的ARM7 实际上增加其PC是无关紧要的,因为PC的执行并因此在中断处理程序LR的价值在价值的东西放下了ARM架构标准的一部分,很大程度上取决于古代的ARM2在PC上所做的。

不过,我认为PC应该分配LR-2,如果原来的状态是拇指

这将是有意义的,但随后的异常处理程序需要知道是否导致它的原代码触发是ARM还是Thumb代码。这可能也会影响到兼容性,因为有很多不支持Thumb的异常处理代码。所以,相反,Thumb架构在进入异常处理程序时欺骗了LR,以便处理程序可以始终使用相同的指令返回,它们曾用于非Thumb代码。

+0

优秀的答案。 – 2010-04-17 17:00:39