ARM64的汇编指令集中,有一部分指令的执行时影响状态寄存器的,比如add、sub、or汇编指令等,他们大都是运算指令(进行逻辑或算数运算)
CPSR的低8位(包括I、F、T和M[0~4])称为控制位,程序无法修改,除非CPU运行于特权模式下,程序才能修改控制位!
N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。
1. N(Negative)标志
CPSR的第31位是 N,符号标志位。它记录相关指令执行后,其结果是否为负。如果为负 N = 1,如果是非负数 N = 0。
2. Z(Zero)标志
CPSR的第30位是Z,零标志位。它记录相关指令执行后,其结果是否为0。如果结果为0,那么Z = 1;如果结果不为0,那么Z = 0。
3. C(Carry)标志
CPSR的第29位是C,进位标志位。一般情况下,进行无符号数的运算。
加法运算(add指令):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。
减法运算(sub指令):当运算时产生了借位时(无符号数溢出),C=0,否则C=1。
4. V(Overflow)溢出标志
CPSR的第28位是V,溢出标志位。在进行有符号数运算的时候,如果超过了机器所能标识的范围,称为溢出。
下面几种情况会出现溢出
正数 + 正数 为负数 溢出
负数 + 负数 为正数 溢出
正数 + 负数 不可能溢出