Команда 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