xPSR(Program Status Register)之APSR应用状态寄存器

APSR是程序状态寄存器中的应用状态寄存器,保存程序计算结果的状态标志。包含:

  • N:负数标志。表示上一条指令的操作结果为负数。原理是获取结果寄存器的bits[31]。也即xPSR.N=bits[31]。xPSR.N == 1表示结果为负数,反之为非负数。
  • Z:零标志。表示上一条指令的操作结果为0.
  • C:进位/借位标志。表示在加法/减法运算中,产生了进位/借位。
    加法运算中 ,xPSR.C为1,表示有进位,反之,无进位。
    减法运算中 ,xPSR.C为0,表示有借位,反之,无借位。
  • V:溢出标志。在有符号运算中,发生溢出时,标志置位。
    xPSR.V = Cn 异或 Cn-1(Cn表示第n位的进位)
  • Q:饱和标志。饱和计算: 通过将数据强制置为最大(或最小)允许值,减小了数据畸变,当然畸变仍然存在。

只有程序主动“唤起”状态寄存器时,标志位才有效。例如MOVS,CMP,QADD,SBS等等操作码。
进位和溢出是不一样的。

  • 溢出是只在有符号数的操作中产生,而进位在有符号和无符号数间都能产生。

  • 溢出是异常,是错误运算,而进位是计算结果长度超出范围,但结果是对的(指本次计算位数范围内)。

  • 溢出可以和进位同时产生。挺多地方都说进位针对无符号的,溢出针对有符号数,这种说法是片面的。

      					有进位,结果未溢出
      						0100 0010   (66)
      					+   1100 1101   (-51)
      					---------------------
      					  1 0000 1111   (15)
    

此外,结果寄存器的最高位默认是负数标志位!

你可能感兴趣的:(xPSR(Program Status Register)之APSR应用状态寄存器)