3

在 ARM 中,SPSR 是一个分组寄存器,即在每次模式更改后,CPSR 被复制到 SPSR,在模式返回后,SPSR 被复制回 CPSR。为什么 CPSR 不直接存入银行?似乎每次模式更改都有两个附加指令(复制到spsr,复制到cpsr)

4

1 回答 1

1

手动模式更改不是ARM的效率目标。通常,手动模式更改仅用于在启动或初始化时设置堆栈等。

活动cpsr副本。为什么我们有一个银行注册但没有当前?这是一个不同的模式;就像银行是一种不同的模式。银行业务使异常状态可以透明。在任何模式下都可能发生中断或数据中止我们需要保存它,以便我们正确地堆栈执行。正常的unbanked用户模式永远不会与其他模式叠加。 模式更改在异常情况下自动完成。lrpcspsr cpsrlrpcspsr

设置模式寄存器以使异常处理非常有效和灵活。 手动模式更改不是很方便,因为它们通常不使用。您可以在切换模式之前将任何已存储的寄存器复制到未存储的寄存器,以便在两者之间转移状态;当系统模式用于所有异常处理时,这很常见。在这种情况下,寄存器通常由内核存储到任务上下文块中,这不是效率问题,因为存在将流水线的内存存储

于 2013-09-05T16:13:10.760 回答