194-197行:
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr,r0
功能:设置CPU在SVC工作模式,获取最高等级的权限
指令分析:
- mrs 将状态寄存器传送至通用寄存器类指令
格式:MRS{<条件码>}Rd,CPSR}SPSR
其中:
Rd 目标寄存器,Rd不允许R15。
R=0 将CPSR中的内容传送目的寄存器。
R=1 将SPSR中的内容传送至目的寄存器。
例:
MRS R0,CRSR ;将CPSR中的内容传送至R0
MRS R3,SPSR ;将SPSR中的内容传送至R3 - 将通用寄存器的内容传送至状态寄存器。
格式:
MSR{<条件码>CPSR_f|SPSR_f,<#ommed_8r>
MSR{<条件码>CPSR_<field>|SPSR_<field>,Rm
例2:
仅置位C标志,保留N、Z、V标志。
MRS R0,CPSR ;将CPSR中的内容传送至R0
ORR R0,R0,#&1f ;置位R0的第29位
MSR CPSR_c,R0 ;再将R0中的内容传送至CPSR
注释:
MRS与MSR配合使用,作为更新PSR的读-修改-写序列的一部分。例如:改变处理器或清除标志Q。注意:当处理器在用户模式或系统模式下,一定不能试图访问SPSR
这条指令不影响条件码标志。 - BIC指令的格式为: BIC{条件}{S} 目的寄存器,操作数1,操作数2
IC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。
操作数1应是一个寄存器, 操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。
操作数2为32位的掩码,如果在 掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。
bic r0,r0,#0x1f
0x1f=11111b
其含义:清除r0的bit[4:0]位。 - ORR指令的格式为: ORR{条件}{S} 目的寄存器,操作数1,操作数2
ORR指令用于在两个操作数上进行逻辑戒运算,并把结果放置到目的寄存器中。
操作数1应该是一 个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
该指令常用于设置操 作数1的某些位。
指令示例: ORR R0,R0,#3 ;
该指令设置R0的0、1位,其余位保持不变。
orr r0,r0,#0xd3
0xd3=1101 0111
将r0与0xd3作算数或运算,然后将结果返还给r0,即把r0的bit[7:6]和bit[4]和bit[2:0]置为1。
orr ORR指令的格式为: ORR{条件}{S} 目的寄存器,操作数1,操作数2
ORR指令用于在两个操作数上进行逻辑戒运算,并把结果放置到目的寄存器中。
mrs r0, cpsr @ 将cpsr寄存器的值传给通用寄存器R0
bic r0, r0, #0x1f @ 0x1f=0001_1111 清除r0的[4:0]位,就是清零cpsr的模式位
orr r0, r0, #0xd3 @ 0xd3=1101_0011 置位r0的[7:6]、[4]、[1:0],禁止IRQ、禁止FIQ、工作状态位:ARM、进入管理模式
msr cpsr,r0 @ 1将r0通用寄存器的值传给cpsr寄存器