Что означает XOR в сборке x86? - PullRequest
37 голосов
/ 20 января 2011

Я собираюсь в сборку и продолжаю работать с xor, например:

xor     ax, ax

Это просто очищает значение регистра?

Ответы [ 11 ]

48 голосов
/ 20 января 2011

A XOR B на английском языке будет переводиться как «А и В не равны». Таким образом, xor ax, ax установит ax в ноль, поскольку ax всегда равен самому себе.

A B | A XOR B
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0
18 голосов
/ 20 января 2011

xor reg, reg часто используется для очистки регистра.Это может быть альтернативой mov reg, 0

AFAIR, в некоторых случаях это было быстрее (или короче).

И, конечно же, сама XOR - это исключительная операция ИЛИ (иначе: исключающая дизъюнкция) (но стыдно описывать такие основы - используйте Википедию)

12 голосов
/ 22 января 2011

xor ax, ax - это самый быстрый способ установить регистр топора на 0.Самый быстрый с точки зрения размера инструкции и количества инструкций.Для получения подробной информации о том, как это работает, вам необходимо немного знать арифметику битов.

Операция XOR между двумя битами возвращает 1, если один и только один из двух битов равен 1;0 иначеДругой способ объяснить это то, что он возвращает 1, если два бита различны;В противном случае 0.

Операция XOR между двумя двоичными числами одинаковой длины работает аналогично для побитовой обработки.XOR двух чисел, вы получите число с битами, установленными в 1, где соответствующие биты двух операндов отличаются, 0, если соответствующие биты одинаковы.(например, топор и топор) результат будет 0.

6 голосов
/ 20 января 2011

xor register, register обычно используется для обнуления регистра, потому что все биты сравниваются друг с другом:

0-биты остаются нулевыми.1 бит становится нулем, потому что 1 XOR 1 также равен 0.

4 голосов
/ 20 января 2011

xor = эксклюзив или. См. Определение Википедии для Эксклюзив или .

Если вы зарегистрируете регистр самостоятельно, он обнулит этот регистр.

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

Давайте возьмем значение 41 в качестве примера (в двоичном виде):

    101001
xor 101001
  = 000000
3 голосов
/ 20 января 2011
A B | XOR
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0

Инструкция XOR выполняет вышеуказанную операцию с каждой парой битов в двух операндах.Таким образом, 0xFF xor 0xFF будет 0x00, а 0x55 xor 0xAA будет 0xFF.И да, xor ax ax очищает ax.

2 голосов
/ 27 января 2011

Когда я начал программировать давным-давно, не было ни эксклюзива, ни процессора, ни компилятора.Когда я дошел до этого, я остановился на описании:

  • или: true, если a = 1 или b = 1, или оба = 1
  • xor: true, если a = 1 илиb = 1, но не оба = 1

, поэтому:

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
2 голосов
/ 20 января 2011

В этом случае он очистит регистр ... XOR является "эксклюзивным или" ... поэтому, если топор содержит 1010, а вы эксклюзивный или что с 1010 вы получите 0000 (очищено)

1 голос
/ 01 февраля 2015

xor ax, ax используется для установки ax на 0.

Причина: обычно инструкция xor на любом процессоре занимает меньше байтов при сборке, чем при использовании movl 0,%ax

1 голос
/ 20 января 2011

Если я правильно помню, xor ax, ax является однобайтовой инструкцией по сборке, тогда как mov ax, 0 будет равно по крайней мере 3 и, вероятно, будет выполняться немного дольше. Конечно, декодирование займет больше времени, чем инструкция xor.

...