Логические команды

К логическим командам относятся команды, выполняющие над битами данных логические операции:

– логическое отрицание (логическое НЕ);

– логическое сложение (логическое включающее ИЛИ);

– логическое умножение (логическое И);

– логическое исключающее сложение (логическое исключающее ИЛИ).

Таблицы истинности для логических операций приведены в табл.8.1 – 8.4.

Таблица 8.1. Таблица истинности для логического НЕ

Значение операнда
Результат операции

Таблица 8.2. Таблица истинности для логического включающего ИЛИ

Значение операнда 1
Значение операнда 2
Результат операции

Таблица 8.3. Таблица истинности для логического И

Значение операнда 1
Значение операнда 2
Результат операции

Таблица 8.4. Таблица истинности для логического исключающего ИЛИ

Значение операнда 1
Значение операнда 2
Результат операции

Имеется пять команд, выполняющих логические операции. Формат этих команд приведен на рис.8.1. Все эти команды выполняют логические операции над соответствующими битами операндов побитно от младших битов к старшим. Размерность обоих операндов должна быть одинакова.

 

Рис. 8.1. Формат логических команд

 

Команда NOT выполняет поразрядное инвертирование (замену значения на обратное) каждого бита операнда (операция логического НЕ). Результат записывается на место операнда.

Команда OR выполняет поразрядно логическую операцию включающего ИЛИ над битами операндов. Результат записывается на место первого операнда.

Команда AND выполняет поразрядно логическую операцию И над битами операндов. Результат записывается на место первого операнда.

Команда XOR выполняет поразрядно логическую операцию исключающего ИЛИ над битами операндов. Результат записывается на место первого операнда.

Выполнение всех этих команд оказывает влияние на состояние флагов ZF, SF и PF.

Команда TEST выполняет поразрядно логическую операцию И над битами операндов. Значение операндов остается прежним, изменяются только флаги ZF, SF и PF, что дает возможность анализировать состояние отдельных битов операнда без их изменения.

C помощью логических команд возможно выделение отдельных битов в операнде с целью их установки, сброса, инвертирования или просто проверки на определенное значение. Второй операнд играет роль маски, определяющей над какими битами первого операнда необходимо производить определенные действия.

Для установки отдельных битов (или разрядов) первого операнда в единицу применяется команда OR:

 

OR AL,00100010B ;Установка в 1 первого и пятого битов регистра AL

 

Для сброса отдельных битов первого операнда в ноль применяется команда AND:

 

AND AH,11101110B ;Установка в 0 нулевого и четвертого битов регистра AH

 

Для инвертирования отдельных битов первого операнда применяется команда XOR:

 

XOR CH,10001000B ;Инвертирование третьего и седьмого битов регистра CH

 

Команда TEST позволяет сравнивать биты, не модифицируя значения операндов:

 

TEST BL,00000100B

JZ m1; Переход по метке, если второй бит регистра BL равен нулю