在ARM中有个极其重要的寄存器,便是程序状况寄存器
在ARM Architecture Reference Manual手册中,ProgrammersModel的目录下,有Registers子目录
咱们介绍CPSR和SPSR
CPSR:Current Program Status Register
SPSR:Saved Program Status Register
CPSR:cpsr在用户级编程时用于存储条件码;CPSR包括条件码标志,中止制止位,当时处理器形式以及其他状况和操控信息。
SPSR:程序状况保存寄存器,用于保存CPSR的状况,以便反常回来后康复反常产生时的作业状况。
关于CPSR只要1个,关于SPSR有5个(Supervisor/abort/Undefined/interrupt/Fast各有1个):
CPSR 寄存器(和保存它的 SPSR 寄存器)中的位分配如下:
31 30 29 28 --- 7 6 - 4 3 2 1 0 N Z C V I F M4 M3 M2 M1 M0 0 0 0 0 0 User26 形式 0 0 0 0 1 FIQ26 形式 0 0 0 1 0 IRQ26 形式 0 0 0 1 1 SVC26 形式 1 0 0 0 0 User 形式 1 0 0 0 1 FIQ 形式 1 0 0 1 0 IRQ 形式 1 0 0 1 1 SVC 形式(设定CPU到SVC32形式) 1 0 1 1 1 ABT 形式 1 1 0 1 1 UND 形式 CPSR和SPSR的操作指令:mrs,msr
MRS
功用:将状况寄存器的内容传送至通用寄存器。
指令的格局为:MRS{<条件码>}Rd,CPSR}SPSR其间:Rd方针寄存器,Rd不允许R15。R=0 将CPSR中的内容传送意图寄存器。R=1 将SPSR中的内容传送至意图寄存器。注释:MRS与MSR合作运用,作为更新PSR的读-修正-写序列的一部分。例如:改动处理器或铲除标志Q。留意:当处理器在用户形式或体系形式下,必定不能企图拜访SPSR这条指令不影响条件码标志。例:MRS R0,CRSR ;将CPSR中的内容传送至R0MRS R3,SPSR ;将SPSR中的内容传送至R3
MSR
指令的格局为:
MSR{条件} 程序状况寄存器(CPSR或SPSR)_<域>,操作数
功用:
MSR指令用于将操作数的内容传送到程序状况寄存器的特定域中。其间,操作数可认为通用寄存器或当即数。<域>用于设置程序状况寄存器中需求操作的位,32位的程序状况寄存器可分为4个域:
位[31:24]为条件标志位域,用f表明;
位[23:16]为状况位域,用s表明;
位[15:8]为扩展位域,用x表明;
位[7:0]为操控位域,用c表明;
该指令一般用于康复或改动程序状况寄存器的内容,在运用时,一般要在MSR指令中指明即将操作的域。
指令示例:
MSR CPSR,R0 ;传送R0的内容到CPSR
MSR SPSR,R0 ;传送R0的内容到SPSR
MSR CPSR_c,R0 ;传送R0的内容到CPSR,但只是修正CPSR中的操控位域