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


386+ SETcc Установка байта по условию - часть 2


SHL Логический сдвиг влево


Команда полностью эквивалентна команде sal (арифметический сдвиг влево). См. описание команды sal.

386+ SHLD Логический сдвиг влево с двойной точностью


Трехоперандная команда shld с операндами op1, ор2 и орЗ осуществляет сдвиг влево первого из своих операндов opl. Число битов сдвига определяется третьим операндом орЗ. По мере сдвига операнда opl влево, выдвигаемые из него старшие биты, пройдя через флаг CF, теряются, ; на освобождающиеся места со стороны его младших битов поступают старшие биты второго операнда ор2, как если бы он вдвигался своим левым (старшим) концом в opl. Однако после завершения сдвига значение операнда ор2 не изменяется (рис. П10). Во флаге CF остается последний выдвинутый из операнда opl бит. Максимальное число битов сдвига составляет 31.

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

В качестве первого операнда op1можно указывать 16- или 32-разрядный регистр общего назначения или 16- или 32-битовую ячейку памяти. Вторым операндом ор2 может служить только 16- или 32-разрядный регистр общего назначения. Третий операнд, характеризующий число битов сдвига, может находиться в регистре CL или быть непосредственным значением.

Команда воздействует на флаги OF, SF, ZF, PF и CF.

Пример 1


mov AX,OC001h

mov BX,900Fh

shld AX,BX,1 ;AX=8003h, BX=900Fh, CF=1

Пример 2


mov AX,0C001h

mov BX,900Fh

shld AX,BX,2 ;AX=0006h, BX=900Fh, CF=1

Пример 3


mov AX,0C001h

mov BX,900Fh

shld AX,BX,3 ;AX=000Ch, BX=900Fh, CF=0

Пример 4


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).




Начало  Назад  Вперед



Книжный магазин