Сдвиги и логические команды
Группа сдвигов и логических команд служит для реализации ряда функций, связанных с преобразованием и анализом операндов, которые размещаются как в регистре, так и в памяти.
Команды сдвига.Обеспечивают прежде всего удвоение чисел и деление пополам. Для удвоения числа без знака достаточно сдвинуть все его разряды на один влево, заполнив младший бит нулем. Поскольку старший бит при сдвиге передается в разряд 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;