Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
468028.rtf
Скачиваний:
4
Добавлен:
09.11.2019
Размер:
701.39 Кб
Скачать

Синтаксис:

NOT dst ; (dst) ← not (dst)

AND dst, src ; (dst) ← (dst) and (src)dst, src ; (dst) ← (dst) or (src)dst, src ; (dst) ← (dst) xor (src)dst, src ; (dst) test (src)

В этих командах допустимы следующие комбинации операндов:

dst

src

r8

i8, r8, m8

m8

i8, r8

r16

il6, rl6, ml6

m16

il6, rl6

В таблице 6.2. приведены значения регистра флагов, устанавливаемые логическими командами.

Cодержимое младшей части регистра AX поразрядно умножить на двоичное число 0010 1010b (2Аh)

MOV AL, 0001 1100b; AL = 0001 1100b (1Ch)AL, 0010 1010b; AL = 0000 1000b (08h)

Содержимое младшей части регистра AL логически сложить с содержимым его старшей части.

MOV AL, 1110 1100b; (ECh)AH, 1010 1010b; (AAh)AL, AH; AL = 1110 1110b (EEh) AH = 1010 1010b (AAh)

Над содержимым АL и числом 1Аh (0001 1010b) произвести операцию исключающее ИЛИ.

MOV AL, 1110 0111b; AL = 1110 0111b (E7h)

XOR AL, 1Ah; AL = 1111 1101b (FDh)BH, 1100bBH, 0011b; = 00000000b -> ZF=1BH, 1010b; = 00001000b -> ZF=0

Над содержимым младшей части регистра AХ выполнить операцию отрицания.

MOV AL, 0001 1100b; AL = 0001 1100b (1Сh)AL; AL = 1110 0011b (E3h)

Приемы использования логических операций.

С помощью логических команд можно производить выделение отдельных битов в операнде с целью их установки, сброса, инвертирования или просто проверки на определенное значение. Для организации подобной работы с битами операнд src обычно играет роль маски. С помощью установленных в 1 битов этой маски и определяются нужные для конкретной операции биты операнда dst. Рассмотрим на примерах основные приемы использования логических операции.

Установка определенных разрядов в 1.

Для установки определенных разрядов в 1 применяется команда OR dst, maska. В этой команде операнд maska должен содержать единичные биты на месте тех разрядов, которые должны быть установлены в 1 в операнде dst. Например, чтобы установит разряды 3 и 6 аккумулятора AL, нужно использовать маску x1xx1xxx и выполнить команду OR AL, x1xx1xxx b;

Сброс определенных разрядов в 0.

Для сброса определенных разрядов в 0 применяется команда AND dst, maska. В этой команде оператор maska должен содержать нулевые биты на месте тех разрядов, которые должны быть установлены в 0 в операторе dst. Например, чтобы очистить разряды 3 и 6 аккумулятора AL, нужно использовать маску x0xx0xxx и выполнить команду AND AL, x0xx0xxx b;.

Сравнение битов двух операндов.

Для выяснения того, какие биты в двух операндах различаются применяется команда XOR dst, maska. В этой команде операнд maska должен содержать единичные биты на месте тех разрядов, которые сравниваются, а остальные - нулевыми. Например, чтобы сравнить разряды 3 и 6 аккумулятора AL, нужно использовать маску 01001000 и выполнить команду XOR AL, 01001000 b;.

Инвертирования состояния заданных бит.

Для инвертирования состояния заданных бит в dst также применяется команда XOR dst, src.

Проверки состояния заданных бит.

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

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

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

Замечание. Для реакции на результат команды TEST целесообразно использовать команду перехода jnz - переход, если флаг нуля zf ненулевой, или команду с обратным действием - jz - переход, если флаг нуля zf = 0.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]