←前ページへ :  INDEX :  次へ→


3-4.フラグ ( Flag ) .......フラグレジスタ ( EFLAGS )

   フラグはCPUの状態などをビット単位で表しています。実際はフラグレジスタという32bitで管理されているが、実際に使われているのは15個分、すなわち15bit 分で、残りは使われていない。
 
 
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AC
VM
RF
NT
IOPL
OF
DF
IF
TF
SF
ZF
AF
PF
CF

 

CF ( Carry flag ) :キャリーフラグ
 
算術演算で繰り上がり(加算)、桁借り(減算)した場合などに「1」しなかった場合は「0」になる。そのほか、「INT 21h」のシステムコールが正常に処理できなかった場合に「1」に、正常に処理されれば「0」になることから、サブルーチンを作った際に、エラーフラグとして用いる人も多い。
 
 
PF ( Parity flag ) :パリティーフラグ
 
演算結果の最下位バイト(例えばALやBL)を2進数で見たときに、「1」の数が、偶数なら「1」、奇数なら「0」になる。ほとんど使われないフラグ。

AF ( Auxiliary carry flag ) :補助キャリーフラグ

BCD演算に使用される詳しくは省略する。

ZF ( Zero flag ) :ゼロフラグ

演算結果が0になった場合に「1」、それ以外なら「0」になる。よく使うフラグの1つ。

SF ( Sign flag ) :サインフラグ

サインとは日本語に訳すと「符号」で、演算結果がマイナスになった場合に「1」になる。アセンブラでマイナスとは、最上位ビットが「1」の時に、マイナスと見なし、「0」の時にプラスト見なす。したがって、このフラグは演算結果の最上位ビットがそのまま反映されている。詳しくは後で述べる。

IF ( Interrupt enable flag ) :割り込み許可フラグ

ハードウエア割り込みを許可するときは「1」、許可したくない場合や割り込み処理中は「0」になる。詳しくは10章参照

DF ( Direction flag ) :ディレクションフラグ

ストリング命令で使用します。詳しくは7章参照

OF ( Overflow flag ) :オーバーフローフラグ

例えば、8bitレジスタALが7Fh(=127)で、さらに1を足すと、80h(=-128)になる。これは8bitで表せる数は-128〜+127までであり、その範囲を超えた計算であるからで、このような範囲を超えた計算を行った場合に「1」になる。符号付き演算でオーバーフローした際に「1」になる。詳しくは後で述べる。

 
フラグは 条件分岐 で頻繁に使います。

80286以上ではTSF(タスクスイッチフラグ)などが拡張されています。

 


←前ページへ :  INDEX :  次へ→