ALU ステータスフラグの更新

ARM 状態と、ARMv6T2 以降のプロセッサの Thumb 状態では、ほとんどのデータ処理命令で、演算結果に従ってアプリケーションプログラムステータスレジスタ(APSR)内の ALU ステータスフラグを更新するかどうかを選択できます。命令にオプションの接尾文字 S を付けると、条件フラグが更新されます。行されない条件付き命令は、フラグの状態に影響を与えません。

ARMv6T2 より前のプロセッサの Thumb 状態では、ほとんどのデータ処理命令で、演算結果に従って、ALU ステータスフラグが自動的に更新されます。フラグを変更したり更新したりしないように指定するオプションはありません。その他の命令では、フラグを更新できません。

APSR は以下の ALU ステータスフラグを保持します。

N

演算結果が負の場合は、1 に設定されます。それ以外の場合は、0 にクリアされます。

Z

演算結果がゼロの場合は、1 に設定されます。それ以外の場合は、0 にクリアされます。

C

演算の結果としてキャリーが発生した場合は、1 に設定されます。それ以外の場合は、0 にクリアされます。

V

演算によってオーバーフローが発生した場合は、1 に設定されます。それ以外の場合は、0 にクリアされます。

キャリーは以下の場合に発生します。

オーバーフローは、加算、減算、または比較の結果が 231 以上または -231 未満の場合に発生します。

また、命令によって更新するフラグも決まっています。すべてのフラグを更新する命令も、フラグのサブセットのみを更新する命令もあります。ラグが更新されない場合は、元の値が維持されます。『アセンブラリファレンス』の各命令の記述には、フラグへの影響が詳細に示されています。

Note

ほとんどの命令では、接尾文字 S が指定されている場合にのみ、ステータスフラグを更新します。CMPCMNTEQ、および TST 命令では、条件コードフラグを常に更新します。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0473FJ
Non-ConfidentialID111311