【问题标题】:ARM CPSR - 5 bits for mode?ARM CPSR - 5 位模式?
【发布时间】:2013-03-29 09:50:51
【问题描述】:

我正在学习 arm 架构。
1. 我认为 CPSR 分配了 5 位来指定它正在执行的当前模式。因为我们只有大约 6-7 种不同的模式,3 位就足够了。那么为什么我们有 5 个相同的位呢?
2. system/supervisor模式有什么区别?操作系统在哪种模式下执行它的代码?
3. 另外我想知道是否可以手动从用户模式切换到系统/主管模式,无需 swi 调用等。什么会限制我这样做?
4. 当我切换到超级用户模式时,我如何使用用户模式寄存器以及该模式已经存在的存储寄存器?

【问题讨论】:

标签: architecture arm processor cpu-registers


【解决方案1】:
  1. 为什么要将当前模式压缩到尽可能少的位?或许设计者认为如果模式位更分散,ARM 的设计会更简洁。此外,CPSR中的备用位并不短缺。

    但是,您可能会注意到all 8 modes listed here have bit 4 set to 1。这是因为 ARM6(和 ARM7?)处理器支持四种额外的“26 位”模式,以便与 ARM2/ARM3 代码兼容。这四种 26 位模式的第 4 位设置为 0,并且是模拟 ARM2/ARM3 行为的用户、IRQ、FIQ 和主管模式的版本。在 ARM2/ARM3 中,没有 CPSR 和 SPSR,N、Z、C、V、I 和 F 标志位在 PC 的前 6 位,处理器模式在 PC 的低 2 位。由于 26 位模式未在我上面链接的文章中列出,我只能假设它们在以后的 ARM 中不受支持。

  2. 主管和系统模式不同,请参阅上面链接文章中的列表。至于操作系统使用哪种模式,这取决于操作系统。在系统模式出现之前的旧日子里,会使用管理员模式。我不能说系统模式的出现是否改变了这一点。

  3. 我相信不使用 SWI 就无法从用户模式切换到主管模式。这是有意为之的,它是一种安全/稳定性功能,可防止没有适当权限的进程通过访问不应访问的内存位置而导致系统不稳定。

  4. 为什么要在管理员模式下使用分组用户模式寄存器?唯一无法从管理员模式获取的用户模式寄存器是 R13 和 R14。

【讨论】:

  • 所以当在某些模式下 svc、udf、irq 等时,我不能使用碰巧被存储的寄存器。 (即)说我在每种模式下都存储了 r13 和 r14,所以 usr 模式 r13 和 r14 不能被触摸?
  • @deepak:如果您处于特权模式,则可以通过更改为相关模式,将值传输到非存储寄存器并更改背部。当然,您无法退出用户模式。不过,我仍然不确定您为什么要这样做。
  • ARMv5 或更高版本不支持 26 位模式。
猜你喜欢
  • 1970-01-01
  • 2017-12-19
  • 2021-02-20
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多