2

ARM プロセッサにおける Q フラグの重要性を理解したい。QADD、QSUBなどの特定の命令があることは知っています。

しかし、概念を明確にするいくつかの例でこれを理解する必要があります。

説明してください。

ありがとうございました

4

1 に答える 1

8

これについては、「ARM アーキテクチャ リファレンス マニュアル」(ARM DDI 0100E) で説明されています。

のビット [27] はCPSR、Q フラグとも呼ばれるスティッキー オーバーフローフラグです。このフラグは、次のいずれかが発生した場合に 1 に設定されます。

  • QADDorQDADD命令での加算結果の飽和
  • 減算結果の飽和により、ORQSUB命令QDSUBが生成されます。
  • QDADDorQDSUB命令での倍増中間結果の飽和
  • SMLA<x><y>orSMLAW<y>命令中の符号付きオーバーフロー

Q フラグは、いったん 1 に設定されると、後続の計算が飽和および/またはオーバーフローしても影響を受けないという点でスティッキーです。その使用目的は次のとおりです。

  1. 命令を使用しMSR CPSR_f,#0て Q フラグをクリアします (これにより、条件コード フラグもクリアされます)。
  2. 一連の計算を実行します。
  3. MRS Rn,CPSR命令を使用して を読み取りCPSR、Q フラグの値をテストします。それでも 0 の場合は、ステップ 2 で上記のタイプの飽和またはオーバーフローは発生していません。

例:

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

0x70000000 + 0x70000000になります0xE0000000が、qaddは飽和しているため、結果は0x7FFFFFFF(最大の正の 32 ビット整数) に飽和し、Q フラグが設定されます。

于 2013-10-24T07:25:44.047 に答える