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

S

Пример 3:

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

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › S Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.

Пример:

mov EBX,0000C835h
sal EBX,5; EBX=001906A0h

SAR Арифметический сдвиг вправо

Команда sar осуществляет сдвиг вправо всех битов операнда. Младший бит операнда поступает в флаг CF. Если команда записана в формате:

sar операнд,1

Сдвиг осуществляется на 1 бит. Старший бит операнда сохраняет свое значение. Если команда записана в формате:

sar операнд,CL

Сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда, пройдя через флаг CF, теряются, а старший бит расширяется вправо (рис. П9).

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › S
Рис. П.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

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › S Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.

Пример:

mov EAX,0F0001234h
sar EAX,8 EAX=FFF00012h
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.