ARM微处理器的编程模型之:ARM寄存器组织
在操作数中包含移位操作的运算指令(非加/减法指令),C被设置成被移位寄存器最后移出去的位。
④ 对于其他非加/减法运算指令,C的值通常不受影响。
· V
下面分两种情况讨论V的设置方法。
① 对于加/减运算指令,当操作数和运算结果都是以二进制的补码表示的带符号的数时,V=1表示符号位溢出。
② 对于非加/减法指令,通常不改变标志位V的值(具体可参照ARM指令手册)。
尽管以上C和V的定义看起来颇为复杂,但使用时在大多数情况下用一个简单的条件测试指令即可,不需要程序员计算出条件码的精确值即可得到需要的结果。
注意 | 下面两种情况会对CPSR的条件标志位产生影响。 1.比较指令(CMN、CMP、TEQ、TST)。 2.目的寄存器不是r15的算术逻辑运算和数据传输指令。这些指令可以通过在指令末尾加标志“S”来通知处理器指令的执行结果影响标志位。 |
使用SUBS指令从寄存器r1中减去常量1,然后把结果写回到r1,其中CPSR的Z位将受到影响。
指令执行前:
CPSR中Z=0
r1=0x00000001
SUBS r1,r1,#1
SUB指令执行结束后:
r1=0x0
CPSR中Z=1
目的寄存器是r15的带“位设置”的算术和逻辑运算指令,也可以将SPSR的值复制到CPSR中,这种操作主要用于从异常中断程序中返回。
用MSR指令向CPSR/SPSR写进新值。
目的寄存器位r15的MRC协处理器指令通过这条指令可以将协处理器产生的条件标志位的值传送到ARM处理器。
在中断返回时,使用LDR指令的变种指令可以将SPSR的值复制到CPSR中。
2.Q标志位
在带DSP指令扩展的ARM v5及更高版本中,bit[27]被指定用于指示增强的DAP指令是否发生了溢出,因此也就被称为Q标志位。同样,在SPSR中bit[27]也被称为Q标志位,用于在异常中断发生时保存和恢复CPSR中的Q标志位。
在ARM v5以前的版本及ARM v5的非E系列处理器中,Q标志位没有被定义。属于待扩展的位。
3.控制位
CPSR的低8位(I、F、T及M[4∶0])统称为控制位。当异常发生时,这些位的值将发生相应的变化。另外,如果在特权模式下,也可以通过软件编程来修改这些位的值。
① 中断禁止位
I=1,IRQ被禁止。
F=1,FIQ被禁止。
② 状态控制位
T位是处理器的状态控制位。
T=0,处理器处于ARM状态(即正在执行32位的ARM指令)。
T=1,处理器处于Thumb状态(即正在执行16位的Thumb指令)。
当然,T位只有在T系列的ARM处理器上才有效,在非T系列的ARM版本中,T位将始终为0。
③ 模式控制位
M[4∶0]作为位模式控制位,这些位的组合确定了处理器处于哪种状态。表3.3列出了其具体含义。
只有表中列出的组合是有效的,其他组合无效。
表3.3 状态控制位M[4∶0]
M[4∶0] | 处理器模式 | 可以访问的寄存器 |
0b10000 | 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 | Undefined | PC,r14_und~r13_und,r12~r0,CPSR,SPSR_und |
0b11111 | System | PC,r14~r0,CPSR(ARM v4及更高版本) |
注意 | 由于用户模式(User)和系统模式(System)是非异常模式,所以没有单独的SPSR保存程序状态字。在用户模式或系统模式下,读SPSR将返回一个不可预知的值,而写SPSR将被忽略。 |
微处理器 连接寄存器 ARM 分组寄存器 程序计数器 相关文章:
- 用8位微处理器实现数字低通滤波器设计(05-15)
- 如何构造嵌入式Linux系统(05-23)
- 基于嵌入式Linux的便携式RFID信息采集与处理系统(07-01)
- SPARC微处理器综述(05-29)
- Motorola32位嵌入式微处理器MPC860的开发应用(06-02)
- 基于ARM和uClinux的家庭网关系统(09-14)