Логические команды выполняют побитовые операции по приведенным ниже правилам:
Бит источника
Бит приемника
AND
OR
XOR
NOT
TEST
Логические операции, кроме NOT, устанавливают флаги SF (знака), ZF (нуля) и PF(четности), флаг переноса устанавливается в 0. Все команды, за исключением TEST, сохраняют результат логической операции в приемнике. Команда TEST выполняет такую же операцию, что и AND. Различие только в том, что результат операции TEST не сохраняется в приемнике, а используется для следующей команды перехода по нулю.
Логические команды хороши тем, что выполняются быстро, быстрее “коротких” команд сложения и вычитания, однако студенты редко ими пользуются в своих программах. Приведу некоторые полезные приемы применения этих команд.
Часто встречающийся в программах прием – использование логической команды “исключающее или” (XOR) для обнуления регистра:
XOR AX,AX.
Поскольку логические команды устанавливают флаги, их можно применять для проверки значений регистров. Например,
OR DX,DX ;проверить значение в регистре.
Следует отметить, что эта команда не изменит значения в регистре DX, но при этом, если в регистре хранится нулевое значение, будет установлен в 1 флаг ZF, если старший 15-ый бит в регистре единичный (что свидетельствует об отрицательном значении при представлении его как числа со знаком), то будет установлен в 1 флаг знака SF).
При проверки четности или нечетности значения в регистре, можно воспользоваться командой
AND DX,1H ;выделить младший бит,
учитывая, что двоичное представление четных чисел имеет нулевой последний бит. Следует отметить, что при использовании команды AND значение в регистре будет этой командой изменено. Если необходимо оставить значение в регистре DX без изменений, то следует воспользоваться командой TEST, например, таким образом:
TEST DX,00000001B ;проверить младший бит.
В разделе “команды передачи управления” приводится более подробный фрагмент программы с использованием логических команд.