ARMv8逻辑与算术运算指令之一:条件标志位NZCV的具体含义

        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)进位标志(上一次运算结果发生了无符号数溢出)
(2)下面分4种情况讨论C的设置方法:
①加法指令(包括比较指令CMN)
        当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0。

例如:

        mov  x0,2

        mov  x1,-2

        cmn  x0,x1

        x1的值为负数,负数在计算机中用补码表示,即为0xFFFFFFFFFFFFFFFE,cmn指令会让x0的值和x1的值做加法运算,产生了无符号上溢出,即C=1,且结果为0,即Z=1
②减法指令(包括比较指令CMP)
        当运算中发生借位,则C=0,表示无符号数运算发生下溢出;其他情况下C=1。
③包含移位操作的非加/减法运算指令
        C中包含最后一次被溢出的位的数值。
④其他非加/减法运算指令
        C位的值通常不受影响。

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)


 

你可能感兴趣的:(ARMv8架构,arm,嵌入式,Linux)