ARM プロセッサにおける Q フラグの重要性を理解したい。QADD、QSUBなどの特定の命令があることは知っています。
しかし、概念を明確にするいくつかの例でこれを理解する必要があります。
説明してください。
ありがとうございました
ARM プロセッサにおける Q フラグの重要性を理解したい。QADD、QSUBなどの特定の命令があることは知っています。
しかし、概念を明確にするいくつかの例でこれを理解する必要があります。
説明してください。
ありがとうございました
これについては、「ARM アーキテクチャ リファレンス マニュアル」(ARM DDI 0100E) で説明されています。
のビット [27] はCPSR
、Q フラグとも呼ばれるスティッキー オーバーフローフラグです。このフラグは、次のいずれかが発生した場合に 1 に設定されます。
QADD
orQDADD
命令での加算結果の飽和QSUB
命令QDSUB
が生成されます。QDADD
orQDSUB
命令での倍増中間結果の飽和SMLA<x><y>
orSMLAW<y>
命令中の符号付きオーバーフローQ フラグは、いったん 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 フラグが設定されます。