ARM中Q(饱和标志)的重要性

时间:2013-10-24 05:03:18

标签: assembly arm processor isa

我想了解Q标志在ARM处理器中的重要性。我知道有一些像QADD,QSUB等的指示。

但我需要通过一些可以澄清这个概念的例子来理解这一点。

请解释一下。

谢谢

1 个答案:

答案 0 :(得分:6)

这在“ARM体系结构参考手册”" (ARM DDI 0100E):

CPSR的位[27]是粘性溢出标志,也称为Q标志。如果发生以下任何情况,则此标志设置为1:

  • 添加结果的饱和度为QADDQDADD指令
  • 减法的饱和度导致QSUBQDSUB指令
  • 加倍中间的饱和度导致QDADDQDSUB指令
  • SMLA<x><y>SMLAW<y>指令
  • 期间的有符号溢出

Q标志是 sticky ,因为一旦设置为1,它不受后续计算是否饱和和/或溢出的影响。其用途是:

  1. 使用MSR CPSR_f,#0指令清除Q标志(这也会清除条件代码标志)。
  2. 执行一系列计算。
  3. 使用MRS Rn,CPSR指令读取CPSR,然后测试Q标志的值。如果它仍然是0,则在步骤2期间没有出现上述类型的饱和或溢出。 否则,至少发生一次停顿或溢出的情况。

  4. 一个例子:

    mov     r2,#0x70000000
    qadd    r3,r2,r2
    

    0x70000000 + 0x70000000将成为0xE0000000,但由于qadd正在饱和,因此结果已饱和到0x7FFFFFFF(最大的正32位整数)且Q标志为集。