常用数据比较条件码:
由于ARM状态寄存器其它为的不尽兴同故,本文只讲CPSR的最后四位:N、Z、C、V。
ARM状态寄存器
程序状态寄存器共有6个,一个共用状态寄存器CPSR和5个备份状态寄存器SPSR。
程序状态寄存器
N为符号标志: N=1表示运算结果为负数,N=0表示运算结果为整数。
Z为全0标志: Z=1则表示运算结果为0,否则Z=0。
C为借位: 进位标志,加法有进位时C=1(加法运算是数据溢出),无进位时C=0;减法有借位时C=0,无借位时C=1;
V为数据溢出标志: 加法运算结果有溢出是V=1,否则V=0;
指令的条件码
助记符后缀 | 标志 | 含义 | 符号 | 条件码 |
---|---|---|---|---|
EQ | Z置位 | 相等 | = | 0000 |
NE | Z清零 | 不相等 | ≠ | 0001 |
MI | N置位 | 负数 | - | 0100 |
PL | N清零 | 正数或零 | + | 0101 |
CS | C置位 | 无符号数大于或等于 | u ≥ | 0010 |
CC | C清零 | 无符号数小于 | u < | 0011 |
LS | C清零Z置位 | 无符号数小于或等于 | u ≤ | 1001 |
HI | C置位Z清零 | 无符号数大于 | u > | 1000 |
GE | N等于V | 带符号数大于或等于 | ≥ | 1010 |
LT | N不等于V | 带符号数小于 | < | 1011 |
LE | Z置位或(N不等于V) | 带符号数小于或等于 | ≤ | 1101 |
GT | Z清零且(N不等于V) | 带符号数大于 | > | 1100 |
VS | V置位 | 溢出 | 0110 | |
VC | V清零 | 未溢出 | 0111 | |
AL | 忽略 | 无条件执行 | 1110 |
更新CPSR指令
指令格式 | 操作 | 功能说明 |
---|---|---|
CMP {cond} Rd, < op2> | 比较 | Rd - op2, 更新CPSR中的条件标志位 |
CMN {cond} Rd, < op2> | 反值比较 | Rd + op2, 更新CPSR中的条件标志位 |
TST {cond} Rd, < op2> | 位测试 | Rd AND op2,与操作, 更新CPSR中的条件标志位 |
TEQ {cond} Rd, < op2> | 相等测试 | Rd EOR op2,异或操作, 更新CPSR中的条件标志位 |