31 | 30 | 29 | 28 | | | 27 | ~ | 8 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | N | Z | C | V | 保留 | I | F | T | M4 | M3 | M2 | M1 | M0 | | | | | | | | | | | | | | | | | | | N | Negative/Less Than | | | | | | I | | IRQ disable | Z | Zero | | | | | | | | | | F | | FIQ disable | C | Carry/Borrow/Extend | | | | | | T | | State bit | | V | Overflow | | | | | | | | | M0~4 | Mode bits | |
1、条件码标志 N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。条件码标志各位的具体含义如下表所示:
标志位 | 含 义 | N | 当用两个补码表示的带符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果为正数或零 | Z | Z=1表示运算的结果为零,Z=0表示运算的结果非零。 | C | 可以有4种方法设置C的值: | -加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。 | -减法运算(包括CMP):当运算时产生了借位时(无符号数溢出),C=0,否则C=1。 | -对于包含移位操作的非加/减运算指令,C为移出值的最后一位。 | -对于其它的非加/减运算指令,C的值通常不会改变。 | V | 可以有2种方法设置V的值: | -对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出 | -对于其它的非加/减运算指令,V的值通常不会改变。 | Q | 在ARM V5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其它版本的处理器中,Q标志位无定义 |
在ARM状态下,绝大多数的指令都是有条件执行的;在THUMB状态下,仅有分支指令是条件执行的。
条件码: EQ Z置位 相等 NE Z清零 不相等 CS C置位 无符号数大于或等于 CC C清零 无符号数小于 MI N置位 负数 PL N清零 正数或零 VS V置位 溢出 VC V清零 未溢出 HI C置位Z清零 无符号数大于 LS C清零Z置位 无符号数小于或等于 GE N等于V 带符号数大于或等于 LT N不等于V 带符号数小于 GT Z清零且(N等于V) 带符号数大于 LE Z置位且(N不等于V) 带符号数小于或等于 AL 忽略 无条件执行
l 0000 = EQ - Z set (equal) l 0001 = NE - Z clear (not equal) l 0010 = CS - C set (unsigned higher or same) l 0011 = CC - C clear (unsigned lower) l 0100 = MI - N set (negative) l 0101 = PL - N clear (positive or zero) l 0110 = VS - V set (overflow) l 0111 = VC - V clear (no overflow) l 1000 = HI - C set and Z clear (unsigned higher) l 1001 = LS - C clear or Z set (unsigned lower or same) l 1010 = GE - N set and V set, or N clear and V clear (greater or equal) l 1011 = LT - N set and V clear, or N clear and V set (less than) l 1100 = GT - Z clear, and either N set and V set, or N clear and V clear (greater than) l 1101 = LE - Z set, or N set and V clear, or N clear and V set (less than or equal) l 1110 = AL - always l 1111 = NV - never
2 控制位 CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行于特权模式时,这些位也可以由程序修改。 ·中断禁止位I、F:置1时,禁止IRQ中断和FIQ中断。 ·T标志位:该位反映处理器的运行状态。当该位为1时,程序运行于THUMB状态,否则运行于ARM状态。该信号反映在外部引脚TBIT上。在程序中不得修改CPSR中的TBIT位,否则处理器工作状态不能确定。 ·运行模式位M[4:0]:这几位是模式位,这些位决定了处理器的运行模式。具体含义如下表所示: ·保留位:CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要用保留位存储数据。保留位将用于ARM版本的扩展。
M[4:0] | 处 理器模式 | ARM模式可访问的寄存器 | THUMB模式可访问的寄存器 | 0b10000 | USER
用户模式 | PC,CPSR,R0~R14 | PC,CPSR,R0~R7,LR,SP | 0b10001 | FIQ模式 | PC,CPSR,SPSR_fiq,R14_fiq~R8_fiq,R0~R7 | PC,CPSR,SPSR_fiq,LR_fiq,SP_fiq,R0~R7 | 0b10010 | IRQ模式 | PC,CPSR,SPSR_irq,R14_irq~R13_irq,R0~R12 | PC,CPSR,SPSR_irq,LR_irq,SP_irq,R0~R7 | 0b10011 | SVC管理模式 | PC,CPSR,SPSR_svc,R14_svc~R13_svc,R0~R12 | PC,CPSR,SPSR_svc,LR_svc,SP_svc,R0~R7 | 0b10111 | ABT
中止模式 | PC,CPSR,SPSR_abt,R14_abt~R13_abt,R0~R12 | PC,CPSR,SPSR_abt,LR_abt,SP_abt,R0~R7 | 0b11011 | UND
未定义模式 | PC,CPSR,SPSR_und,R14_und~R13_und,R0~R12 | PC,CPSR,SPSR_und,LR_und,SP_und,R0~R7 | 0b11111 | SYSTEM
系统模式 | PC,CPSR,R0~R14 | PC,CPSR,LR,SP,R0~R74 |
|