我正在学习手臂架构。
1. 我认为 CPSR 分配了 5 位来指定它正在执行的当前模式。因为我们只有大约 6-7 种不同的模式,3 位就足够了。那么为什么我们有 5 个相同的位呢?
2. system/supervisor模式有什么区别?操作系统在哪种模式下执行它的代码?
3. 另外我想知道是否可以手动从用户模式切换到系统/主管模式,无需 swi 调用等。什么会限制我这样做?
4. 当我切换到超级用户模式时,我如何使用用户模式寄存器以及该模式已经存在的存储寄存器?
1 回答
为什么要将当前模式压缩为尽可能少的位?或许设计者认为如果模式位更分散,ARM 的设计会更简洁。此外,CPSR 中的备用位并不短缺。
但是,您可能会注意到此处列出的所有 8 种模式都将第 4 位设置为 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 中不受支持。
主管和系统模式不同,请参阅上面链接文章中的列表。至于操作系统使用哪种模式,这取决于操作系统。在系统模式出现之前的旧日子里,会使用管理员模式。我不能说系统模式的出现是否改变了这一点。
我相信如果不使用 SWI,就无法从用户模式切换到主管模式。这是故意的,它是一种安全/稳定性功能,可以防止没有适当权限的进程通过访问它们不应该能够访问的内存位置而导致系统不稳定。
为什么要在主管模式下使用分组用户模式寄存器?您无法从管理员模式中获取的唯一用户模式寄存器是 R13 和 R14。