这里记录的ARM杂项指令包括: SWI & MRS & MSR
* SWI (这个指令中关于立即数的详细作用等我以后用到再详细了解一下,这里先大概知道一下)
软中断指令,SWI指令用于产生软中断,从而实现在用户模式下变换到管理模式,CPSR保存到管理模式的SPSR中,执行转移到SWI向量,在其它模式下也可以使用SWI指令,处理用于的切换到管理模式。
指令格式:
SWI{cond} immed_24
其中:
immed_24: 24位立即数
eg:
SWI 0
SWI 0x123456
注:等以后用到这个指令之后再详细回来重写这个指令
* MRS
读状态寄存器指令,在ARM处理器中,只有MRS指令可以将状态寄存器(CPSR/SPSR)读出到通用寄存器。
指令格式:
MRS{cond} Rd,psr
其中:
Rd: 目标寄存器,不能为R15(PC)
psr: CPSR/SPSR
eg:
MRS R1,CPSR
* MSR
写状态寄存器指令,在ARM处理器中,只有MSR指令可以直接设置状态寄存器。
指令格式:
MSR{cond} psr_fields,#immed_8r
MSR{cond} psr_fields,Rm
其中:
psr: CPSR/SPSR
fields: 指定传送的区域。格式为下面的一种或多种,字母都是小写
c控制域屏蔽字节(psr[7~0])
x拓展域屏蔽字节(psr[18~8])
s状态域屏蔽字节(psr[23~19])
f标志域屏蔽字节(psr[31~24])
#immed_8: 要传送到状态寄存器指定域的8位立即数
Rm: 要传送到状态寄存器指定域的数据的源寄存器
eg:
MSR CPSR_c #0x03
MSR CPSR_cxsf,R3
注:只有在特权模式下才能修改状态寄存器(除了用户模式外的其它的6种模式)
程序中不能通过MSR指令直接修改CPSR的T控制位来实现ARM状态和Thumb状态的切换。