S
Пример 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