算术逻辑运算指令:(ADD、ADC、SUB、SBC、RSB、RSC、AND、ORR、EOR、BIC)完成常 用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中。
当这些指令后面加了S(如ADDS时),指令同时更新CPSR中的相应条件标志位。
比较指令 (CMP、CMN、TST、TEQ)不保存运算结果,只更新CPSR中相应的条件标志位。
它们总是会影响CPSR条件标志位.
2、CPSR格式及说明:

标志位 | 含义 |
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运算指令是否发生了溢出。同样的spsr的bit[27]位也称为q标识位,用于在异常中断发生时保存和恢复CPSR中的Q标识位。在ARM V5以前的版本及ARM V5的非E系列的处理器中,Q标志位无定义 |
标志位 | 含义 |
I | IRQ中断禁止位。置1时,禁止IRQ中断 |
F | FIQ中断禁止位。置1时,禁止FIQ中断 |
T | 该位反映处理器的运行状态。当该位为1时,程序运行于THUMB状态,否则运行于ARM状态。该信号反映在外部引脚TBIT上。在程序中不得修改CPSR中的TBIT位,否则处理器工作状态不能确定。 |
M4-M0 | 这几位是模式位,这些位决定了处理器的运行模式 |

CPSR寄存器控制位设置方法:
其中cpsr_c代表的是这32位中的低8位,也就是控制位
当你看到有些程序里这样写
msr cpsr_c 0xd2 使用0xd2做为值来修改cpsr,但只修改cpsr的控制位。也就是[5:7]位。
APSR(CPSR)与condition的关系图:
条件码可以加在指令中(上表中的Mnemonic extension),做为条件判断执行,类似C语言中的if语句。
例:
b指令加上条件码, BEQ label ( 注意存储在跳转指令中的实际值是相对当前PC 值的一个偏移量,而不是一个绝对地址,它的值 由汇编器来计算(参考寻址方式中的相对寻址)。它是 24 位有符号数,左移两位后有符号扩展 为 32 位,表示的有效偏移为 26 位(前后32MB 的地址空间)。
表示当之前的某条指令导致的条件码z=1是,跳转到label处执行。
只要条件码z不发生改变,就可以一直使用这种条件码,比果这条指令后又跟了几条
bicne r0, r0, #0x1f 表示如z==0, 将r0的[0:4]位清空。
orrne r0, r0, #0x13 表示如z==0, 将r0位或上0x13后的值设到r0