我想了解Q标志在ARM处理器中的重要性。我知道有一些像QADD,QSUB等的指示。
但我需要通过一些可以澄清这个概念的例子来理解这一点。
请解释一下。
谢谢
答案 0 :(得分:6)
这在“ARM体系结构参考手册”" (ARM DDI 0100E):
CPSR
的位[27]是粘性溢出标志,也称为Q标志。如果发生以下任何情况,则此标志设置为1:
QADD
或QDADD
指令QSUB
或QDSUB
指令QDADD
或QDSUB
指令SMLA<x><y>
或SMLAW<y>
指令Q标志是 sticky ,因为一旦设置为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标志为集。