другой конец. Циклический сдвиг влево
Циклические сдвиги переносят появляющийся в конце операнда бит в
другой конец. Циклический сдвиг влево ROL и циклический сдвиг
вправо ROR различаются лишь направлением сдвига данных. Аналогично,
циклический сдвиг влево с переносом RCL и циклический сдвиг вправо
с переносом RCR являются зеркальным отражением друг друга. Команды
ROL и RCL различаются в трактовке флага переноса. Байтовая команда
RCL рассматривает данные как 9=битовые, причем роль девятого бита
играет флаг переноса. Если операнд - слово, команда ROL циклически
сдвигает 16 бит, а команда RCL циклически сдвигает 17 бит.
Команды снизу Фиг.4.20 не возвращают выдвигаемые из операнда
биты в свой операнд. Эти биты попадают в флаг переноса, а затем
просто исчезают. Значение, вдвигаемое в операнд, определяется типом
сдвига. В случае логического сдвига вдвигаемый бит всегда 0;
арифметический сдвиг выбирает вдвигаемый бит таким, чтобы сохранить
знак операнда.
Почему сдвиг называется арифметическим, если он входит в группу
логических команд? Сдвиг числа на одну позицию (бит) эквивалентен
умножению или делению этого числа на 2. В десятичной системе
счисления, добавление нуля в конце числа умножает его на 10. В
двоичной арифметике добавление 0 в конце умножает число на 2. Так
как ЭВМ не может добавить другой бит в конце операнда, операция
сдвига действует аналогично. Команда сдвига влево перемещает все
биты влево на одну позицию, а в младшую позицию помещает 0. Таким
образом, сдвиг влево умножает число на 2. Если величина сдвига
больше единицы, число умножается на 2, возведенное в степень,
равную содержимому счетчика сдвигов. Например, сдвиг влево на 3
бита эквивалентен умножению на 8.
Сдвиг числа вправо - это то же самое деление на 2. Сдвинутый
операнд - частное, а флаг переноса - остаток. Если счетчик сдвигов
больше 1, операнд по=прежнему есть частное, а остаток теряется.
Содержание Назад Вперед