Всего к логическим относятся четыре команды AND, OR, XOR и NOT, переводятся имена команд: "и", "или", "исключающее или" и "нет" соответственно. Все они предназначены для побитового сравнения двух операндов, кроме команды NOT - это команда преобразвания. Рассмотрим поочередно логику работы этих команд.
Результат работы команды AND будет таким:
0 + 0 = 0
0 + 1 = 0
1 + 0 = 0
1 + 1 = 1
то есть если сравниваются два байта 01001011b и 11000001b, то результате мы получим 01000001b.
Команда OR работает так:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 1
XOR:
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 0
Команда инверсии битов NOT работает с одним операндом, который может быть регистром или памятью:
1 = 0
0 = 1
В каких же случаях используются эти команды?
Ну, в случае NOT, наверное, все понятно - применяется для инверсии битов, не очень подходит для перевода положительных чисел в отрицательные, так как применив команду NOT к числу 5, мы получим -6, необходимо после этого прибавить к результату единицу чтобы получить правильный результат. Поэксперементируйте на калькуляторе для программистов с бинарными функциями.
OR зачастую используют для проверки регистра на ноль. С помощью AND можно, например, гарантировано сделать число четным применив к нему битовую маску 11111110b. Но чаще OR и AND используют для работы с настроечными битовыми масками. Один байт может иметь восемь положений "вкл" - "выкл", то есть 0 и 1, это самый компактный способ сохранения настроек в компьютере, вот для чтения и изменения таких настроечных байтов, лучше всего, подходят OR и AND.
Команду XOR зачастую использую для обнуления какого-то регистра, потому как XOR EAX,EAX работает быстрее чем MOV EAX,0. Есть у XOR более практичное применение - этой командой шифруют данные применяя битовый ключ, этим же ключом затем данные и расшифровывают. Использую самый простой пример: английская буква A имеет битовый код 00001010b применив к нему битовый ключ 01001000b мы получим число 66 в десятичном формате, применив ключ повторно получим ту же букву A.
Ставьте лайк, если статья была полезной.
#ассемблер #логические команды #and #xor #or