51

アセンブリに取り掛かっていますが、xor に遭遇し続けています。次に例を示します。

xor     ax, ax

レジスタの値をクリアするだけですか?

4

11 に答える 11

62

A XOR B英語では「are A and B not equal」と訳されます。axは常にそれ自体に等しいため、ゼロxor ax, axに設定されます。ax

A B | A XOR B
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0
于 2011-01-20T16:17:45.790 に答える
24

xor reg, regレジスタをクリアするためによく使用されます。それはに代わることができますmov reg, 0

AFAIR、場合によっては速かった(または短かった)。

そしてもちろん、XOR 自体は排他的 OR (別名: 排他的論理和) 操作です (しかし、ここでそのような基本を説明するのは残念です - ウィキペディアを使用してください)。

于 2011-01-20T16:16:01.630 に答える
15

xor ax, axは、ax レジスタを に設定する最速の方法0です。命令のサイズと命令数の点で最速。それがどのように機能するかの詳細については、ビット演算の知識が少し必要です。

2 つのビット間の XOR 演算は、2 つのビットのうち 1 つだけが 1 の場合に 1 を返します。それ以外の場合は 0。説明する別の方法は、2 つのビットが異なる場合に 1 を返すということです。それ以外の場合は 0。

同じ長さの 2 つの 2 進数間の XOR 演算は、ビット単位で同様に機能します。2 つの数値を XOR すると、2 つのオペランドの対応するビットが異なる場合はビットが 1 に設定され、対応するビットが同じ場合は 0 に設定された数値が得られます。

この知識から、2 つのオペランドが同じ場合 (たとえば ax と ax)、結果が 0 になることはかなり簡単にわかります。

于 2011-01-22T09:52:06.990 に答える
7

xor register, registerすべてのビットが互いに比較されるため、レジスタを「ゼロ」にするために一般的に使用されます。

0 ビットはゼロのままです。1 XOR 1 も 0 であるため、1 ビットはゼロになります。

于 2011-01-20T16:16:17.777 に答える
5

xor = 排他的または。Exclusive またはのウィキペディアの定義を参照してください。

レジスタをそれ自体と xor すると、そのレジスタはゼロになります。

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

値 41 を例として (バイナリで) 見てみましょう。

    101001
xor 101001
  = 000000
于 2011-01-20T16:16:29.870 に答える
3
A B | XOR
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0

XOR 命令は、2 つのオペランドのすべてのビット ペアに対して上記の演算を実行します。そう0xFF xor 0xFFなるだろう0x00し、0x55 xor 0xAAなるだろう0xFF。はい、xor ax axクリアしますax

于 2011-01-20T16:15:21.633 に答える
2

この場合、レジスタがクリアされます... XOR は「排他的 OR」です...したがって、ax に 1010 が含まれていて、排他的または 1010 を含む場合は、0000 (クリア) が得られます。

于 2011-01-20T16:16:58.460 に答える
2

私の記憶が正しければ、xor ax, axは 1 バイトのアセンブリ命令ですが、mov ax, 0は少なくとも 3 で、おそらく実行に少し時間がかかります。xor 命令よりもデコードに時間がかかります。

于 2011-01-20T16:26:46.647 に答える
2

私がずっと前にプログラミングを始めたとき、プロセッサにもコンパイラにも排他的またははありませんでした。私がそれに慣れたとき、私は説明に固執しました:

  • or: a=1 または b=1 または both=1 の場合は true
  • xor: a=1 または b=1 で両方が 1 でない場合は true

それで:

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
于 2011-01-27T20:23:33.963 に答える
1

xor ax,ax は、ax を 0 に設定するために使用されます。

理由: 通常、どのプロセッサの xor 命令も、movl 0,%ax

于 2015-02-01T00:06:45.800 に答える
1

排他的論理和を決定します

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

したがって、TRUE は、式の両方ではなく、一方が true の場合にのみ TRUE になります。

于 2011-01-20T16:16:23.183 に答える