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)の場合、
となり、4bit目と5bit目が反転されていることがわかる。
11110000 00011000
11101000
- ・データの暗号化
- 同じ値で2度排他的論理和をとるともとの値に戻る。これを利用することで簡単なデータの暗号化を行うことができる。
例えば、78h(=11110000b)を暗号キー53h(=01010011b)で暗号化すると、10100011(=A3h)が得られる。これをもう一度、暗号キー53h(010100011)で復元すると
11110000 01010011
10100011 11110000b(=78h)が得られ、これは最初の値と同じである。このように、暗号化、復元が簡単にできる。
10100011 01010011
11110000
- ・レジスタへの0の代入
- 下のようにSRCとDESTに同じレジスタを用いるとそのレジスタは0になる。
xor al,al
例えば、AL=78h(=11110000b)の場合、この方法は、レジスタが8bit,32bitの時はメリットはないが、16bitレジスタの場合は命令のサイズが1バイト小さくなる。しかしCPUが8086の場合、若干処理速度が遅くなる。頻繁的に使われる方法である。
11110000 11110000
00000000
排他的論理和 【86】
【書式】 XOR dest,source
dest = reg/mem source = reg/mem/imm
【フラグ】
OF DF IF TF SF ZF ?? AF ?? PF ?? CF 0 − − − X X − ? − X − 0
【動作】
dest とsource の排他的論理和を行い、その結果をdest に格納し、結果に従ってフラグを設定します。
dest ← dest XOR source
【備考】
- 対応するビットごとにXORをします。 この結果、対応するビット間の値が異なる場合のみ結果が1となり、他の場合は0となります。
【用例】
MOV AL,55H ;>バイナリ01010101Bを設定 XOR AL,AL ;>バイナリ01010101BとXORすることで結果が0となります。