【发布时间】:2023-03-11 17:53:01
【问题描述】:
我想了解 Q 标志在 ARM 处理器中的重要性。我知道有一些指令,如 QADD、QSUB 等。
但我需要通过一些示例来阐明这一概念。
请解释一下。
谢谢
【问题讨论】:
标签: assembly arm processor instruction-set
我想了解 Q 标志在 ARM 处理器中的重要性。我知道有一些指令,如 QADD、QSUB 等。
但我需要通过一些示例来阐明这一概念。
请解释一下。
谢谢
【问题讨论】:
标签: assembly arm processor instruction-set
这在《ARM 架构参考手册》(ARM DDI 0100E)中有解释:
CPSR 的 Bit[27] 是一个 sticky overflow 标志,也称为 Q 标志。如果发生以下任何情况,此标志设置为 1:
QADD 或 QDADD 指令中的加法结果饱和QSUB 或QDSUB 指令QDADD 或QDSUB 指令中加倍中间结果的饱和SMLA<x><y> 或 SMLAW<y> 指令期间的有符号溢出Q 标志是粘性的,因为一旦它被设置为 1,它就不受后续计算是否饱和和/或溢出的影响。它的预期用途是:
MSR CPSR_f,#0 指令清除 Q 标志(这也会清除条件代码标志)。MRS Rn,CPSR指令读取CPSR,然后测试Q标志的值。如果仍为 0,则在第 2 步中没有发生上述类型的饱和或溢出。
否则,至少会发生一次饱和或溢出。一个例子:
mov r2,#0x70000000
qadd r3,r2,r2
0x70000000 + 0x70000000 将变为 0xE0000000,但由于 qadd 正在饱和,结果将饱和到 0x7FFFFFFF(最大的 32 位正整数)并设置 Q 标志。
【讨论】: