代码之家  ›  专栏  ›  技术社区  ›  vkulkarni

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

  •  2
  • vkulkarni  · 技术社区  · 11 年前

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

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

    请给我解释一下。

    非常感谢。

    1 回复  |  直到 11 年前
        1
  •  8
  •   Michael    11 年前

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

    的第[27]位 CPSR 是一个 粘性溢流 标志,也称为Q标志。如果出现以下任何情况,此标志将设置为1:

    • 加法饱和导致 QADD QDADD 指示
    • 减法的饱和导致 QSUB QDSUB 指示
    • 加倍中间的饱和导致 qadd添加 QDSUB公司 指示
    • SMLA<x><y> SMLAW<y> 指示

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

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

    例如:

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

    0x70000000 + 0x70000000 会变成 0xE0000000 ,但自 qadd 正在饱和,结果饱和为 0x7FFFFFFF (最大的32位正整数),并且Q标志被设置。