Логические операции являются важным элементом в проектировании микросхем и имеют много общего в логике программирования. Команды AND, OR, XOR и TEST - являются командами логических операций. Эти команды используются для сброса и установки бит и для арифметических операций (см. лаб. раб. №2). Все эти команды обрабатывают один байт или одно слово в регистре или в памяти, и устанавливают флаги CF, OF, PF, SF, ZF.
Команды AND, OR и XOR аналогичны соответствующим командам языка Си: "&", "|" и "^".
TEST: действует как AND - устанавливает флаги, но не изменяет биты операнда.
Первый операнд в логических командах указывает на один байт или слово в регистре или в памяти и является единственным значением, которое может изменяться после выполнения команд.
Для следующих несвязанных примеров, предположим, что AL содержит 1100 0101, а BH содержит 0101 1100:
1. AND AL,BH;Устанавливает в AL 0100 0100
2. OR BH,AL;Устанавливает в BH 1101 1101
3. XOR AL,AL;Устанавливает в AL 0000 0000
4. AND AL,00;Устанавливает в AL 0000 0000
5. AND AL,0FH;Устанавливает в AL 0000 0101
|
|
6. OR CL,CL;Устанавливает флаги SF и ZF
Примеры 3 и 4 демонстрируют способ очистки регистра. В примере 5 обнуляются левые четыре бита регистра AL. Хотя команды сравнения CMP могут быть понятнее, можно применить команду OR для следующих целей:
1. OR CX,CX;Проверка CX на нуль
JZ...;Переход, если нуль
2. OR CX,CX;Проверка знака в CX
JS...;Переход, если отрицательно
Ниже приведено несколько примеров для команды TEST:
1. TEST BL,11110000B; Любой из левых бит в BL
JNZ...; равен единице?
2. TEST AL,00000001B; Регистр AL содержит
JNZ...; нечетное значение?
3. TEST DX,0FFH; Регистр DX содержит
JZ...; нулевое значение?
Еще одна логическая команда NOT (унарная операция "~" в языке Си) устанавливает обратное значение бит в байте или в слове, в регистре или в памяти: нули становятся единицами, а единицы - нулями. Если, например, регистр AL содержит 1100 0101, то команда NOT AL изменяет это значение на 0011 1010. Флаги не меняются.
Команда NOT не эквивалентна команде NEG, которая меняет значение с положительного на отрицательное и наоборот, посредством замены бит на противоположное значение и прибавления единицы.
Команды сдвига и циклического сдвига
Команды сдвига и циклического сдвига, которые представляют собой часть логических возможностей компьютера, имеют следующие свойства:
− обрабатывают байт или слово;
− имеют доступ к регистру или к памяти;
− сдвигают влево или вправо;
− сдвигают на величину до 8 бит (для байта) и 16 бит (для слова)
− сдвигают логически (без знака) или арифметически (со знаком).