代码之家  ›  专栏  ›  技术社区  ›  Summer_More_More_Tea

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

  •  2
  • Summer_More_More_Tea  · 技术社区  · 16 年前

    我想了很久这个问题:ARM7(有3条流水线)处理器什么时候增加PC寄存器。

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

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

    提前谢谢。

    1 回复  |  直到 16 年前
        1
  •  2
  •   bobince    16 年前

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

    ARM7在管道中的什么位置 增加它的PC是不相关的,因为PC在执行期间的价值,因此中止处理程序中LR的价值是作为ARM体系结构标准的一部分制定的,主要基于古代ARM2对PC所做的事情。

    但是,如果原始状态是Thumb,我认为PC应该被分配LR-2

    这是有道理的,但是异常处理程序需要知道导致它触发的原始代码是ARM还是Thumb代码。这可能也会影响兼容性,因为有大量非拇指感知的异常处理代码。因此,Thumb体系结构将LR-on-entry伪造为异常处理程序,以便处理程序始终可以使用相同的指令返回,即它们用于非Thumb代码的指令。

    推荐文章