2

我想了解 Q 标志在 ARM 处理器中的重要性。我知道有某些指令,如 QADD、QSUB 等。

但是我需要通过一些可以阐明概念的示例来理解这一点。

请解释一下。

谢谢

4

1 回答 1

8

这在“ARM 体系结构参考手册”(ARM DDI 0100E)中有说明:

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

  • QADDorQDADD指令中加法结果的饱和度
  • QSUBa orQDSUB指令中减法结果的饱和度
  • QDADDorQDSUB指令中加倍中间结果的饱和度
  • SMLA<x><y>在orSMLAW<y>指令期间有符号溢出

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

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

一个例子:

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

0x70000000 + 0x70000000会变成0xE0000000,但由于qadd是饱和的,结果饱和到0x7FFFFFFF(最大的 32 位正整数)并且设置了 Q 标志。

于 2013-10-24T07:25:44.047 回答