Справочник по языку Ассемблера IBM PC

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


К командам циклического сдвига относятся команды, сохраняющие значения сдвигаемых бит. Есть два типа команд циклического сдвига:

команды простого циклического сдвига;

команды циклического сдвига через флаг переноса cf.

К командам простого циклического сдвига относятся:

операнд,счетчик_сдвигов (Rotate Left) — циклический сдвиг влево.


Содержимое операнда сдвигается влево на количество бит, определяемое операндом счетчик_сдвигов. Сдвигаемые влево биты записываются в тот же операнд справа.

операнд,счетчик_сдвигов (Rotate Right) — циклический сдвиг вправо.


Содержимое операнда сдвигается вправо на количество бит, определяемое операндом счетчик_сдвигов. Сдвигаемые вправо биты записываются в тот же операнд слева.

Рис. 3. Схема работы команд простого циклического сдвига

Как видно из рис. 3, команды простого циклического сдвига в процессе своей работы осуществляют одно полезное действие, а именно: циклически сдвигаемый бит не только вдвигается в операнд с другого конца, но и одновременно его значение становиться значением флага cf.


К примеру, для того чтобы обменять содержимое двух половинок регистра eax, достаточно выполнить следующую последовательность команд:



          ...         mov     eax,ffff0000h         mov     cl,16         rol     eax,cl

Команды циклического сдвига через флаг переноса cf

отличаются от команд простого циклического сдвига тем, что сдвигаемый бит не сразу попадает в операнд с другого его конца, а записывается сначала в флаг переноса cf. Лишь следующее исполнение данной команды сдвига (при условии, что она выполняется в цикле) приводит к помещению выдвинутого ранее бита с другого конца операнда (см. рис. 4).

К командам циклического сдвига через флаг переноса cf относятся следующие:

операнд,счетчик_сдвигов (Rotate through Carry Left) — циклический сдвиг влево через перенос.



Содержимое операнда сдвигается влево на количество бит, определяемое операндом счетчик_сдвигов. Сдвигаемые биты поочередно становятся значением флага переноса cf.

операнд,счетчик_сдвигов (Rotate through Carry Right) — циклический сдвиг вправо через перенос.

Содержимое операнда сдвигается вправо на количество бит, определяемое операндом счетчик_сдвигов. Сдвигаемые биты поочередно становятся значением флага переноса cf.



Рис. 4. Команды циклического сдвига через флаг переноса cf

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

битовых последовательностей.

Под рассогласованием битовой последовательности здесь и далее подразумевается действие, которое позволяет некоторым образом локализовать и извлечь нужные участки этой последовательности и записать их в другое место.


Содержание раздела