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

       

RCR


(Rotate operand through Carry flag Right)

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

 

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

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


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

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

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

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



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

11 00
OF CF
?r

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


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

    of=1, если текущие (то есть до операции сдвига) значения флага cf и старшего, левого бита операнда различны;

    of=0, если текущие (то есть до операции сдвига) значения флага cf и старшего, левого бита операнда слева совпадают.


     
    ;подсчет числа единичных битов в операнде operand dw      ... ...         mov     cx,16   ;размер операнда         xor     al,al   ;счетчик единичных битов cycl:   rcr     operand,1         jc      $+4     ;переход, если очередной выдвинутый бит равен 1         jmp     $+4     ;переход, если очередной выдвинутый бит равен 0         inc     al      ;увеличить счетчик единичных битов         loop    cycl         

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


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