【问题标题】:Importance of Q(Saturation Flag) in ARMQ(饱和标志)在ARM中的重要性
【发布时间】:2023-03-11 17:53:01
【问题描述】:

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

但我需要通过一些示例来阐明这一概念。

请解释一下。

谢谢

【问题讨论】:

    标签: assembly arm processor instruction-set


    【解决方案1】:

    这在《ARM 架构参考手册》(ARM DDI 0100E)中有解释:

    CPSR

    Bit[27] 是一个 sticky overflow 标志,也称为 Q 标志。如果发生以下任何情况,此标志设置为 1:

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

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

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

    一个例子:

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

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

    【讨论】:

    • 谢谢迈克尔。这个例子就是我要找的..:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2021-03-19
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多