ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 38

SAHF - Запись AH во флаги
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|9E        SAHF         2        Запись AH во флаги             |
|                                SF ZF xx AF xx PF xx CF        |
-----------------------------------------------------------------
Работа команды
--------------
SF:ZF:xx:AF:xx:PF:xx:CF <- AH;
Описание
--------
Команда SAHF загружает флаги SF, ZF, AF, PF и CF значениями из
регистра AH, битами 7,6,4,2 и 0, соответственно.
Изменяемые флаги
----------------
Флаги SF, ZF, AF, PF и CF загружаются значениями из регистра AH.
Исключения защищенного режима
----------------------------------
     Отсутствуют
Исключения режима реальных адресов
---------------------------------------
     Отсутствуют
Исключения виртуального режима 8086
----------------------------------------
     Отсутствуют
-----------------------------------------------------------------
SAL/SAR/SHL/SHR - Команды сдвига
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|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 счетчик = 1
THEN
  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.
-----------------------------------------------------------------
SBB - Целочисленное вычитание с заемом
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|1C ib     SBB AL,imm8      1    Вычитание с заемом непосредст- |
|                                венного байта из AL            |
|1D iw     SBB AX,imm16     1    Вычитание с заемом непосредст- |
|                                венного слова из AX            |
|1D id     SBB EAX,imm32    1    Вычитание с заемом непосредст- |
|                                венного двойного слова из EAX  |
|80 /3 ib  SBB r/m8,imm8    1/3  Вычитание с заемом непосредст- |
|                                венного байта из байта r/m     |
|81 /3 iw  SBB r/m16,imm16  1/3  Вычитание с заемом непосредст- |
|                                венного слова из слова r/m     |
|81 /3 id  SBB r/m32,imm32  1/3  Вычитание с заемом непосредст- |
|                                венного двойного слова из      |
|                                двойного слова r/m             |
|83 /3 ib  SBB r/m16,imm8   1/3  Вычитание с заемом непосредст- |
|                                венного расширенного знаком    |
|                                байта из слова r/m             |
|83 /3 ib  SBB r/m32,imm8   1/3  Вычитание с заемом непосредст- |
|                                венного расширенного знаком    |
|                                байта из двойного слова r/m    |
|18 /r     SBB r/m8,r8      1/3  Вычитание с заемом байтового   |
|                                регистра из байта r/m          |
|19 /r     SBB r/m16,r16    1/3  Вычитание с заемом регистра -  |
|                                слова из слова r/m             |
|19 /r     SBB r/m32,r32    1/3  Вычитание с заемом регистра -  |
|                                двойного слова из              |
|                                двойного слова r/m             |
|1A /r     SBB r8,r/m8      1/2  Вычитание с заемом из байтового|
|                                регистра байта r/m             |
|1B /r     SBB r16,r/m16    1/2  Вычитание с заемом из регистра-|
|                                слова слова r/m                |
|1B /r     SBB r32,r/m32    1/2  Вычитание с заемом из регистра-|
|                                двойного слова                 |
|                                двойного слова r/m             |
-----------------------------------------------------------------
Работа команды
--------------
IF SRC это байт, а DEST это слово или двойное слово
THEN DEST <- DEST - (SignExtend(SRC) + CF)
ELSE DEST <- DEST - (SRC + CF);
Описание
--------
Команда SBB складывает второй операнд (SRC) с флагом CF и
вычитает результат из первого операнда (DEST). Результат
вычитания присваивается первому операнду (DEST), и флаги
устанавливаются соответствующим образом.
При вычитании из операнда-слова непосредственного байтового
значения это непосредственное значение сначала расширяется
знаком.
Изменяемые флаги
----------------
Флаги OF, SF, ZF, AF, PF и CF устанавливаются в соответствии с
результатом.
Исключения защищенного режима
----------------------------------
#GP(0), если назначением является сегмент, недоступный для
записи; #GP(0) в случае недопустимого исполнительного адреса
операнда памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в
случае недопустимого адреса в сегменте SS; #PF(код сбоя) в
случае страничного сбоя; #AC для невыравненной ссылки к памяти
при текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев. #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
-----------------------------------------------------------------
SCAS/SCASB/SCASW/SCASD - Сравнение строковых данных
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|AE        SCAS m8          6    Сравнение байтов AL-ES:[DI],   |
|                                обновление (E)DI               |
|AF        SCAS m16         6    Сравнение слов   AX-ES:[DI],   |
|                                обновление (E)DI               |
|AF        SCAS m32         6    Сравнение двойных слов         |
|                                EAX-ES:[DI], обновление (E)DI  |
|AE        SCASB            6    Сравнение байтов AL-ES:[DI],   |
|                                обновление (E)DI               |
|AF        SCASW            6    Сравнение слов   AX-ES:[DI],   |
|                                обновление (E)DI               |
|AF        SCASD            6    Сравнение двойных слов         |
|                                EAX-ES:[DI], обновление (E)DI  |
-----------------------------------------------------------------
Работа команды
--------------
IF AddressSize = 16
THEN использование DI в качестве индекса-назначения;
ELSE (* AddressSize = 32 *) использование EDI в качестве индекса-
        назначения;
FI;
IF байтовый тип команды
THEN
  AL - [индекс-назначения]; (* Сравнение байта в AL и назначения
                               *)
  IF DF = 0 THEN IncDec <- 1 ELSE IncDec <- -1; FI;
ELSE
  IF OperandSize = 16
  THEN
    AX - [индекс-назначения]; (* Сравнение слова в AL
                                  и назначения *)
    IF DF = 0 THEN IncDec <- 2 ELSE IncDec <- -2; FI;
  ELSE (* OperandSize = 32 *)
    EAX - [индекс-назначения]; (* Сравнение двойного слова в EAX
                                   и назначения *)
    IF DF = 0 THEN IncDec <- 4 ELSE IncDec <- -4; FI;
  FI;
FI;
индекс-назначения = индекс-назначения + IncDec;
Описание
--------
Команда SCAS вычитает байт или слово памяти, задаваемое
регистром назначения, из регистров AL, AX или EAX. Результат
отбрасывается; происходит только установка флагов. Операнд
должен адресоваться из регистра ES; переопределение сегмента не
допускается.
Если атрибут размера адреса команды равен 16 битам, в качестве
регистра назначения используется регистр DI; в противном случае
атрибут размера адреса равен 16 битам, и используется регистр
EDI.
Адрес сравниваемых данных памяти определяется исключительно
содержимым регистра назначения, а не операндом команды SCAS.
Операнд удостоверяет адресуемость сегмента ES и определяет тип
данных. Перед выполнением команды SCAS следует загрузить в
регистр DI или EDI правильное значение индекса.
После того, как сравнение выполнено, регистр назначения
автоматически обновляется. Если флаг направления равен 0 (была
выполнена команда CLD), происходит инкремент регистра
назначения; если флаг направления равен 1 (была выполнена
команда STD), происходит декремент регистра назначения. При
сравнении байтов инкремент или декремент равен 1; при сравнении
слов инкремент или декремент равен 2; При сравнении двойных слов
инкремент или декремент равен 4.
Команды SCASB, SCASW и SCASD являются синонимами команды SCAS,
работающими с байтом, словом и двойным словом, соответственно,
не требующими операндов. Их проще программировать, но они не
обеспечивают проверки типа или сегмента.
Команде SCAS может предшествовать префикс REPE или REPNE для
поиска в блоке CX или ECX байтов или слов. Подробности см. в
описании команды REP.
Изменяемые флаги
----------------
Флаги OF, SF, ZF, AF, PF и CF устанавливаются в соответствии с
результатом.
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #AC для невыравненной ссылки к памяти при
текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев. #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
-----------------------------------------------------------------
SETcc - Установка байта по условию
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|0F 97    SETA r/m8    4/3       Установка байта, если выше     |
|                                (CF = 0 и ZF = 0)              |
|0F 93    SETAE r/m8   4/3       Установка байта, если выше     |
|                                или равно (CF = 0)             |
|0F 92    SETB r/m8    4/3       Установка байта, если ниже     |
|                                (CF = 1)                       |
|0F 96    SETBE r/m8   4/3       Установка байта, если ниже     |
|                                или равно (CF = 1 или ZF = 1)  |
|0F 92    SETC r/m8    4/3       Установка байта, если перенос  |
|                                (CF = 1)                       |
|0F 94    SETE r/m8    4/3       Установка байта, если равно    |
|                                (ZF = 1)                       |
|0F 9F    SETG r/m8    4/3       Установка байта, если больше   |
|                                (ZF = 0 или SF = OF)           |
|0F 9D    SETGE r/m8   4/3       Установка байта, если больше   |
|                                или равно (SF = OF)            |
|0F 9C    SETL r/m8    4/3       Установка байта, если меньше   |
|                                (SF <> OF)                     |
|0F 9E    SETLE r/m8   4/3       Установка байта, если меньше   |
|                                или равно (ZF=1 или SF <> OF)  |
|0F 96    SETNA r/m8   4/3       Установка байта, если не выше  |
|                                (CF = 1)                       |
|0F 92    SETNAE r/m8  4/3       Установка байта, если не выше  |
|                                или равно (CF = 1)             |
|0F 93    SETNB r/m8   4/3       Установка байта, если не ниже  |
|                                (CF = 0)                       |
|0F 97    SETNBE r/m8  4/3       Установка байта, если не ниже  |
|                                или равно (CF=0 и ZF=0)        |
|0F 93    SETNC r/m8   4/3       Установка байта, если нет      |
|                                переноса (CF = 0)              |
|0F 95    SETNE r/m8   4/3       Установка байта, если не равно |
|                                (ZF = 0)                       |
|0F 9E    SETNG r/m8   4/3       Установка байта, если не       |
|                                больше (ZF = 1 или SF <> OF)   |
|0F 9C    SETNGE r/m8  4/3       Установка байта, если не       |
|                                больше или равно (SF <> OF)    |
|0F 9D    SETNL r/m8   4/3       Установка байта, если не       |
|                                меньше (SF = OF)               |
|0F 9F    SETNLE r/m8  4/3       Установка байта, если не мень- |
|                                ше или равно (ZF=0 и SF=OF)    |
|0F 91    SETNO r/m8   4/3       Установка байта, если нет      |
|                                переполнения (OF=0)            |
|0F 9B    SETNP r/m8   4/3       Установка байта, если нет кон- |
|                                троля четности (PF = 0)        |
|0F 99    SETNS r/m8   4/3       Установка байта, если нет      |
|                                знака (SF = 0)                 |
|0F 95    SETNZ r/m8   4/3       Установка байта, если нет нуля |
|                                (ZF = 0)                       |
|0F 90    SETO r/m8    4/3       Установка байта, если          |
|                                переполнение (OF = 1)          |
|0F 9A    SETP r/m8    4/3       Установка байта, если контроль |
|                                четности (PF = 1)              |
|0F 9A    SETPE r/m8   4/3       Установка байта, если контроль |
|                                на проверку четности (PF = 1)  |
|0F 9B    SETPO r/m8   4/3       Установка байта, если контроль |
|                                на проверку нечетности (PF = 0)|
|0F 98    SETS r/m8    4/3       Установка байта, если знак     |
|                                (SF = 1)                       |
|0F 94    SETZ r/m8    4/3       Установка байта, если ноль     |
|                                (ZF = 1)                       |
-----------------------------------------------------------------
Работа команды
--------------
IF условие THEN r/m8 <- 1 ELSE r/m8 <- 0; FI;
Описание
--------
Команда SETcc сохраняет байт в приемнике, заданном
исполнительным адресом или регистром, если условие
удовлетворяется, либо записывает туда 0, если условие не
удовлетворяется.
Изменяемые флаги
----------------
     Отсутствуют
Исключения защищенного режима
----------------------------------
#GP(0), если назначением является сегмент, недоступный для
записи; #GP(0) в случае недопустимого исполнительного адреса
операнда памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в
случае недопустимого адреса в сегменте SS; #PF(код сбоя) в
случае страничного сбоя; #AC для невыравненной ссылки к памяти
при текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев. #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
-----------------------------------------------------------------
SGDT/SIDT - Сохранение регистра таблицы дескрипторов
            глобальной/прерываний
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|0F 01 /0  SGDT m      10        Сохранение GDTR в m            |
|0F 01 /1  SIDT m      10        Сохранение IDTR в m            |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- 48-битовое содержимое базы/границы регистра;
Описание
--------
Команды SGDT и SIDT копируют содержимое регистов дескрипторных
таблиц в шесть байтов памяти, задаваемых операндом. Поле границы
(LIMIT) регистра присваивается первому слову по исполнительному
адресу. Если атрибут размера операнда команды равен 32 битам, то
следующищим трем байтам присваивается поле базы (BASE) регистра,
а четвертый байт заполняется нулем. В противном случае атрибут
размера операнда равен 16 битам, и следующим четырем байтам
присваивается 32-разрядное поле базы регистра.
Команды SGDT и SIDT используются только операционным программным
обеспечением, в прикладных программах они не используются.
Изменяемые флаги
----------------
     Отсутствуют
Исключения защищенного режима
----------------------------------
Прерывание 6, если операндом назначения является регистр;
#GP(0), если назначением является сегмент, недоступный для
записи; #GP(0) в случае недопустимого исполнительного адреса
операнда памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в
случае недопустимого адреса в сегменте SS; #PF(код сбоя) в
случае страничного сбоя; #AC для невыравненной ссылки к памяти
при текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 6, если операндом назначения является регистр;
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев. #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Замечание по совместимости
--------------------------
16-разрядные формы команд SGDT и SIDT совместимы с процессором
80286, если не выполняются ссылки к значению в старших восьми
битах. Процессор 80286 записывает в эти старшие биты единицы,
тогда как процессоры 386 DX и i486, если атрибут размера
операнда равен 16 битам, записывают туда 0. В Справочном
руководстве программиста по iAPX 286 эти биты заданы как
устанавливаемые командами SGDT и SIDT в неопределенное
состояние.
-----------------------------------------------------------------
SHLD - Сдвиг влево двойной точности
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|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 = 0
THEN нет операции (* 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.
-----------------------------------------------------------------
SHRD - Сдвиг вправо двойной точности
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|0F AC  SHRD r/m16,r16,imm8  2/3 r/m16 принимает результат SRL  |
|                                для r/m16, конкатенированного  |
|                                с r16                          |
|0F AC  SHRD r/m32,r32,imm8  2/3 r/m32 принимает результат SHR  |
|                                для r/m32, конкатенированного  |
|                                с r32                          |
|0F AD  SHRD r/m16,r16,CL    3/4 r/m16 принимает результат SHR  |
|                                для r/m16, конкатенированного  |
|                                с r16                          |
|0F AD  SHRD r/m32,r32,CL    3/4 r/m32 принимает результат SHR  |
|                                для r/m32, конкатенированного  |
|                                с r32                          |
-----------------------------------------------------------------
Работа команды
--------------
(* счетчик - это  целое  без  знака,  соответствующее  последнему
операнду команды,  либо  непосредственно  заданному  байту,  либо
байту в регистре CL *)
ShiftAmt <- счетчик MOD 32;
inBits <- регистр; (* Разрешены перекрывающиеся операнды *)
IF ShiftAmt = 0
THEN нет операции (* no operation *)
ELSE
  IF ShiftAmt >= OperandSize
  THEN (* Неверные параметры *)
    r/m <- не определен;
    CF, OF, SF, ZF, AF, PF <- не определены;
  ELSE (* Выполнение сдвига *)
    CF <- BIT[r/m, ShiftAmt - 1];
      (* Последний бит, сдвинутый на выходе из операнда *)
    FOR i <- 0 TO OperandSize - 1 - ShiftAmt
    DO
      BIT[r/m, i] <- BIT[r/m, i - ShiftAmt];
    OD;
    FOR i <- OperandSize - ShiftAmt TO OperandSize - 1
    DO
      BIT[r/m, i] <- BIT[inBits, i + ShiftAmt - OperandSize];
    OD;
    Установка SF, ZF, PF   (r/m);
    (* SF,ZF и PF устанавливаются согласно значению результата *)
    AF <- не определен.
  FI;
FI;
Описание
--------
Команда SHRD выполняет сдвиг вправо первого операнда,
определяемого полем r/m, на число битов, задаваемое операндом -
счетчиком. Второй операнд (r16 или r32) обеспечивает биты, в
которые происходит сдвиг слева (начиная с 31). Результат
записывается обратно в операнд 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.
-----------------------------------------------------------------
SLDT - Сохранение регистра локальной таблицы дескрипторов
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|0F 00 /0  SLDT r/m16  2/3       Сохранение LDTR в слове,       |
|                                заданном исполнительным адресом|
-----------------------------------------------------------------
Работа команды
--------------
r/m16 <- LDTR;
Описание
--------
Команда SLDT сохраняет регистр локальной дескрипторной таблицы
(LDTR) в двух-байтовом регистре или адресе памяти, на который
указывает операнд, задающий исполнительный адрес. Этот регистр
содержит селектор, указывающий на глобальную дескрипторную
таблицу.
Команда SLDT используется только операционным программным
обеспечением, в прикладных программах она не используется.
Изменяемые флаги
----------------
     Отсутствуют
Исключения защищенного режима
----------------------------------
#GP(0), если назначением является сегмент, недоступный для
записи; #GP(0) в случае недопустимого исполнительного адреса
операнда памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в
случае недопустимого адреса в сегменте SS; #PF(код сбоя) в
случае страничного сбоя; #AC для невыравненной ссылки к памяти
при текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 6, команда SLDT в режиме реальных адресов не
распознается.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев. #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечание
----------
Атрибут размера операнда на работу команды не влияет.
-----------------------------------------------------------------
SMSW - Сохранение слова состояния машины
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|0F 01 /4  SMSW r/m16   2/3      Сохранение слова состояния     |
|                                машины в слове, заданном       |
|                                исполнительным адресом         |
-----------------------------------------------------------------
Работа команды
--------------
r/m16 <- MSW;  (* Слово состояния машины *)
Описание
--------
Команда SMSW сохраняет слово состояния машины (часть регистра
CR0) в двух-байтовом регистре или адресе памяти, на который
указывает операнд, задающий исполнительный адрес.
Изменяемые флаги
----------------
     Отсутствуют
Исключения защищенного режима
----------------------------------
#GP(0), если назначением является сегмент, недоступный для
записи; #GP(0) в случае недопустимого исполнительного адреса
операнда памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в
случае недопустимого адреса в сегменте SS; #PF(код сбоя) в
случае страничного сбоя; #AC для невыравненной ссылки к памяти
при текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев. #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечание
----------
Команда обеспечивает  совместимость  с  процессором   80286;
программы  для   процессора   i486  должны  использовать  команду
MOV ..., CR0.
-----------------------------------------------------------------
STC - Установка флага переноса
-----------------------------------------------------------------
|Код       Команда     Число      Описание                      |
|операции              тактовых                                 |
|                      циклов                                   |
|                                                               |
|F9        STC          2        Установка флага переноса       |
-----------------------------------------------------------------
Работа команды
--------------
CF <- 1;
Описание
--------
Команда STC устанавливает флаг CF.
Изменяемые флаги
----------------
Устанавливается флаг CF.
Исключения защищенного режима
----------------------------------
     Отсутствуют
Исключения режима реальных адресов
---------------------------------------
     Отсутствуют
Исключения виртуального режима 8086
----------------------------------------
     Отсутствуют
-----------------------------------------------------------------


Яндекс цитирования