为什么CPSR不是存储库?

时间:2013-09-05 14:13:51

标签: assembly arm

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

1 个答案:

答案 0 :(得分:1)

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

cpsr活动副本。为什么我们有一个库存lr注册,但不是当前pc?对于其他模式,spsr已存储 cpsr;就像不同模式的库存lrpc一样。 银行是为了使异常状态可以透明。 spsr存储为中断数据中止可能在任何模式下发生;我们需要保存它,以便我们堆栈正确执行。普通的 unbanked 用户模式永远不会与其他模式堆叠。 模式更改在异常条件中自动完成。

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