确定ARMv7-A上当前处理器模式的简单方法

时间:2014-03-14 19:38:55

标签: assembly arm armv7

在ARMv7-A处理器上,我正在寻找一种从任何模式确定处理器当前模式(用户,主管,IRQ等)的简单方法。这将允许我动态决定是否执行某些操作,例如进行主管呼叫或直接执行操作。

乍一看,这看起来很简单。 CPSR包含(M)模式位,用于确定处理器模式。

ARMv7-A架构参考手册的修订版C.b的第1150页的B1.3.3节(程序状态寄存器)声明:

  

此字段只能在PL1或更高版本上写入。它的值可以在任何模式下读取,但ARM不推荐在PL0执行的软件使用它的值,或试图改变它。

因此,在用户模式下不推荐使用CPSR.M位,但应该可以使用。

然而,继续使用MRS实际阅读CPSR(这是我所知道的唯一方式)。 ARM的第1988页B9.3.8节(MRS)声明:

  

在用户模式下执行并访问CPSR的MRS返回的UNKNOWN值   CPSR。{E,A,I,F,M}字段。

由于这些字段未知,似乎没有办法从用户模式读取模式位。是否有其他方法可以从用户模式读取CPSR,或者某种替代方式来确定正在执行哪种模式代码?

我可能会检测未定义的指令异常,并在用户模式下尝试非法指令,但我希望有更好的方法。

0 个答案:

没有答案