A64指令集沿用了A32指令集中的条件操作,在PSTATE寄存器中,有4个条件标志位,分别为N、Z、C、V。
一.作用
条件标志位保存着最近执行的算术或逻辑指令的状态信息。
二.条件标志位的具体意义
序号 | 条件标志 | 描述 |
1 | N | (1)负数标志(上一次的运算结果为负值) (2)当两个补码表示的有符号数进行运算时: ①N=1,表示结果为负数 ②N=0,表示结果为正数或零 |
2 | Z | (1)零结果标志(上一次运算结果为零) (2)对于CMP指令,Z=1,表示进行比较的两个数大小相等 |
3 | C | (1)进位标志(上一次运算结果发生了无符号数溢出) 例如: mov x0,2 mov x1,-2 cmn x0,x1 x1的值为负数,负数在计算机中用补码表示,即为0xFFFFFFFFFFFFFFFE,cmn指令会让x0的值和x1的值做加法运算,产生了无符号上溢出,即C=1,且结果为0,即Z=1 |
4 | V | (1)溢出标志(上一次运算结果发生了有符号溢出) (2)分2种情况: ①加/减法运算指令 当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。 ②其他的指令 通常不影响V位,具体可参考各指令的说明。 |
三.常见的条件操作后缀
序号 | 后缀 | 意义 | 条件标志 |
1 | MI | 结果为负数 | N=1 |
2 | PL | 结果为正数或零 | N=0 |
3 | EQ | 相等 | Z=1 |
4 | NE | 不相等 | Z=0 |
5 | CS/HS | 发生了无符号数溢出 | C=1 |
6 | CC/LO | 没有发生无符号数溢出 | C=0 |
7 | VS | 发生了有符号数溢出 | V=1 |
8 | VC | 没有发生有符号数溢出 | V=0 |
9 | HI | 无符号数> | (C=1)&&(Z=0) |
10 | LS | 无符号数≤ | (C=0) || (Z=1) |
11 | GE | 有符号数≥ | N==V |
12 | LT | 有符号数< | N != V |
13 | GT | 有符号数> | (Z==0)&&(N==V) |
14 | LE | 有符号数≤ | (Z==1)||(N!=V) |