double arrow

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

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

Заказать ✍️ написание учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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