МЕТОДИЧЕСКИЕ УКАЗАНИЯ. Листинг 1 демонстрирует пример применения команд BSR и BSF
Листинг 1 демонстрирует пример применения команд BSR и BSF. Введите код и исследуйте работу программы в отладчике (в частности, обратите внимание на то, как меняется содержимое регистра ВХ после выполнения команд BSF и BSR). Листинг 1. Сканирование битов modelsmall stack 256 .data; сегментданных .code; сегмент кода main:; точка входа в программу movax, @data movds.ax .486; это обязательно xor ax, a x moval, 02h bsfbx.ax; bx=l jz ml; переход, если al=00h bsr bx.ax ml: mov ах, 4с00п; стандартный выход int 21h end main Листинг 2. Наглядный пример рассогласования последовательностей битов — преобразование неупакованного BCD-числа в упакованное BCD-число. Один из вариантов такого преобразования был рассмотрен нами ранее при обсуждении команды линейного сдвига SHL Попробуем выполнить подобное преобразование с использованием команд сдвига двойной точности (листинг 9.2). В общем случае длина числа может быть произвольной, но при этом нужно учитывать ограничения, которые накладываются используемыми ресурсами процессора. Ограничения связаны в основном с тем, что центральное место в преобразовании занимает регистр ЕАХ, поэтому, если преобразуемое число имеет размер более четырех байтов, то его придется делить на части. Но это уже чисто алгоритмическая задача, поэтому в нашем случае предполагается, что неупакованное BCD-число имеет длину 4 байта. Листинг 2. Преобразование BCD-числа modelsmall stack 256 .data len=4; длина неупакованного BCD-числа unpck_BCD label dword dig_BCD db 2, 4, 3, 6; неупакованное BCD-число 6342 pck_BCD dd 0; pck_BCD=00006342 .code main:; точка входа в программу movax, @data mov ds, ax xor ax, ax mov cx.len .386; этообязательно moveax, unpck_BCD ml: shl eax, 4; убираем нулевую тетраду shld pck_BCD, eax, 4; тетраду с цифрой заносим в поле pck_BCD shl eax, 4; убираем тетраду с цифрой из еах loop ml; цикл exit:; pck_BCD=00006342 mov ax, 4c00h int 21h end main Команды сдвига двойной точности SHLD и SHRD позволяют осуществлять с максимально возможной скоростью вставку битовой строки из регистра в произвольное место другой (большей) строки битов в памяти и извлечение в регистр битовой подстроки из некоторой строки битов в памяти. В результате этих операций смежные с подстрокой биты по ее обеим сторонам остаются неизменными. СОДЕРЖАНИЕ РАБОТЫ Набрать программы и проверить их работоспособность ВОПРОСЫ ВЫХОДНОГО КОНТРОЛЯ: 1. Назовите команды сдвига. 2. Назовите логические команды. ДОМАШНЕЕ ЗАДАНИЕ Выучить команды сдвига и логические команды.
Практическаяработа №3
|