ARM模式和为什么有这么多?

Ili*_*om. 11 arm processor mode

我正在阅读/学习ARM架构......我想知道为什么有这么多模式(FIQ,用户,系统,主管,IRQ ......).

我的问题是为什么我们需要这么多模式?用户和系统不仅仅够用吗?

提前致谢.

Car*_*rum 11

这只是一个架构决策.多种模式的最大优点是它们具有一些存储寄存器.这些额外的寄存器允许您编写更简单的异常例程.

如果你只选择两个,那么只有USR和SYS可能是一个很好的选择,但是当你接受例外时会发生什么?正常的ARM模型是进入异常模式,在解决异常后将该异常模式的分区链接寄存器设置为指向要返回的指令,将处理器状态保存在异常模式的SPSR寄存器中,然后跳转到异常向量.USR和SYS共享所有寄存器 - 使用此模型,每次中断时都会丢弃函数返回地址(在LR中)!

FIQ模式尤其具有比其他异常模式更多的寄存器寄存器.这些额外的寄存器与FIQ的"F"部分保持一致 - 它代表"快速".无需在软件中保存和恢复更多处理器上下文将加速您的中断处理程序.


Dan*_*Dan 5

没有太多可以补充卡尔的答案.不确定你正在谈论的ARM处理器的系列/架构,所以我只是假设您正在谈论ARM7/9/11的问题(FIQ,IRQ等).我不会列举每种ARM架构变体中每种模式之间的所有差异.

除了Carl所说的,还有一些其他优点,可以针对不同情况采用不同的模式:

  • 例如,在FIQ中,您不必立即分支,您可以继续执行.除了其他例外,您必须立即分支

  • 使用不同的模式,您可以自然支持单独的堆栈.如果您处于多任务处理(例如,RTOS)并且在处于中断模式时没有单独的堆栈,则必须在每个任务堆栈上建立额外的空间以应对最坏情况的中断情况

  • 在不同模式下,某些寄存器(例如CPSR,MMU regs等 - 取决于架构)是禁止的.某些指示同样如此.你不想让用户代码修改特权寄存器,现在呢?