我想了解 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,它就不受后续计算是否饱和和/或溢出的影响。其预期用途是:
- Use an
MSR CPSR_f,#0
指令清除 Q 标志(这也会清除条件代码标志)。
- 执行一系列计算。
- 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(使用前将#替换为@)