"ARM体系结构参考手册"(ARM DDI 0100E)中对此进行了解释:
位[27] CPSR是粘滞溢出标志,也称为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
Run Code Online (Sandbox Code Playgroud)
0x70000000 + 0x70000000会变成0xE0000000,但由于qadd饱和,结果饱和到0x7FFFFFFF(最大的正32位整数)并且Q标志被置位.