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

S

386Р+ SGDT Сохранение в памяти содержимого регистра таблицы глобальных дескрипторов

Команда копирует содержимое регистра таблицы глобальных дескрипторов GDTR (линейный базовый адрес таблицы и ее границу) в поле из 6 байт, указанное в качестве операнда.

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

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

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

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

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › S
Рис. П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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.