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

Эти команды выполняют логические операции над битами операндов. Размерность операндов, естественно, должна быть одинакова. Команда последовательно повторяет действия над всеми битами.

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

· AND операнд_1,операнд_2 – операция логического умножения. Команда выполняет поразрядно логическую операцию И (конъюнкцию) над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1.

· OR операнд_1,операнд_2 – операция логического сложения. Команда выполняет поразрядно логическую операцию ИЛИ (дизъюнкцию) над битами операндов операнд_1 и операнд_2. Результат такж в операнд_1.

· ХОR операнд_1,операнд_2 – операция логического исключающего сложения. Команда выполняет поразрядно логическую операцию исключающего ИЛИ над битами операндов операнд_1 и операнд_2. Результат – операнд_1.

· TEST операнд_1,операнд_2 – операция проверки (способом логического умножения). Команда выполняет поразрядно логическую операцию над битами операндов операнд_1 и операнд_2. Состояние операндов остается прежним, изменяются только флаги ZF, SF, и PF, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния в исходных операндах.

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

Для установки определенных разрядов (битов) в 1 применяется команда OR операнд_1,операнд_2. В этой команде второй операнд, играющий роль маски, должен содержать единичные биты на месте тех разрядов, которые должны быть установлены в 1 в первом операнде:

or ах,10b ;установить 1-й бит в регистре ах

Для сброса определенных разрядов (битов) в 0 применяется команда AND операнд_1,операнд_2. В этой команде второй операнд, играющий роль маски, должен содержать нулевые биты на месте тех разрядов, которые должны быть установлены в 0 в первом операнде:

and ах, 0fffdh ;сбросить в 0 1-й бит в регистре ах

Для выяснения того, какие биты в обоих операндах различаются, или для инвертирования заданных битов в первом операнде применяется команда ХОR операнд_1,операнд_2. Интересующие нас биты второго операнда при выполнении команды XOR должны быть единичными, остальные – нулевыми:

хог ах, 10b ; инвертировать 1-й бит в регистре ах

jz mes ;переход, если 1-й бит в al был единичным

Для проверки состояния заданных битов в первом операнде применяется команда TEST операнд_1,операнд_2. Проверяемые биты первого операнда в маске (втором операнде) должны иметь единичное значение. Результатом команды является установка значения флага нуля ZF:

- если ZF = 0, то в результате логического умножения получился ненулевой результат, то есть хотя бы один единичный бит маски совпал с соответствующим единичным битом первого операнда;

- если ZF = 1, то в результате логического умножения получился нулевой результат, то есть ни один единичный бит маски не совпал с соответствующим единичным битом первого операнда.