Assembly SPSR正在更改模式,但无法更改armv7中的CPSR模式

Assembly SPSR正在更改模式,但无法更改armv7中的CPSR模式,assembly,arm,Assembly,Arm,我正在尝试更改处理器的模式。我已经尝试了以下代码,我能够将SPSR模式更改为监视模式 mov r0, #0x16; msr SPSR, r0; 但当我在CPSR上尝试同样的代码时。我没有从默认模式(主管模式)得到任何更改 mov r0, #0x16; msr CPSR, r0; mov r0, #0x10; msr CPSR, r0; 然后我尝试了以下代码,我能够将SPSR模式更改为用户模式 mov r0,#0x10; msr SPSR, r0; 但是,当我在CPSR

我正在尝试更改处理器的模式。我已经尝试了以下代码,我能够将SPSR模式更改为监视模式

mov r0, #0x16;  
msr SPSR, r0;
但当我在CPSR上尝试同样的代码时。我没有从默认模式(主管模式)得到任何更改

mov r0, #0x16;  
msr CPSR, r0;
mov r0, #0x10;  
msr CPSR, r0;  
然后我尝试了以下代码,我能够将SPSR模式更改为用户模式

mov r0,#0x10;  
msr SPSR, r0;
但是,当我在CPSR上尝试相同的代码时,我没有从默认模式(主管模式)得到任何更改

mov r0, #0x16;  
msr CPSR, r0;
mov r0, #0x10;  
msr CPSR, r0;  

我希望msr指令能够处理任何状态寄存器。有人能解释这种行为吗。以及更改CPSR模式的正确策略。

通常使用
CPS
更改模式。改变模式很大程度上取决于上下文(这里有双重含义)。您有什么CPU,处于什么模式,以及为什么要更改上下文。已经有不同的例子(Q/A)。我看到了关于这方面的不同SO链接。我的CPSR处于主管模式。我试过CPS#0x16;也可以从监控模式更改为监控模式。它没有任何效果。你的CPU有TrustZone吗?你是在正常的世界还是安全的世界?我是在安全的世界让我猜你是在炒作模式?这是一个有点痛苦,如果切换出hyp模式。如前所述,那你为什么要改变模式呢。更好地将处理器引导到您的代码中,而不是试图撤消其他人的引导代码通常您使用
CPS
来更改模式。改变模式很大程度上取决于上下文(这里有双重含义)。您有什么CPU,处于什么模式,以及为什么要更改上下文。已经有不同的例子(Q/A)。我看到了关于这方面的不同SO链接。我的CPSR处于主管模式。我试过CPS#0x16;也可以从监控模式更改为监控模式。它没有任何效果。你的CPU有TrustZone吗?你是在正常的世界还是安全的世界?我是在安全的世界让我猜你是在炒作模式?这是一个有点痛苦,如果切换出hyp模式。如前所述,那你为什么要改变模式呢。更好地将处理器引导到代码中,而不是试图撤销其他人的引导代码