Ассемблер поддерживает полный набор инструкций, которые производят логические операции, включая END, OR, XOR и NOT. Эти инструкции полезны для манипуляции отдельными битами внутри байта или слова и для реализации булевской алгебры.
С двумя исходными битами логическая инструкция генерирует результат, показанный в таблице. Логические инструкции производят эти побитовые операции над соответствующими битами операндов источника. Например,
AND AX,DX
производит логический AND с битом 0 AX и с битом 0 в DX, как с битами источника, и битом 0 в AX, как битом назначения. И то же самое, с битами 1,2 и т.д. до 15 бита.
Логические операции Табл.4
Исходный бит А Исходный бит В A AND B A OR B A XOR B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
Инструкция AND обрабатывает два операнда в соответствии с правилами, показанными в табл.., устанавливая каждый бит в назначении в 1 только тогда, когда соответствующие биты источников - 1. AND позволяет Вам выделить указанный бит или установить указанные биты в 0. Например,
...
MOV DX,3dAH
|
|
IN AL,DX
AND AL,1
...
выделяет бит 0 из байта статуса цветного графического адаптера (CGA). Этот код устанавливает AL в 1, если видеопамять на CGA может быть обновлена без снега и устанавливает в 0, в противном случае.
Инструкция OR обрабатывает 2 операнда в соответствии с правилами, показанными в табл.4.2 устанавливая каждый бит в назначении в 1 если хотя бы 1 соответствующий исходный бит установлен в 1. OR позволяет Вам устанавливать исходный бит(ы) в 1.
Например,
...
MOV AX,40h
MOV ds,AX
MOV bx,10h
OR WORD PTR [bx],0030h
...
устанавливает 4-й и 5-й биты слова, флага аппаратуры BIOS, в 1, заставляя BIOS поддерживать монохромный дисплейный адаптер.
Инструкция XOR обрабатыват 2 операнда в соответствии с правилами, приведенными в табл.4, устанавливая каждый бит назначения в 1, только если 1 из соответствующих битов источника был 0, а другой 1. Например,
...
MOV AL,01010101b
XOR AL,11110000b
...
устанавливает AL в 10100101b или A5h. Главное здесь то, что когда выполняется "исключающее или" AL с 11110000b или 0F0h, единичные биты 0F0h переключают значения соответствующих битов, в то время как нулевые биты в 0F0h оставляют соответствующие биты в AL неизменными. В результате этого, все биты в старшей половине AL изменяются, а биты в младшей половине AL остаются неизменными. Поэтому XOR, удобный способ обнулить регистр. Например, этот код установит AX в 0:
XOR AX,AX
NOT переключает каждый бит операнда в противоположное состояние, как, если бы была выполнена XOR с операндом источника 0FFh. Например,
...
MOV bl,10110001b
NOT bl;переключает BL в 01001110b
XOR bl,0fffh;возвращает BL в 10110001b
...