ОБЩИЕ СВЕДЕНИЯ

Во многих случаях при выполнении программ необходимо проверять или изменять (маскировать) состояние одного или нескольких разрядов числа. Это можно осуществить с помощью следующих команд логических операций:

 

а) логического умножения

Код 1-й операнд 2-й операнд (маска) Изменяемые флаги
and r r,m r,m v C,O,P,S,Z

где r – операнд, ссылающийся на регистр;

m – операнд, ссылающийся на область памяти;

v – непосредственное значение операнда.

Очищает разряд числа, если в соответствующем разряде маски записан 0, иначе не изменяет его.

 

б) логического сложения

Код 1-й операнд 2-й операнд (маска) Изменяемые флаги
or r r,m r,m v C,O,P,S,Z

Устанавливает разряд числа в 1, если в таком же разряде маски будет записана 1, иначе не изменяет его.

 

в)логического «исключающего ИЛИ»

Код 1-й операнд 2-й операнд (маска) Изменяемые флаги
xor r r,m r,m v C,O,P,S,Z

Инвертирует содержимое разряда числа, если в соответствующем разряде маски записана 1, иначе не изменяет его.

Кроме того есть такая вспомогательная команда как test, которая выполняет проверку байта или слова на определенную битовую комбинацию. Действует как команда and, но не изменяет операнда.

 

ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ МАСКИРОВАНИЯ

 

Задание 1:Загрузить программным путем в память число 0А и число 21. Найти слово маски такое, чтобы сумма чисел была равна 1F, поместить его в память, произвести операцию маскирования командой «лог. исключающее ИЛИ». Проверить результат.

 

РЕШЕНИЕ: 0А16=1010=10102

+2116= 3310=1000012

-------------------

16=4310=1010112

маска 3416=5210=1101002

-------------------

1F16=3110=0111112

 

Программа 1

Адрес Машин­ный код Метка Мнемокод Комментарий
cs:0100   cs:0103   cs:0107   cs:0109   cs:010C   cs:0110 cs:0112   cs:0115 cs:0119 cs:011B cs:011D cs:011F BE1D01   C7040A00   8B04   BE1E01   C7042100   BE1F01   C7043400 CD20   mov si,011D   mov word ptr [si],000A   mov ax,[si]   mov si,011E   mov word ptr [si],0021   add ax,[si] mov si,011F   mov word ptr [si],0034 xor ax,[si] int 20 загрузим в SI смещение на первый операнд загрузим в память по смещению [SI] первый операнд загрузим в AX из памяти первый операнд загрузим в SI смещение на второй операнд загрузим в память по смещению [SI] второй операнд добавим к AX второй операнд загрузим в SI смещение на слово маски загрузим в память по смещению [SI] слово маски «исключающее ИЛИ» для суммы в регистре AX и маски

Задание 2:Из имеющегося массива чисел осуществить выборку тех, которые имеют единицы в 5 и 1 разрядах.