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

RCL


(Rotate operand through Carry flag Left)

Циклический сдвиг операнда влево через флаг переноса

Схема команды:  rcl операнд,количество_сдвигов 

Назначение: операция циклического сдвига операнда влево через флаг переноса cf.


Алгоритм работы:

сдвиг всех битов операнда влево на один разряд, при этом старший бит операнда становится значением флага переноса cf;

одновременно старое значение флага переноса cf вдвигается в операнд справа и становится значением младшего бита операнда;

указанные выше два действия повторяются количество раз, равное значению второго операнда команды rcl.



Состояние флагов после выполнения команды:

11 00
OF CF
?r

Здесь обозначение ?r означает то, что анализ состояния флага имеет смысл при определенном сочетании операндов. В случае команды rcl флаг of представляет интерес, если сдвиг осуществляется на один разряд (см. ниже описание применения команды rcl).
Применение:


Команда rcl используется для циклического сдвига разрядов операнда влево. Особенность этого сдвига в том, что он происходит с некоторой задержкой, так как очередной сдвигаемый бит оказывается на некоторое время вне операнда. В это время можно произвести его извлечение и (или) подмену. Другой важный момент заключается в том, что для счетчика сдвига микропроцессор использует только пять младших разрядов операнда количество_разрядов. Таким образом, значение, большее 31, микропроцессором не допускается (аппаратно это ограничение реализуется тем, что игнорируются значения всех битов счетчика, кроме первых пяти). Обратите внимание на еще один интересный эффект, связанный с поведением флага of. В операциях сдвига на один разряд по изменению этого флага можно судить о факте изменения знакового (старшего) разряда операнда:

    of=1, если текущее значение флага cf и выдвигаемого бита операнда слева различны;

    of=0, если текущее значение флага cf и выдвигаемого бита операнда слева совпадают.

     

    ;сдвиг операнда, занимающего два двойных слова ;на четыре разряда влево ch_l    dd      ...     ;младшая часть 64-битного операнда ch-2    dd      ...     ;старшая часть 64-битного операнда ...         mov     cx,4    ;счетчик сдвигов в cx         mov     eax,ch_l         mov     edx,ch_h m1:     clc             ;очистка флага cf         rcl     eax,1   ;старший бит eax в cf         rcl     edx,1   ;cf в младший бит edx, старший бит edx в cf         loop    m1         

    См. также: урок 9 и команды , , , , , ,



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