(Rotate operand Left)
Циклический сдвиг операнда влево
Схема команды:
| rol операнд,количество_сдвигов
|
Назначение: операция циклического сдвига операнда влево.
Синтаксис
Алгоритм работы:
- сдвиг всех битов операнда влево на один разряд, при этом старший бит операнда вдвигается в операнд справа и становится значением младшего бита операнда;
- одновременно выдвигаемый бит становится значением флага переноса cf;
- указанные выше два действия повторяются количество раз, равное значению второго операнда.
Состояние флагов после выполнения команды:
Применение:
Команда rol используется для циклического сдвига разрядов операнда влево. Отличие этого сдвига от rcl в том, что очередной сдвигаемый бит одновременно вдвигается в операнд справа и становится значением флага cf. Так же, как и для других сдвигов, значение второго операнда (счетчика сдвига) ограничено диапазоном 0...31. Это объясняется тем, что микропроцессор использует только пять младших разрядов операнда количество_разрядов. Аналогично другим командам сдвига сохраняется эффект, связанный с поведением флага of, значение которого имеет смысл только в операциях сдвига на один разряд:
- если of=1, то текущее значение флага cf и выдвигаемого слева бита операнда различны;
- если of=0, то текущее значение флага cf и выдвигаемого слева бита операнда совпадают.
Этот эффект, как вы помните, обусловлен тем, что флаг of устанавливается в единицу всякий раз при изменении знакового разряда операнда.
;поменять местами половинки регистра eax: mov ax,0ffff0000h mov cl,16 rol eax,cl ;eax=0000ffffh |
См. также: урок 9 и команды rcr, rcl, ror, sal, sar, shl, shr