微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM处理器的程序状态寄存器(CPSR,SPSR)访问指令

ARM处理器的程序状态寄存器(CPSR,SPSR)访问指令

时间:11-09 来源:互联网 点击:
ARM 微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送

数据,程序状态寄存器访问指令包括以下两条:
— MRS 程序状态寄存器到通用寄存器的数据传送指令
— MSR 通用寄存器到程序状态寄存器的数据传送指令
1、 MRS 指令
MRS 指令的格式为:
MRS{条件} 通用寄存器,程序状态寄存器(CPSRSPSR
MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况:
- 当需要改变程序状态寄存器的内容时,可用MRS 将程序状态寄存器的内容读入通用寄存
器,修改后再写回程序状态寄存器。
- 当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态
寄存器的值,然后保存。
指令示例:
MRS R0,CPSR ;传送CPSR 的内容到R0
MRS R0,SPSR ;传送SPSR 的内容到R0
2、 MSR 指令
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 的内容到SPSR,但仅仅修改CPSR 中的控制位域
//

1 状态寄存器传送至通用寄存器类指令
功能:将状态寄存器的内容传送至通用寄存器。

格式:
MRS{<条件码>}Rd,CPSR}SPSR
其中:
Rd 目标寄存器,Rd不允许R15。
R=0 将CPSR中的内容传送目的寄存器。
R=1 将SPSR中的内容传送至目的寄存器。

注释:
MRS与MSR配合使用,作为更新PSR的读-修改-写序列的一部分。例如:改变处理器或清除标志Q。注意:当处理器在用户模式或系统模式下,一定不能试图访问SPSR
这条指令不影响条件码标志。
例:
MRS R0,CRSR ;将CPSR中的内容传送至R0
MRS R3,SPSR ;将SPSR中的内容传送至R3

2.通用寄存器传送至状态寄存器传送指令
功能:将通用寄存器的内容传送至状态寄存器.

格式:
MSR{<条件码>CPSR_f|SPSR_f,<#ommed_8r>
MSR{<条件码>CPSR_|SPSR_,Rm
其中:
字段可以是以下之一或多种:
C:控制域屏蔽字段(PSR中的第0位到第7位);
X:扩展域屏蔽字段(PSR中的第8位到第15位);
S:状态域屏蔽字段(PSR中的第16位到第32位);
F:标志域屏蔽字段(PSR中的第24位到第31位)。
immed_8r 值数字常量的表达式。常量必须对应8位位图。该位图在32位字中循环移位偶数数位。
Rm 源寄存器。

注释:
同前一条指令(MRS)。
例1:设置N、Z、C、V标志。
MSR CPSR_f,#&f0000000 ;仅高位有效,其他必须为0
例2:
仅置位C标志,保留N、Z、V标志。
MRS R0,CPSR ;将CPSR中的内容传送至R0
ORR R0,R0,#&1f ;置位R0的第29位
MSR CPSR_c,R0 ;再将R0中的内容传送至CPSR

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

网站地图

Top