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

olqngx59  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(121)

我想了解ARM处理器中Q标志的重要性。我知道有一些特定的指令,如QADD,QSUB等。
但我需要通过一些例子来澄清这个概念。

mrfwxfqh

mrfwxfqh1#

这在“ARM架构参考手册”(ARM DDI 0100 E)中有解释:
CPSR的位[27]是一个 sticky overflow 标志,也称为Q标志。如果发生以下任何一种情况,该标志将被设置为1:

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

Q标志是 * 粘性的 *,因为一旦它被设置为1,它就不受后续计算是否饱和和/或溢出的影响。
1.使用MSR CPSR_f,#0指令清除Q标志(这也会清除条件码标志)。
1.执行一系列计算。
1.使用MRS Rn,CPSR指令读取CPSR,然后测试Q标志的值。如果它仍然为0,则在步骤2中没有发生上述类型的饱和或溢出。否则,至少发生了一个饱和或溢出示例。
举个例子:

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

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

相关问题