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


5-2.OR命令 ( Inclusive OR ) :内包的論理和

   OR命令は「論理和( Logical add )」を表す。論理和とは「どちらか一方が1ならば結果は1、両方とも0の場合は0」である。(0+0=0, 0+1=1, 1+0=1, 1+1=1以上であるから各ビットの和と考えることもできなくはない)

  これを表にすると下のようになる。(このような表を真理値表という)

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)の場合、
11110000
11100111

11110111
となり、4bit目と5bit目以外は1になり、4bit目と5bit目は元のデータのままになっていることがわかる。


・0かどうかのチェック
同じレジスタ同士の論理和をとると0かどうかのチェックをすることができる。例えば、AL=78h(=11110000b)のとき、
11110000
11110000

11110000
AL=0(=00000000b)の時は
00000000
00000000

00000000
したがってどちらの場合もレジスタの値は変わらない。しかし下の例ではゼロフラグがセットされる。したがって「CMP AL,0」と(レジスタの値とゼロフラグは)同じ結果が得られる。レジスタが8bit,32bitの時は「OR」命令で0かどうかのチェックをするメリットはないが、16bitレジスタの場合は命令のサイズが1バイト小さくなり、さらにCPUが80286以下の CPUでは若干処理速度も速くなる。「AND」命令でも同様の結果が得られるが、なぜか0かどうかのチェックにはこの論理和を用いるのが一般的である。


・正か負かのチェック
上の例と同様に正か負かのチェックをしたい場合は「OR」命令を用いることができ、同様のメリットが生まれる。

内包的論理和 【86】
【書式】
 OR  dest,source
 dest   = reg/mem   source = reg/mem/imm
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF
【動作】
destsource の論理和をとり、結果をdest に設定し、結果に従ってフラグを設定します。
destdest OR source

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