【问题标题】:When does an ARM7 processor increase its PC register?ARM7 处理器何时增加其 PC 寄存器?
【发布时间】:2011-02-08 08:17:57
【问题描述】:

我一直在思考这个问题:ARM7(具有 3 个管道)处理器何时增加其 PC 寄存器。

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

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

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

提前致谢。

【问题讨论】:

    标签: exception-handling arm computer-architecture


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2016-08-26
      • 2019-03-30
      • 2020-09-25
      • 1970-01-01
      • 2021-03-03
      相关资源
      最近更新 更多