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


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


Рис. П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

386+ SHRD Логический сдвиг вправо с двойной точностью


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

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

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

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

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

Пример 1


mov AX,0C001h

mov BX,900Eh

shrd AX,BX,1 ;AX=6000h, BX=900Eh, CF=1

Пример 2


mov AX,0C001h

mov BX,900Eh

shrd AX,BX,2 ;AX=B000h, BX=900Eh, CF=0

Пример 3


mov AX,0C001h

mov BX,900Eh

shrd AX,BX,3 ;AX=D800h, BX=900Eh, CF=0

Пример 4


mov EBX,0FFCS000h

mov ESI,12345678h

mov CL,16

shrd EBX,ESI,CL ;EBX=5678FFC8h,

;ESI=12345678h, CF=0

 




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



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