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