ARM的状态寄存器格式如上
位[31:24]为条件标志位域,用f 表示;
位[23:16]为状态位域,用s 表示;
位[15:8]为扩展位域,用x 表示;
位[7:0]为控制位域,用c 表示;
显然,常用的只有条件标志位域f和控制位域c。
如果需要操作状态寄存器,比如切换处理器模式,就需要修改控制位域中的模式位。
MRS: 程序状态寄存器到通用寄存器的数据传送指令
MSR: 通用寄存器到程序状态寄存器的数据传送指令
附:
M控制位控制处理器模式,具体含义如下:
M[4:0] 处理器模式 可访问的寄存器
ob10000 user pc,r14~r0,CPSR
0b10001 FIQ PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
0b10010 IRQ PC,R14_IRQ-R13_IRQ,R12~R0,CPSR,SPSR_IRQ
0B10011 SUPERVISOR PC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC
0b10111 ABORT PC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT
0b11011 UNDEFINEED PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
0b11111 SYSTEM PC,R14-R0,CPSR(ARM V4以及更高版本)
***条件标志位***
N——本位设置成当前指令运算结果的bit[31]的值。当两个表示的有符号整数运算时,n=1表示运算结果为负数,n=0表示结果为正书或零。
Z——z=1表示运算的结果为零;z=0表示运算的结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。
C——下面分四种情况讨论C的设置方法:
在加法指令中(包括比较指令CMP),当结果产生了进位,则C=1,表示无符号运算发生上溢出;其他情况C=0。
在减法指令中(包括减法指令CMP),当运算中发生错位,则C=0,表示无符号运算数发生下溢出;其他情况下C=1。
对于包含移位操作的非加减运算指令,C中包含最后一次溢出的的位的数值。对于其他非加减运算指令,C位的值通常不受影响。
V——对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号为溢出;通常其他指令不影响V位。
上一篇:ARM(包括ARMv7 工作模式介绍)寄存器、工作模式和指令集
下一篇:ARM cpsr寄存器和spsr寄存器
推荐阅读最新更新时间:2024-11-17 10:08
设计资源 培训 开发板 精华推荐
- 嵌入式工程师AI挑战营(初阶):基于RV1106,动手部署手写数字识别落地
- 用心分享,一起成长!EEWORLD月月有奖优秀主题/回复第28期开始啦~
- #micropython大作战#多种参与姿势,大家一起来玩micropython!
- 有奖直播:【瑞萨电子推出针对血糖仪应用的内置模拟前端的RL78/L1A系列微控制器】
- 深入剖析恩智浦LPC1000处理器
- 答题赢好礼|以人为本、生命无价 ADI 楼宇烟雾探测技术
- 硬核拆解|看看千元智能电表内部如何连接
- 直播报名:TI 用于感测应用、带可配置信号链元素的新型MSP430™ MCU,报名直播赢双重好礼!
- 骏龙科技&ADI有奖直播:适用于视频、转换器、通信的千兆数字隔离器