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

2023-12-12

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

但我需要通过一些例子来理解这一点,以澄清这个概念。


《ARM 架构参考手册》(ARM DDI 0100E)对此进行了解释:

位[27]的CPSR is a 粘性溢出旗,也称为Q旗。如果发生以下任一情况,则该标志设置为 1:

  • 加法结果饱和QADD or QDADD操作说明
  • 减法结果饱和QSUB or QDSUB操作说明
  • 加倍中间结果的饱和QDADD or QDSUB操作说明
  • 期间有符号溢出SMLA<x><y> or SMLAW<y>操作说明

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

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

一个例子:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM中Q(饱和标志)的重要性 的相关文章

随机推荐