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

5-3.XOR命令 ( Exclusive OR ) :排他的論理和

XOR命令は「排他的論理和( Exclusive-OR )」を表す。排他的論理和とは「両方とも同じなら0、異なる場合は1」である。

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

DEST SRC 結果(DEST)
0 0 0
0 1 1
1 0 1
1 1 0

XOR ( Exclusive OR ) :排他的論理和

 
XOR	DEST,SRC

   動作:DEST←DEST xor SRC
  影響を受けるフラグ:OF=0,CF=0,ZF,SF,PF,AF
    DEST:レジスタ、メモリー
    SRC :レジスタ、メモリー、即値(ただしメモリー、メモリーの組み合わせは除く)

   フラグはCF,OFがクリアされる。AFは不定。結果が0になった場合ZF=1、それ以外はZF=0。上位1bitがSFに反映される。PFは結果に応じてセットされる。



用途
  XORは次のような用途に使われる。

・ビットの反転
例えば4bit目と5bit目を反転したい場合、次のようにする
	xor	al,00011000b	

al=78h(=11110000b)の場合、
11110000
00011000

11101000
となり、4bit目と5bit目が反転されていることがわかる。


・データの暗号化
同じ値で2度排他的論理和をとるともとの値に戻る。これを利用することで簡単なデータの暗号化を行うことができる。
例えば、78h(=11110000b)を暗号キー53h(=01010011b)で暗号化すると、
11110000
01010011

10100011
10100011(=A3h)が得られる。これをもう一度、暗号キー53h(010100011)で復元すると
10100011
01010011

11110000
11110000b(=78h)が得られ、これは最初の値と同じである。このように、暗号化、復元が簡単にできる。


・レジスタへの0の代入
下のようにSRCとDESTに同じレジスタを用いるとそのレジスタは0になる。
	xor	al,al	

例えば、AL=78h(=11110000b)の場合、
11110000
11110000

00000000
この方法は、レジスタが8bit,32bitの時はメリットはないが、16bitレジスタの場合は命令のサイズが1バイト小さくなる。しかしCPUが8086の場合、若干処理速度が遅くなる。頻繁的に使われる方法である。

排他的論理和 【86】
【書式】
 XOR  dest,source
 dest   = reg/mem   source = reg/mem/imm
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF
【動作】
destsource の排他的論理和を行い、その結果をdest に格納し、結果に従ってフラグを設定します。
destdest XOR source
【備考】
  • 対応するビットごとにXORをします。 この結果、対応するビット間の値が異なる場合のみ結果が1となり、他の場合は0となります。
【用例】
 
MOV  AL,55H  ;
バイナリ01010101Bを設定
XOR  AL,AL   ;
バイナリ01010101BとXORすることで結果が0となります。

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