微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 程序状态寄存器和操作指令

程序状态寄存器和操作指令

时间:11-26 来源:互联网 点击:
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这条指令不影响条件码标志。例:MRSR0,CRSR;将CPSR中的内容传送至R0MRSR3,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中的控制位域


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top