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

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

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

Код 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 разрядах.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: