Подтвердить что ты не робот

В чем смысл XOR в сборке x86?

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

xor     ax, ax

Просто ли это значение регистра?

4b9b3361

Ответ 1

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

Ответ 2

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

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

И, конечно, сам XOR - это операция eXclusive OR (a.k.a.: исключительная дизъюнкция) (но стыдно описывать здесь такие основы - использовать Википедию)

Ответ 3

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

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

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

Из этого знания довольно легко видеть, что если оба операнда одинаковы (например, ax и ax), результат будет равен 0.

Ответ 4

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

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

Ответ 5

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.

Ответ 6

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

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

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

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

    101001
xor 101001
  = 000000

Ответ 7

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

Ответ 8

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

  • или: 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

Ответ 9

Он определяет логический eXclusive OR

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

Итак, ИСТИНА, только если одно из выражений истинно, не оба.

Ответ 10

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

Ответ 11

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

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