Команды логических операций: and, or, xor, test, not

Логические операции являются важным элементом в проектировании микросхем и имеют много общего в логике программирования. Команды 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 бит (для слова)

− сдвигают логически (без знака) или арифметически (со знаком).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: