Команды логических операций
Логические операции представлены булевыми операторами NOT (инверсия), AND (конъюнкция), OR (дизъюнкция), XOR (исключающее или) и командой TEST, которая выполняет конъюнкцию операндов, но не изменяет их значений (неразрушающая проверка). Все логические операции являются поразрядными, то есть выполняются независимо для всех бит операндов. Форматы команд:
AND OR XOR TEST | mem/reg, mem/reg mem/reg, mem/reg mem/reg, mem/reg mem/reg, mem/reg | AND OR XOR TEST | mem/reg data, mem/reg data, mem/reg data, mem/reg,data | AND OR XOR TEST | ac, data ac,data ac,data ac,data |
NOT mem/reg
Рассмотрим пример. Пусть необходимо сформировать сорока байтный массив путём преобразования символов, вводимых с клавиатуры. Каждые четыре байта массива формируются путём: 1) инверсии очередного введённого байта; 2) конъюнкции байта с числом Ach; 3) инвертирования в исходном байте третьего и пятого разрядов; 4) дизъюнкции байта с ранее введённым символом (для первого символом дизъюнкцию не производить - в память записывается введенный байт). Фрагмент программы реализующей решение поставленной задачи имеет вид:
Assume cs:cod, ds:data
Data segment
Aa db 40 dup(?)
Data ends
Cod segment
Start proc far
Push ds
Mov ax,0