本文共 664 字,大约阅读时间需要 2 分钟。
首先,得说下ARM的工作模式,如图所示,处理器一般运行在user模式,当发生异常时,便会进入相应的模式去执行,svc模式即supervisor,管理模式,一般情况下是操作系统所运行的模式 此模式下处理器有权限去访问一些受保护的寄存器,因此我们需要将处理器设置为此模式来进行一些必要的初始化。
修改处理器的工作模式需要更改处理器的状态寄存器cpsr的相应位,如下图所示,cpsr的[0-4]位为mode位,当其值为10011=0x13时,即可设置为svc模式
set_svc: mrs r0 ,cpsr bic r0 ,#0x1f orr r0 ,#0xd3 @理论上M[4-0]位为10011 0x13即可,此处为1101 0011 多了I,F,T:关闭了IRQ和FIQ,处理器工作在arm模式 msr cpsr,r0 mov pc,lr
第一步: 将这5位全部清零 bic指令
第二步: 在给某些位置1 orr指令
同时这里会用到msr指令 和 mrs指令
原因: 因为在访问CPSR/SPSR这两个寄存器时 ,先要把寄存器导入到通用寄存器当中做相应修改然后再写入,而不能直接修改GPSR/SPSR这两个寄存器。
msr: 将通用寄存器的值写入CPSR或者SPSR寄存器
mrs: 将CPSR寄存器的值导入到通用寄存器中
转载地址:http://qwbtb.baihongyu.com/