logo

Система команд x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

SHLD

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

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

?

 

 

 

*

*

?

*

*

 

Код

Команда

Описание

Проц.

Пример

OF A4

SHLD r/m16,r16,imm8

Сдвинуть r/m16 влево на imm8 бит, заполнив сдвинутые биты битами из r16

Intel386

shld ax,bx,10

OF A4

SHLD r/m32,r32,imm8

Сдвинуть r/m32 влево на imm8 бит, заполнив сдвинутые биты битами из r32

Intel386

shld eax,ecx,4

OF A5

SHLD r/m16,r16,CL

Сдвинуть r/m16 влево на CL бит, заполнив сдвинутые биты битами из r16

Intel386

shld [di],bx,cl

OF A5

SHLD r/m32,r32,CL

Сдвинуть r/m32 влево на CL бит, заполнив сдвинутые биты битами из r32

Intel386

shld [ebx],eax,cl

Операция:

(* Count представляет собой беззнаковое целое, согласованное с последним операндом команды (байтом imm8 или байтом в регистре CL) *)

ShiftAmt = count MOD 32;

InBits = register; (* Допускается частичное перекрытие операндов *)

IF ShiftAmt = 0

THEN (Нет операции)

ELSE

  IF ShiftAmt ³ OperandSize

  THEN (* Плохие параметры *)

  r/m = UNDEFINED;

  CF, OF, SZ, ZF, AF, PF = UNDEFINED;

  ELSE (* Выполнить сдвиг *)

     CF = BIT[Base, OperandSize - ShiftAmt]; (* Последний бит выдвигается *)

     FOR i = OperandSize - 1 DOWNTO ShiftAmt

     DO BIT[Base,i] = BIT[Base,i-ShiftAmt]; OD;

     FOR i = ShiftAmt - 1 DOWNTO 0

     DO BIT[Base,i] = BIT[Base,i - ShiftAmt + OperandSize]; OD;

     Установить SF, ZF, PF (r/m); (* SF, ZF, PF  устанавливаются согласно значению результата *)

     AF = UNDEFINED;

  FI;

FI;

Описание:

Команда SHLD сдвигает первый операнд, задаваемый полем r/m, влево на столько бит, на сколько указывает третий операнд-счетчик. Второй операнд (регистр общего назначения) содержит биты, которые при выполнении операции вдвигаются справа в значение первого операнда. Результат сохраняется обратно в первый операнд, а второй операнд-регистр остается неизменным.

Операнд-счетчик задается либо непосредственным байтом, либо содержимым регистра CL. Значение счетчика сдвига берется по модулю 32, чтобы ограничить его в рамках от 0 до 31. Эта команда полезна для сдвигов двойной точности (операнды длиной 64 бита или более).

Флаги SF, ZF и PF устанавливаются согласно значению результата. Флаг CF устанавливается в значение последнего старшего выдвинутого бита операнда-источника. Флаги OF и AF оставляются неопределенными для операций многобитовых сдвигов, для операции сдвига на 1 бит флаг OF устанавливается, если происходит изменение знака операнда-источника, и сбрасывается, если изменения знака не происходит. Если операнд-счетчик равен 0, то флаги не изменяются. Если величина операнда-счетчика превышает размерность операнда-источника, то по результатам операции значения флагов не определены.

Особые ситуации защищенного режима:

#GP(0), если операнд-назначение находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.

Особые ситуации режима V86:

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.


Входит в группу команд: Базовая система команд CPU



Все права защищены © 1997-2011 Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Яндекс.Метрика               Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники