Сдвиги и логические команды


Группа сдвигов и логических команд служит для реализации ряда функций, связанных с преобразованием и анализом опе­рандов, которые размещаются как в регистре, так и в памяти.

Команды сдвига.Обеспечивают прежде всего удвоение чисел и деление пополам. Для удвоения числа без знака достаточно сдвинуть все его разряды на один влево, заполнив младший бит нулем. Поскольку старший бит при сдвиге передается в разряд CF, анализ значения этого флага позволяет судить о точности результата. Например, удвоение числа 65 (01000001) путем сдвига влево дает точный результат 130 (10000010), что определяется значением CF=0. Дальнейшее удвоение даст не­правильный результат 4 (00000100), что определяется значением CF=1. Аналогично, используя сдвиг вправо, осуществляется деление числа без знака пополам. Например, сдвигая число 13 (00001101), получаем 6 (00000110) и CF=1, что свидетельствует о неточном результате.

Команды, выполняющие удвоение и деление пополам чисел без знака, имеют мнемокоды SHL (логический сдвиг влево) и SHR (логический сдвиг вправо) соответственно. Аналогичные операции для чисел со знаком реализуются с помощью команд SAL (арифметический сдвиг влево) и SAR (арифметический сдвиг вправо).

Длина сдвигаемого операнда, как обычно, опре­деляется полем w первого байта (w = 0- 8-разрядный операнд, w = 1- 16-разрядный операнд). С помощью любой из перечис­ленных команд сдвига операнд может сдвигаться на произволь­ное число разрядов до 8 или 16 включительно.

Значение флага OF устанавливается равным «1», если окончательное значение бита знака при последнем сдвиге отли­чается от его предыдущего значения.

Логические команды.Служат для реализации четырех буле­вых функций: AND (поразрядное логическое И), OR (поразряд­ное логическое ИЛИ), XOR (поразрядная логическая сумма по модулю 2) и NOT (поразрядное логическое НЕ). Сюда также от­носится команда TEST (проверка), которая состоит в поразряд­ном логическом умножении (И) операндов без занесения резуль­тата умножения в место назначения и служит для анализа со­держимого источника по значениям флагов.

Все двухоперандные команды AND, OR, XOR и TEST имеют по три одинаковых формата и совпадают по времени исполне­ния. Однооперандная команда NOT осуществляет инвертирова­ние операнда и имеет один формат. Следует отметить, что при выполнении логических команд флаги CF и OF не изменяют сво­их значений, а в соответствии с результатом операции устанав­ливаются флаги PF, SF и ZF. Флаг AF после выполнения логи­ческих команд имеет неопределенное значение.



Дата добавления: 2018-11-26; просмотров: 798;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.