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

SHR операнд,1

сдвиг осуществляется на 1 бит. В старший бит операнда загружается 0, а младший теряется. Если команда записана в формате

SHR onepand,CL

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

Рис. П11. Действие команды shr.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги CF, OF, PF, SF и ZF.

Пример 1


mov AL,7
shr AL,1 ;AL=3, CF=1

Пример 2


mov AX, lFF0h
mov CL,4
shr AX,CL ;AX=01FFh, CF=0

Пример 3


mov DX,9513h
mov CL,8
shr DX,CL ;DX=0095h, CF=0

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

Пример 1


mov ESI,0FFFF0009h
shr ESI,8 ;ESI=00FFFF00h, CF=0

Пример 2


; В полях данных
mem dd 11111111h
;B программном сегменте
shr mem,12 ;mem=00011111h, CF=0