Практическая работа 3 логические команды и команды сдвига
-
Цель работы
Изучение логических команд и команд сдвига: действия с отдельными битами – тестирование, установка и сбрасывание, инвертирование.
-
Логические операции
3.2.1 Особенности логических команд
Логические команды:
-
реализуют поразрядные операции: i-й разряд результата зависит только от i-ых разрядов операндов, при этом действие выполняется сразу над всеми разрядами операндов одновременно;
-
меняют все флаги условий, но интерес вызывает только флаг нуля ZF, (принимает значение 1, если получился нулевой результат, и равен 0 в противном случае). Что касается других флагов, то они, предназначенные для работы с числами, в логических операциях малоинформативны.
Операнды должны иметь одинаковый размер.
Краткие сведения о логических командах приведены в таблицах 3.1 и 3.2.
Таблица 3.1 – Логические команды
Синтаксис |
Логика работы |
AND op1, op2 |
op1 = op1 and op2 |
TEST op1, op2 |
op1 and op2 |
OR op1, op2 |
op1 = op1 or op2 |
XOR op1, op2 |
op1 = op1 xor op2 |
NOT op |
op = not op |
Таблица 3.2 – Таблица истинности
X |
Y |
X and Y конъюнкция |
X xor Y исключающее ИЛИ |
X or Y дизъюнкция |
not X отрицание |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
Описа- ние |
|
=1, если оба =1 |
=1, если оба разные |
=1, если хоть один =1 |
|
Команда TEST - аналог команды AND, но результат никуда не записывается, выполняется только установка флагов (наиболее информативен флаг ZF).
-
Применение логических команд
Приводимые ниже положения иллюстрируются примерами, в которых фигурируют регистры AL и BL, имеющие следующие начальные значения:
AL = 00001101b
BL = 00001100b
Второй операнд в командах (op2) – маска (шаблон).
-
Установка бит в 1 - команда OR (устанавливаемые биты в маске =1, остальные =0).
ПРИМЕР
Установить бит номер нуль в 1.
OR AL, 00000001b ; AL = 1101b
OR BL, 00000001b ; BL = 1101b
-
Сброс бит в 0 – команда AND (сбрасываемые биты в маске =0, остальные =1).
ПРИМЕР
Сбросить биты номер нуль, один и три.
AND AL, 11110100b ; AL= 00000000b
-
Инвертирование бит – команда XOR (инвертируемые биты в маске =1, остальные =0).
ПРИМЕР
Инвертировать бит номер нуль.
XOR AL, 0000 0001b ; AL:= 1100b
XOR BL, 0000 0001b ; BL:= 1101b
-
Проверка состояния бит – команда TEST (интересующие биты в маске =1, остальные =0).
ПРИМЕР
Протестировать состояние бита номер нуль регистра AL.
TEST AL, 00000001b
Результат операции – 00000001b – никуда не записывается, но в соответствии с ним изменяется флаг: ZF=0 – косвенный результат операции. Вывод: так как ZF=0, то результат не нулевой, значит интересующий бит =1 (остальные биты результата гарантированно зануляются, так как сама операция – суть умножение, а соответствующие биты в маске заданы равными нулю).
ПРИМЕР
Протестировать состояние бита номер нуль регистра BL.
TEST BL, 00000001b ; так как ZF=1, значит результат нулевой,
; следовательно, интересующий бит =0
-
Обнуление регистров - команда XOR
ПРИМЕР
Очистить регистр AL.
XOR АL, АL ; АL:=0
По сравнению с другими приемами - MOV АL, 0 или SUB AL, AL - выполняется быстрее.