ROL Циклический сдвиг влево
Команда rol осуществляет сдвиг влево всех битов операнда. Если команда записана в формате
rol операнд,1
сдвиг осуществляется на 1 бит. Старший бит операнда загружается в его младший разряд и одновременно заносится в флаг CF (рис. П6). Если команда записана в формате
rol операнд,CL
сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда перемещаются в его младшие разряды. Последний перенесенный бит одновременно заносится в флаг CF.
Рис. П6. Действие команды rol.
В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF и CF.
Пример 1
mov AX,1
Пример 2
mov DL,8 Oh
Пример 3
mov DX,3000h
Пример 4
mov DX,2000h
Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит
сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная
величина сдвига составляет 31 бит.
Пример
mov ЕАХ,012345678h
>ROR Циклический сдвиг вправо
Команда ROR осуществляет циклический сдвиг вправо всех битов операнда. Если
команда записана в формате
ror операнд,1
сдвиг осуществляется на 1 бит. Младший бит операнда записывается в его старший разряд и одновременно поступает в флаг CF (рис.Ш). Если команда записана в формате
ror операнд,CL
сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда перемещаются в его старшие разряды. Последний перенесенный бит одновременно заносится в флаг CF.
Рис. П7. Действие команды ror.
В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF и CF.
Пример 1
mov AX,2
Пример 2
mov DL,81h
Пример 3
mov BX,000Eh
Пример 4
mov BX,0009h
Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.
Пример
mov EDI,90000001h
SAHF Запись содержимого регистра АН в регистр флагов
Команда sahf копирует разряды 7, 6, 4, 2 и 0 регистра АН в регистр флагов процессора,
устанавливая тем самым значения флагов SF, ZF, AF, PF и CF соответственно. Команда
не имеет операндов.
Команда sahf (совместно с командой lahf) дает возможность читать и изменять
значения флагов процессора, в том числе флагов SF, ZF, AF и PF, которые нельзя
изменить непосредственно. Однако следует иметь в виду, что команда sahf заполняет
только младший байт регистра флагов. Поэтому нельзя изменить с ее помощью, например,
состояние флага OF.
Пример 1
lahf ;Регистр АН отображает
Пример 2
lahf ;Регистр АН отображает
Пример 3
mov АН, 5
SAL Арифметический сдвиг влево
Команда sal осуществляет сдвиг влево всех битов операнда. Старший бит операнда
поступает в флаг CF. Если команда записана в формате
sal операнд, 1
сдвиг осуществляется на 1 бит. В младший бит операнда загружается 0. Если команда записана в формате
sal операнд,CL
сдвиг осуществляется на число битов, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда, пройдя через флаг CF, теряются, а младшие заполняются нулями (рис. П8.).
Рис. П8. Действие команды sal.
В качестве операнда команды sal
можно указывать любой регистр (кроме сегментного) или ячейку памяти размером
как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное
значение.
Каждый сдвиг влево эквивалентен умножению знакового числа на 2, поэтому команду
sal удобно использовать для возведения операнда в степень 2.
Команда воздействует на флаги OF, SF, ZF, PF и CF.
Пример 1
mov AL,7
Пример 2
mov AX,IFh
Пример 3
mov SI,-1 ;SI=FFFFh
Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.
Пример
mov EBX,0000C835h
SAR Арифметический сдвиг вправо
Команда sar осуществляет сдвиг вправо всех битов операнда. Младший бит операнда
поступает в флаг CF. Если команда записана в формате
sar операнд,1
сдвиг осуществляется на 1 бит. Старший бит операнда сохраняет свое значение. Если команда записана в формате
sar операнд,CL
сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда, пройдя через флаг CF, теряются, а старший бит расширяется вправо (рис. П9).
Рис. П.9. Действие команды sar.
В качестве операнда можно указывать
любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так
и в слово. Не допускается использовать в качестве операнда непосредственное
значение.
Каждый сдвиг вправо эквивалентен делению знакового числа на 2, поэтому команду
sar удобно использовать для деления операнда на целые степени 2. Команда воздействует
на флаги OF, SF, ZF, AF, PF и CF.
Пример 1
mov AL,7
Пример 2
mov AX,lFF0h
Пример 3
mov BX,-8 ;BX=FFF8h
Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.
Пример
mov EAX,0F0001234h