【问题标题】:Why is CPSR not a banked register?为什么 CPSR 不是银行寄存器?
【发布时间】:2013-09-05 14:13:51
【问题描述】:

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

【问题讨论】:

  • 不是真正的指令,来回复制数据,架构如果你可以看看它可能根本没有任何成本,银行业务将是更多触发器的成本。臂不是微编码的,因此此副本不需要时间,处理中断/事件的时钟周期之一也可以并行保存 cpsr。返回时也是如此。基本上,银行切换和 cpsr 的副本需要相同的确切时间。一个带有一点设置时间的时钟边沿。

标签: assembly arm


【解决方案1】:

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

cpsr活动 副本。为什么我们有一个已入库的lr 寄存器,但没有当前的pcspsrbanked cpsr 用于不同的模式;就像银行 lrpc 的不同模式一样。 banking 使得异常状态可以是透明的。 spsr 被存储为中断数据中止可能在任何模式下发生;我们需要保存它以便我们 stack 正确执行。普通的unbanked 用户模式永远不会与其他模式叠加。 模式变化是在异常情况中自动完成的。

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

【讨论】:

  • 系统模式的情况下,exceptionsp可以用作通用寄存器。目标系统模式包含一个真正的堆栈,它通常通过掩码包含一个任务控制块。最后一部分是许多操作系统设计所共有的,并非特定于 ARM
猜你喜欢
  • 2021-02-20
  • 2017-08-06
  • 2011-01-20
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 2019-03-21
相关资源
最近更新 更多