-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||D0 /4 SAL r/m8,1 3/4 Умножение на 2 один раз || байта r/m ||D2 /4 SAL r/m8,CL 3/4 Умножение на 2 CL раз || байта r/m ||C0 /4 ib SAL r/m8,imm8 2/4 Умножение на 2 imm8 раз || байта r/m ||D1 /4 SAL r/m16,1 3/4 Умножение на 2 один раз || слова r/m ||D3 /4 SAL r/m16,CL 3/4 Умножение на 2 CL раз || слова r/m ||C1 /4 ib SAL r/m16,imm8 2/4 Умножение на 2 imm8 раз || слова r/m ||D1 /4 SAL r/m32,1 3/4 Умножение на 2 один раз || двойного слова r/m ||D3 /4 SAL r/m32,CL 3/4 Умножение на 2 CL раз || двойного слова r/m ||C1 /4 ib SAL r/m32,imm8 2/4 Умножение на 2 imm8 раз || двойного слова r/m || 1 ||D0 /7 SAR r/m8,1 3/4 Деление со знаком на 2 один раз|| байта r/m || 1 ||D2 /7 SAR r/m8,CL 3/4 Деление со знаком на 2 CL раз || байта r/m || 1 ||C0 /7 ib SAR r/m8,imm8 2/4 Деление со знаком на 2 imm8 раз|| байта r/m || 1 ||D1 /7 SAR r/m16,1 3/4 Деление со знаком на 2 один раз|| слова r/m || 1 ||D3 /7 SAR r/m16,CL 3/4 Деление со знаком на 2 CL раз || слова r/m || 1 ||C1 /7 ib SAR r/m16,imm8 2/4 Деление со знаком на 2 imm8 раз|| слова r/m || 1 ||D1 /7 SAR r/m32,1 3/4 Деление со знаком на 2 один раз|| двойного слова r/m || 1 ||D3 /7 SAR r/m32,CL 3/4 Деление со знаком на 2 CL раз || двойного слова r/m || 1 ||C1 /7 ib SAR r/m32,imm8 2/4 Деление со знаком на 2 imm8 раз|| двойного слова r/m ||D0 /4 SHL r/m8,1 3/4 Умножение на 2 один раз || байта r/m ||D2 /4 SHL r/m8,CL 3/4 Умножение на 2 CL раз || байта r/m ||C0 /4 ib SHL r/m8,imm8 2/4 Умножение на 2 imm8 раз || байта r/m ||D1 /4 SHL r/m16,1 3/4 Умножение на 2 один раз || слова r/m ||D3 /4 SHL r/m16,CL 3/4 Умножение на 2 CL раз || слова r/m ||C1 /4 ib SHL r/m16,imm8 2/4 Умножение на 2 imm8 раз || слова r/m ||D1 /4 SHL r/m32,1 3/4 Умножение на 2 один раз || двойного слова r/m ||D3 /4 SHL r/m32,CL 3/4 Умножение на 2 CL раз || двойного слова r/m ||C1 /4 ib SHL r/m32,imm8 2/4 Умножение на 2 imm8 раз || двойного слова r/m ||D0 /5 SHR r/m8,1 3/4 Деление без знака на 2 один раз|| байта r/m ||D2 /5 SHR r/m8,CL 3/4 Деление без знака на 2 CL раз || байта r/m ||C0 /5 ib SHR r/m8,imm8 2/4 Деление без знака на 2 imm8 раз|| байта r/m ||D1 /5 SHR r/m16,1 3/4 Деление без знака на 2 один раз|| слова r/m ||D3 /5 SHR r/m16,CL 3/4 Деление без знака на 2 CL раз || слова r/m ||C1 /5 ib SHR r/m16,imm8 2/4 Деление без знака на 2 imm8 раз|| слова r/m ||D1 /5 SHR r/m32,1 3/4 Деление без знака на 2 один раз|| двойного слова r/m ||D3 /5 SHR r/m32,CL 3/4 Деление без знака на 2 CL раз || двойного слова r/m ||C1 /5 ib SHR r/m32,imm8 2/4 Деление без знака на 2 imm8 раз|| двойного слова r/m |Деление не аналогично IDIV; округление направлено в сторону отрицательнойбесконечности. Работа команды(* Счетчик - это второй параметр *)(врем) <- счетчик;WHILE (врем <> 0)DO IF команда SAL или SHL THEN CF <- старший бит r/m; FI; IF команда SAR или SHR THEN CF <- младший бит r/m; FI; IF команда SAL или SHL THEN r/m <- r/m * 2; FI; IF команда SAR THEN r/m <- r/m / 2 (* Деление со знаком, округление в сторону отрицательной неопределенности *); FI; IF команда SHR THEN r/m <- r/m / 2 (* Деление без знака *); FI; врем <- врем - 1;OD;(* Определение переполнения для различных команд *)IF счетчик = 1THEN IF команда SAL или SHL THEN OF <- старший бит r/m <> (CF); FI; IF команда SAR THEN OF <- 0; FI; IF команда SHR THEN OF <- старший бит операнда; FI;ELSE OF <- неопределен;FI; ОписаниеКоманда SAL (или ее синоним SHL) сдвигает биты операнда в верхнюю сторону.Старший бит сдвигается во флаг CF, а младший бит очищается.Команды SAR и SHR сдвигают биты операнда вниз. Младший бит операндасдвигается во флаг CF. Действие этих команд эквивалентно делению на 2.Команда SAR выполняет деление со знаком с округлением в сторонуотрицательной неопределенности (в отличие от команды IDIV); старший битостается без изменений. Команда SHR выполняет деление без знака; старшийбит очищается.Сдвиг повторяется число раз, заданное вторым операндом, которыйпредставляет собой либо непосредственное значение, либо содержимоерегистра CL. Для уменьшения максимального времени выполнения процессорi486 не позволяет значения счетчика сдвигов, превышающие 31. При попыткевыполнить сдвиг более чем 31 раз используются только младшие пять битовсчетчика сдвигов. (8086 использует как счетчик числа сдвигов все 8 битов).Флаг OF изменяется только при использовании форм команд, выполняющихединичный сдвиг. Для сдвига влево флаг OF очищается, если старший битответа тот же, что и результирующее значение флага CF (т.е. два старшихбита исходного операнда были одинаковы); флаг OF устанавливается, если ониразличны. В случае команды SAR флаг OF очищается для всех единичныхсдвигов. Команда SHR устанавливает флаг OF равным старшему биту исходногооперанда. Изменяемые флагиФлаг OF изменяется для единичных сдвигов; флаг OF для множественныхсдвигов не определен; флаги CF, ZF, PF и SF устанавливаются в соответствиис результатом. Исключения защищенного режима#GP(0), если назначением является сегмент, недоступный для записи; #GP(0)в случае недопустимого исполнительного адреса операнда памяти в сегментахCS, DS, ES, FS или GS; #SS(0) в случае недопустимого адреса в сегменте SS;#PF(код сбоя) в случае страничного сбоя; #AC для невыравненной ссылки кпамяти при текущем уровне привилегированности, равном 3. Исключения режима реальных адресовПрерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH. Исключения виртуального режима 8086Те же исключения, что и для режима реальных адресов: #PF (код сбоя) длястраничных сбоев. #AC для невыравненной ссылки к памяти при текущем уровнепривилегированности, равном 3.