В качестве первого операнда op1можно указывать 16- или 32-разрядный регистр общего назначения или 16- или 32-битовую ячейку памяти. Вторым операндом ор2 может служить только 16- или 32-разрядный регистр общего назначения. Третий операнд, характеризующий число битов сдвига, может находиться в регистре CL или быть непосредственным значением.
Команда воздействует на флаги OF, SF, ZF, PF и CF.
Пример
mov AX,OC001h
mov BX,900Fh
shld AX,BX,1 ;AX=8003h, BX=900Fh, CF=1
Пример
mov AX,0C001h
mov BX,900Fh
shld AX,BX,2 ;AX=0006h, BX=900Fh, CF=1
Пример
mov AX,0C001h
mov BX,900Fh
shld AX,BX,3 ;AX=000Ch, BX=900Fh, CF=0
Пример
mov EBX,0FFCS000h
mov ESI,12340000h
mov CL,16
shld EBX,ESI,CL ;EBX=80001234h,
;ESI=12340000h, CF=0
SHR Логический сдвиг вправо
Команда shr осуществляет сдвиг вправо всех битов операнда. Младший бит операнда поступает в флаг CF. Если команда записана в формате
SHR операнд,1
сдвиг осуществляется на 1 бит. В старший бит операнда загружается 0, а младший теряется. Если команда записана в формате
SHR onepand,CL
сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда заполняются нулями, а младшие, пройдя через флаг CF, теряются (Рисунок П11).