5-1.AND命令 ( Logical AND ) :論理積
これを表にすると下のようになる。(このような表を真理値表という)
DEST SRC 結果(DEST) 0 0 0 0 1 0 1 0 0 1 1 1
AND ( Logical AND ) :論理積
AND DEST,SRC 動作:DEST←DEST and SRC 影響を受けるフラグ:OF=0,CF=0,ZF,SF,PF,AF DEST:レジスタ、メモリー SRC :レジスタ、メモリー、即値(ただしメモリー、メモリーの組み合わせは除く)
フラグはCF,OFがクリアされる。AFは不定。結果が0になった場合ZF=1、それ以外はZF=0。上位1bitがSFに反映される。PFは結果に応じてセットされる。
and al,00011000b |
al=78h(=11110000b)の場合、
11110000 00011000
00010000
となり、4bit目と5bit目以外は0になり、4bit目と5bit目は元のデータのままになっていることがわかる。
・0かどうかのチェック同じレジスタ同士の論理積をとると0かどうかのチェックをすることができる。例えば、AL=78h(=11110000b)のとき、
11110000 11110000
11110000 AL=0(=00000000b)の時は
00000000 00000000
00000000
したがってどちらの場合もレジスタの値は変わらない。しかし下の例ではゼロフラグがセットされる。したがって「CMP AL,0」と(レジスタの値とゼロフラグは)同じ結果が得られる。レジスタが8bit,32bitの時は「AND」命令で0かどうかのチェックをするメリットはないが、16bitレジスタの場合は命令のサイズが1バイト小さくなり、さらにCPUが80286以下の CPUでは若干処理速度も速くなる。ただし、なぜだかわからないが、0かどうかのチェックには 「OR」命令を用いるのが一般的である。
・正か負かのチェック 上の例と同様に正か負かのチェックをしたい場合は「AND」命令を用いることができ、同様のメリットが生まれる。
| 論理積 【86】 |
|