-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||0F A4 SHLD r/m16,r16,imm8 2/3 r/m16 принимает результат SHL || для r/m16, конкатенированного || с r16 ||0F A4 SHLD r/m32,r32,imm8 2/3 r/m32 принимает результат SHL || для r/m32, конкатенированного || с r32 ||0F A5 SHLD r/m16,r16,CL 3/4 r/m16 принимает результат SHL || для r/m16, конкатенированного || с r16 ||0F A5 SHLD r/m32,r32,CL 3/4 r/m32 принимает результат SHL || для r/m32, конкатенированного || с r32 |----------------------------------------------------------------- Работа команды (* счетчик - это целое без знака, соответствующее последнемуоперанду команды, либо непосредственно заданному байту, либобайту в регистре CL *)ShiftAmt <- счетчик MOD 32;inBits <- регистр; (* Разрешены перекрывающиеся операнды *)IF ShiftAmt = 0THEN нет операции (* no operation *)ELSE IF ShiftAmt >= OperandSize THEN (* Неверные параметры *) r/m <- не определен; CF, OF, SF, ZF, AF, PF <- не определены; ELSE (* Выполнение сдвига *) CF <- BIT[База, OperandSize - ShiftAmt]; (* Последний бит, сдвинутый на выходе из операнда *) FOR i <- OperandSize - 1 DOWNTO ShiftAmt DO BIT[База, i] <- BIT[База, i - ShiftAmt]; OD; FOR i <- ShiftAmt - 1 DOWNTO 0 DO BIT[База, i] <- BIT[inBits, i - ShiftAmt + OperandSize]; OD; Установка SF, ZF, PF (r/m); (* SF,ZF и PF устанавливаются согласно значению результата *) AF <- не определен. FI;FI; ОписаниеКоманда SHLD выполняет сдвиг влево первого операнда, определяемого полемr/m, на число битов, задаваемое операндом - счетчиком. Второй операнд (r16или r32) обеспечивает биты, в которые происходит сдвиг справа (начиная с0). Результат записывается обратно в операнд r/m. Регистр остаетсянеизмененным.Операнд - счетчик задается либо непосредственным байтом, либо содержимымрегистра CL. Эти операнды берутся по модулю 32, задавая число от 0 до 31,на которое происходит сдвиг. Поскольку сдвигаемые биты обеспечиваютсязаданными регистрами, эту операцию полезно использовать для сдвиговоперандов повышенной точности (64 бита и более). Флаги SF, ZF и PFустанавливаются в соответствии с результатом. Флаг CF устанавливаются взначение последнего бита, удаленного сдвигом из операнда. Флаги OF и AFнеопределены. Изменяемые флагиФлаги SF, ZF и PF устанавливаются в соответствии с результатом; флаг CFустанавливаются в значение последнего бита, удаленного сдвигом изоперанда; после сдвига на одну позицию бита флаг OF устанавливается, еслипроизошло изменение знака, в противном случае он очищается; после сдвигаболее чем на одну битовую позицию флаг OF неопределен; флаг AFнеопределен, за исключением случая, когда счетчик сдвига был равен нулю,что не влияет на состояния флагов. Исключения защищенного режима#GP(0), если назначением является сегмент, недоступный для записи; #GP(0)в случае недопустимого исполнительного адреса операнда памяти в сегментахCS, DS, ES, FS или GS; #SS(0) в случае недопустимого адреса в сегменте SS;#PF(код сбоя) в случае страничного сбоя; #AC для невыравненной ссылки кпамяти при текущем уровне привилегированности, равном 3.Прерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев. #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3.