Другие языки программирования и технологии

Для чего служит операция xor в ассемблере. Буду очень признательна за полный ответ или ссылку.

xor a, b
делает операцию xor побитово для 2 чисел, присваивает результат первому операнду

xor - логическая операция "не-или", эквивалентная операции "не равно" ( <> )

например
a = 3
b = 10
двоичная запись
a = 0011
b = 1010

результат xor a, b
1001
( если соответствующие двоичные цифры не равны, то единичка, если равны, то нуль )

Айййй нафига я все это писал, в Википедии есть же все. А я и не знал. :(

В википедии не написано:
Раньше, когда компьютеры были не особо мощные, среди программистов считалось особым шиком обнулять переменные вот так:
xor a, a
вместо
sub a,a или mov a,0

xor операция выполнялась на один такт процессора, когда sub только на 2 такта, а mov a,0 вообще требует долгого обращения к оперативной памяти.
Андрей Кашкаров
Андрей Кашкаров
1 895
Лучший ответ
XOR это аналог комманды NOT, но только более подробная (побитная).
Она инвертирует биты единичками.
Xor можно использовать для инвертирования отдельных битов в байте или части байта.
Нр. Чтобы инвертировать только EA в EAX, команда not не годится поэтому можно написать так
xor EAX,11111111111111110000000000000000b.
Биты в позиции где поставлены единички инвертируются. а AX в EAX останется не тронутым.
---------------------------------------------------------------------------------------------
Ещё добавлю:
And
1)удаляет биты из байта ноликами,
например: and eax,11111111111111110000000000000000;ax в eax будет стёрто
2)служит для частичного заполнения байта (вроде частичного OR)
например:
mov edi,000fh;ноликами пометим пространство для копирования
and edi,esi; скопирует из esi в edi, только 12 старших разрядов, а 4 нижнижние в edi останутся не тронутыми
Должно было быть как-то так or edi,esi,000fh(если бы с тремя операндами)

а ОR устанавливает биты в байте единичками
Latif Abdukarimov
Latif Abdukarimov
2 116

Похожие вопросы