Иллюстрированный самоучитель по Assembler


ROL Циклический сдвиг влево - часть 3


В качестве операнда команды sal можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение.

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

Команда воздействует на флаги OF, SF, ZF, PF и CF.

Пример 1


mov AL,7

sal AL,1 ;AL= 0Eh=7*2, CF=0

Пример 2


mov AX,IFh

mov CL,8

sal AX,CL ;AX=lF00h=lFFh*256, CF=0

Пример 3


mov SI,-1 ;SI=FFFFh

mov CL,4

sal SI,CL ;SI=FFF0h=-l*16=-16, CF=1

Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.

Пример


mov EBX,0000C835h

sal EBX,5 ;EBX=001906A0h

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

sar AL,1 ;AL=3=7/2, CF=1. Остаток

;потерян

Пример 2


mov AX,lFF0h

mov CL,4

sar AX,CL ;AX=01FFh=lFF0h/16, CF=0

Пример 3


mov BX,-8 ;BX=FFF8h

mov CL,2

sar BX,CL ;BX=FFFEh=-2=-8/4, CF=0

Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.

Пример


mov EAX,0F0001234h

sar EAX,8 EAX=FFF00012h

 




Начало  Назад  Вперед



Книжный магазин