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


купить асептолин

 

Часть 31

FCOM/FCOMP/FCOMPP - Сравнение действительных чисел
-----------------------------------------------------------------
|Код       Команда  Число      Описание                         |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|D8 /2   FCOM m32real  4       Сравнение ST с m32real           |
|DC /2   FCOM m64real  4       Сравнение ST с m64real           |
|D8 D0+i FCOM ST(i)    4       Сравнение ST с ST(i)             |
|D8 D1   FCOM          4       Сравнение ST с ST(1)             |
|D8 /3   FCOMP m32real 4       Сравнение ST с m32real           |
|                              и извлечение из стека ST         |
|DC /3   FCOMP m64real 4       Сравнение ST с m64real           |
|                              и извлечение из стека ST         |
|D8 D8+i FCOMP ST(i)   4       Сравнение ST с ST(i)             |
|                              и извлечение из стека ST         |
|D8 D9   FCOMP         4       Сравнение ST с ST(1)             |
|                              и извлечение из стека ST         |
|DE D9   FCOMPP        5       Сравнение ST с ST(1)             |
|                              и извлечение из стека ST дважды  |
-----------------------------------------------------------------
Работа команды
--------------
CASE (отношение операндов) OF
   Не сравнимы:   C3, C2, C0 <- 111;
   ST > SRC:      C3, C2, C0 <- 000;
   ST < SRC:      C3, C2, C0 <- 001;
   ST = SRC:      C3, C2, C0 <- 100;
IF команда = FCOMP THEN извлечение из стека ST; FI;
IF команда = FCOMPP THEN извлечение  из  стека  ST;извлечение  из
                                                   стека ST; FI;
-----------------------------------------------------------------
           Флаги FPU          |            EFlags
-----------------------------------------------------------------
             C0                              CF
             C1                              отсутствует
             C2                              PF
             C3                              ZF
-----------------------------------------------------------------
Описание
--------
Команды сравнения действительных чисел сравнивают вершину стека
с источником, который может являться регистром или операндом
памяти, являющимся действительным числом одинарной или двойной
точности. Если операнд не задан, то ST сравнивается с ST(1).
После выполнения команды условные коды отражают отношение между
ST и исходным операндом.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
D, I, IS
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #NM при установленном EM или TS в CR0; #AC для
невыравненной ссылки к памяти при текущем уровне
привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13,  если  какая-либо  часть  операнда  лежит  вне
пространства исполнительных адресов от 0 до 0FFFFH;  Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Если любой из операндов имеет значение NaN, или имеет
неопределенный формат, либо при сбое в стеке, то генерируется
исключение неверной операции, а биты условия
устанавливаются в значение "неупорядочен".
Знак нулевого значения игнорируется, таким образом что -0.0 = -
+0.0.
-----------------------------------------------------------------
FCOS - Косинус
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D8 FF    FCOS    241(193-279)   2     Замена ST его косинусом  |
-----------------------------------------------------------------
Работа команды
--------------
IF операнд в допустимом диапазоне
THEN
   C2 <- 0;
   ST <- cos(ST);
ELSE
   C2 <- 1;
FI;
Описание
--------
Команда FCOS заменяет содержимое ST на cos(ST). Значение ST,
выраженное в радианах, должно лежать в диапазоне | O | < 2**63.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1,C2 как описано в Таблице 15-1; C0, C3 не определены.
Исключения числовых операций
---------------------------------
P, U, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Если операнд находится вне допустимого диапазона, то флаг C2
установлен, а ST остается неизмененным. Программист сам
ответственен за то, чтобы уменьшить операнд до абсолютного
значения, меньшего чем 2**63, вычитая соответствующее число,
кратное 2 пи. См.м раздел 17.5, где описано, как правильно
записать значение числа пи при выполнении такого рода вычитания.
При выполнении данной команды процессор i486 проверяет наличие
прерываний. Для обслуживания прерывания выполнение команды
отменяется (abort).
-----------------------------------------------------------------
FDECSTP - Декремент указателя вершины стека
-----------------------------------------------------------------
|Код       Команда  Число      Описание                         |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|D9 F6     FDECSTP     3       Декремент указателя вершины стека|
|                              для регистрового стека FPU       |
-----------------------------------------------------------------
Работа команды
--------------
IF TOP = 0
THEN TOP <- 7;
ELSE TOP <- TOP -1;
FI;
Описание
--------
FDECSTP вычитает единицу (без переноса) из трех-битового поля
TOP слова состояния модуля операций с плавающей точкой (FPU).
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
     Отсутствуют
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Действие команды RDECSTP состоит в циклическом сдвиге стека. Она
не изменяет теги регистров или их содержимое и не выполняет
пересылки данных.
-----------------------------------------------------------------
FDIV/FDIVP/FIDIV  - Деление
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D8 /6   FDIV m32real   73      70     Деление ST на m32real    |
|DC /6   FDIV m64real   73      70     Деление ST на m64real    |
|D8 F0+i FDIV ST,ST(i)  73      70     Деление ST на ST(i)      |
|DC F8+i FDIV ST(i),ST  73      70     Замена ST(i) на ST/ST(i) |
|DE F8+i FDIVP ST(i),ST 73      70     Замена ST(i) на ST/ST(i);|
|                                      извлечение из стека ST   |
|DE F9   FDIV           73      70     Замена ST(1) на ST/ST(1);|
|                                      извлечение из стека ST   |
|DA /6   FIDIV m32int   73      70     Деление ST на m32int     |
|DE /6   FIDIV m64int   73      70     Деление ST на m64int     |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- ST / Другой операнд;
IF команда = FDIVP THEN извлечение из стека ST  FI;
Описание
--------
Команды деления делят вершину стека на прочие операнды и
возвращают частное в операнд назначения.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P,U,O,Z,D,I,IS
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #NM при установленном EM или TS в CR0; #AC для
невыравненной ссылки к памяти при текущем уровне
привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Если исходный операнд находится в памяти, то он автоматически
преобразуется к расширенному действительному формату.
Быстродействие команды зависит от поля PC (Управление Точностью
- Precision Control) слова управления FPU. Если PC задает
точность 53 бита, то команда деления выполняется за 62 тактовых
циклов. Если же PC задает точность 24 бита, то команда деления
выполняется всего за 35 тактовых циклов.
-----------------------------------------------------------------
FDIVR/FDIVPR/FIDIVR  - Деление в обратном порядке
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D8 /7   FDIVR m32real   73     70     Замена ST на m32real/ST  |
|DC /7   FDIVR m64real   73     70     Замена ST на m64real/ST  |
|D8 F8+i FDIVR ST,ST(i)  73     70     Замена ST на ST(i)/ST    |
|DC F0+i FDIVR ST(i),ST  73     70     Деление ST(i) на ST      |
|DE F0+i FDIVRP ST(i),ST 73     70     Деление ST(i) на ST и    |
|                                      извлечение из стека ST   |
|DE F1   FDIVR           73     70     Деление ST(1) на ST и    |
|                                      извлечение из стека ST   |
|DA /7   FIDIVR m32int   73     70     Замена ST на m32int/ST   |
|DE /7   FIDIVR m16int   73     70     Замена ST на m16int/ST   |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- Другой операнд / ST;
IF команда = FDIVRP THEN извлечение из стека ST  FI;
Описание
--------
Команды деления делят другой операнд на вершину стека и
возвращают частное в операнд назначения.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
     P,U,O,Z,D,I,IS
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #NM при установленном EM или TS в CR0; #AC для
невыравненной ссылки к памяти при текущем уровне
привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Если исходный операнд находится в памяти, то он автоматически
преобразуется к расширенному действительному формату.
Быстродействие команд зависит от поля PC (Управление Точностью -
Precision Control) слова управления FPU. Если PC задает точность
53 бита, то команда деления выполняется за 62 тактовых циклов.
Если же PC задает точность 24 бита, то команда деления
выполняется всего за 35 тактовых циклов.
-----------------------------------------------------------------
FFREE   - Освободить регистр операций с плавающей точкой
-----------------------------------------------------------------
|Код       Команда  Число      Описание                         |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|DD C0+i   FFREE ST(i) 3       Пометить тег (признак) ST(i) как |
|                              пустой                           |
-----------------------------------------------------------------
Работа команды
--------------
TAG(i) <- 11B;
Описание
--------
FDECSTP помечает регистр назначения как пустой.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
FFREE не влияет на содержимое регистра назначения. Она также
не влияет  на  содержимое  указателя  вершины  стека  с плавающей
точкой (TOP).
-----------------------------------------------------------------
FICOM/FICOMP - Сравнение целочисленных значений
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|DE /2   FICOM m16real 18(16-20)   1   Сравнение ST с m16int    |
|DA /2   FICOM m32real 16.5(15-17) 1   Сравнение ST с m32int    |
|DE /3  FICOMP m16int  18(16-20)   1   Сравнение ST с m16int и  |
|                                      извлечение из стека ST   |
|DA /3  FICOMP m32int  16.5(15-17) 1   Сравнение ST с m32int и  |
|                                      извлечение из стека ST   |
-----------------------------------------------------------------
Работа команды
--------------
CASE (отношение операндов) OF
   Не сравнимы:   C3, C2, C0 <- 111;
   ST > SRC:      C3, C2, C0 <- 000;
   ST < SRC:      C3, C2, C0 <- 001;
   ST = SRC:      C3, C2, C0 <- 100;
IF команда = FICOMP THEN извлечение из стека ST; FI;
-----------------------------------------------------------------
           Флаги FPU          |            EFlags
-----------------------------------------------------------------
             C0                              CF
             C1                              отсутствует
             C2                              PF
             C3                              ZF
-----------------------------------------------------------------
Описание
--------
Команды целочисленного сравнения сравнивают вершину стека с
исходным операндом. После выполнения команды условные коды
отражают соотношение между ST и исходным операндом.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
     C1, как описано в таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
     D,I,IS
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #NM при установленном EM или TS в CR0; #AC для
невыравненной ссылки к памяти при текущем уровне
привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Если исходный операнд находится в памяти, то он автоматически
преобразуется к расширенному действительному формату.
Если любой  из  операндов  имеет  значение  NaN,  или  имеет
неопределенный формат,  либо при сбое в  стеке,  то  генерируется
исключение неверной операции, а биты условия устанавливаются
в значение "неупорядочен".
-----------------------------------------------------------------
FILD - Загрузка целочисленного операнда
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|DF /0   FILD m16int 14.5(13-16)  4    Поместить m16int в стек  |
|                                      FPU                      |
|DB /0   FILD m32int 11.5(9-12) 4(2-4) Поместить m32int в стек  |
|                                      FPU                      |
|DF /5   FILD m64int 16.8(10-18) 7.8   Поместить m64int в стек  |
|                               (2-8)  FPU                      |
-----------------------------------------------------------------
Работа команды
--------------
Декремент указателя вершины стека FPU;
ST(0) <- SRC;
Описание
--------
FILD преобразует исходный имеющий знак целочисленный операнд в
формат расширенного действительного и помещает его в стек FPU.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
IS
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #NM при установленном EM или TS в CR0; #AC для
невыравненной ссылки к памяти при текущем уровне
привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Исходный операнд загружается погрешностью округления.
ST(0) должен быть пустым, чтобы избежать исключения неверной
операции.
-----------------------------------------------------------------
FINCSTP - Инкремент указателя вершины стека
-----------------------------------------------------------------
|Код       Команда  Число      Описание                         |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|D9 F7     FINCSTP     3       Инкремент указателя вершины стека|
|                              для регистрового стека FPU       |
-----------------------------------------------------------------
Работа команды
--------------
IF TOP = 7
THEN TOP <- 0;
ELSE TOP <- TOP +1;
FI;
Описание
--------
FINCSTP прибавляет единицу (без переноса) к трех-битовому полю
TOP слова состояния модуля операций с плавающей точкой (FPU).
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
     Отсутствуют
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Действие команды RDECSTP состоит в циклическом сдвиге стека. Она
не изменяет теги регистров или их содержимое и не выполняет
пересылки данных. Она не эквивалентна извлечению из стека,
поскольку не устанавливает тег старой вершины стека как
"пустой".
-----------------------------------------------------------------
FINIT/FNINIT - Инициализация модуля операций с плавающей точкой
               (FPU)
-----------------------------------------------------------------
|Код       Команда  Число        Описание                       |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|DB E3     FINIT    17+минимум  Инициализация FPU после проверки|
|                   3 для FWAIT условия немаскируемой ошибки    |
|                               операции с плавающей точкой     |
|DB /E3    FNINIT   17          Инициализация FPU  без  проверки|
|                               условия немаскируемой ошибки    |
|                               операции с плавающей точкой     |
-----------------------------------------------------------------
Работа команды
--------------
CW <- 037FH;                   (* Управляющее слово *)
SW <- 0;                       (* Слово состояния   *)
TW <- FFFFH;                   (* Слово тега        *)
FEA <- 0; FDS <- 0;            (* Указатель данных  *)
FIP <- 0; FOP <- 0; FCS <- 0;  (* Указатель команд  *)
Описание
--------
Команды инициализации устанавливают FPU в известное состояния,
независимо от действий, выполнявшихся им ранее.
Управляющее слово FPU установлено в значение 037FY (округление
до ближайшего, все исключения маскируются, 64-битовая точность
представления). Слово состояния очищается (флаги исключений не
установлены, регистр стека R0 = вершине стека). Стековые
регистры имеют теги "пусто". Указатели ошибки (как команд, так и
данных) очищены.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 очищены.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
FINIT проверяет наличие немаскируемых условий ошибки для
операций с плавающей точкой, прежде чем выполнить инциализацию;
FNINIT же этого не делает.
FINIT и FNINIT оставляют FPU в том же состоянии, которое бывает
в случае аппаратного сигнала сброса RESET со встроенным
автотестированием.
В отличие от математического сопроцессора 387, в случае
процессора i486 команды FINIT и FNINIT очищают указатели ошибки.
-----------------------------------------------------------------
IST/FISTP - Сохранение целочисленного операнда
-----------------------------------------------------------------
|Код      Команда     Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|DF /2   FIST  m16int  33.4(29-34)  Сохранение ST в m16int      |
|DB /2   FIST  m32int  33.4(29-34)  Сохранение ST в m32int      |
|DF /3   FISTP m16int  33.4(29-34)  Сохранение ST в m16int и    |
|                                   извлечение из стека ST      |
|DB /3   FISTP m32int  33.4(29-34)  Сохранение ST в m32int и    |
|                                   извлечение из стека ST      |
|DF /7   FISTP m64int  33.4(29-34)  Сохранение ST в m64int и    |
|                                   извлечение из стека ST      |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- ST(0);
IF команда = FISTP THEN извлечение из стека ST  FI;
Описание
--------
FISP преобразует значение в ST в имеющее знак целое в
соответствии с полем RC управляющего слова и пересылает
результат в операнд назначения. ST остается без изменений. FIST
допускает в качестве назначения слово и short integer; FISTP,
помимо того, допускает в этом качестве тип long integer.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, I, IS
Исключения защищенного режима
----------------------------------
#GP(0), если результат должен помещаться в сегмент, для которого
запрещена запись; #GP(0) в случае недопустимого исполнительного
адреса операнда памяти в сегментах CS, DS, ES, FS или GS; #SS(0)
в случае недопустимого адреса в сегменте SS; #PF(код сбоя) в
случае страничного сбоя; #AC для невыравненной ссылки к памяти
при текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Отрицательный ноль записывается в той же кодировке (00..00), что
и положительный.
Если значение слишком велико и не может быть представлено как
целочисленное значение, возникает исключение I. Маскируемая
реакция на это состоит в записи в память самого большого по
абсолютному значению отрицательного числа.
-----------------------------------------------------------------
FLD - Загрузка действительного значения
-----------------------------------------------------------------
|Код      Команда     Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|D9 /0    FLD m32real    3        Поместить в стек FPU m32real  |
|DD /0    FLD m64real    3        Поместить в стек FPU m64real  |
|DB /5    FLD m80real    6        Поместить в стек FPU m80real  |
|D9 /C0+i FLD ST(i)      4        Поместить в стек FPU ST(i)    |
-----------------------------------------------------------------
Работа команды
--------------
Декремент указателя вершины стека FPU;
ST(0) <- SRC;
Описание
--------
FLD помещает в стек FPU исходный операнд. Если им является
регистр, то используетсёя номер регистра, который был до
декремента указателя вершины стека. В частности,
     FLD ST(0)
дублирует вершину стека.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
     D, I, IS
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #AC для невыравненной ссылки к памяти при
текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Если исходный операнд имеет формат действительного значения
одинарной или двойной точности, то он автоматически
преобразуется в расширенный действительный формат. Загрузка
расширенного действительного расширенного операнда не требует
преобразований, поэтому в данном случае исключений I и D не
происходит.
ST(7) должен быть пустым, чтобы избежать исключения неверной
операции.
-----------------------------------------------------------------
FLD1/FLDL2T/FLDL2E/
FLDPI/FLDLG2/FLDLN2/FLDZ - Загрузка константы
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 E8    FLD1        4          -     Поместить  +1.0  в стек  |
|                                      FPU                      |
|D9 E9    FLDL2T      8          2     Поместить log 10 в стек  |
|                                      FPU          2           |
|D9 EA    FLDL2E      8          2     Поместить log e  в стек  |
|                                      FPU          2           |
|D9 EB    FLDPI       8          2     Поместить число Пи в стек|
|                                      FPU                      |
|D9 EC    FLDLG2      8          2     Поместить log 2  в стек  |
|                                      FPU          10          |
|D9 ED    FLDLN2      8          2     Поместить log 2  в стек  |
|                                      FPU          e           |
|D9 EE    FLDZ        4          -     Поместить  +0.0  в стек  |
|                                      FPU                      |
-----------------------------------------------------------------
Работа команды
--------------
Декремент указателя вершины стека FPU;
ST(0) <- CONSTANT;
Описание
--------
Каждая команда загрузки константы помещает в стек FPU одну из
указанных выше общепринятых констант (в расширенном
действительном формате).
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
ST(7) должен быть пустым, чтобы избежать исключения неверной
операции.
Используется внутренняя 66-битовая константа, округляемая до
расширенного действительного формата (как задают биты RC
управляющих слов). Исключение, связаннао с точностью
представления, не возникает.
-----------------------------------------------------------------
FLDCW - Загрузка управляющего слова
-----------------------------------------------------------------
|Код      Команда     Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|D9 /5    FNLDCW m2byte  4        Загрузить управляющее слово   |
|                                 FPU из m2byte                 |
-----------------------------------------------------------------
Работа команды
--------------
CW <- SRC;
Описание
--------
FLDCW заменяет текущее значение управляющего слова FPU
значением, находящимся в заданном слове памяти.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Отсутствуют, за исключением демаскирования существующего
исключения.
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #AC для невыравненной ссылки к памяти при
текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
FLDCW обычно используется для установки или изменения режима
работы FPU.
При установленном бите исключение в слове состояния загрузка
нового управляющего слова, демаскирующего это исключение,
приводит к условию ошибки операции с плавающей точкой. При
изменении рекомендуемая процедура заключается в том, чтобы перед
загрузкой нового управляющего слова очистить все подвешенные
исключения.
-----------------------------------------------------------------
FLDENV - Загрузка контекста FPU
-----------------------------------------------------------------
|Код      Команда     Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|D9 /4    FLDENV m14/ 44 действ.  Загрузить управляющее слово   |
|         28byte      или вирт/   FPU из m2byte                 |
|                     34 защищ.                                 |
-----------------------------------------------------------------
Работа команды
--------------
среда FPU <- SRC;
Описание
--------
FLDENV перезагружает контекст FPU из области памяти,
определяемой исходным операндом. Эти данные должны быть записаны
предыдущей командой FSTENV или FNSTENV.
Контекст FPU состоит из управляющего слова FPU, слова состояния,
слова тега и указателей ошибки (данных и команд). Макет
контекста в памяти зависит одновременно от размера операнда и
текущего режима работы процессора. Атрибут USE текущего кодового
сегмента определяет размер операнда: 14-байтовый операнд
относится к сегменту USE16, а 28-байтовый операнд относится к
сегменту USE32. На рисунках 15-5 - 15-8 показано макет контекста
для обоих размеров операндов в режимах реальных адресов и
защищенном. (В виртуальном режиме 8086 используется макет
контекста реального режима). FLDENV должна выполняться в том же
рабочем режиме, что и соответствующие команды FSTENV и FNSTENV.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 в соответствии с загрузкой.
Исключения числовых операций
---------------------------------
Отсутствуют, за исключением загрузки немаскируемого исключения
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #AC для невыравненной ссылки к памяти при
текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13,  если  какая-либо  часть  операнда  лежит  вне
пространства исполнительных адресов от 0 до 0FFFFH;  Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Если образ контекста содержит немаскируемое исключение, загрузка
его приведет к условию ошибки операции с плавающей точкой.
-----------------------------------------------------------------
FMUL/FMULP/FIMUL - Умножение
-----------------------------------------------------------------
|Код      Команда   Число       Парал-    Описание              |
|операции           тактовых    лельное                         |
|                   циклов      выпол-                          |
|                               нение                           |
|D8 /1    FMUL m32real   11         8  Умножение ST на m32real  |
|DC /1    FMUL m64real   14        11  Умножение ST на m64real  |
|D8 C8+i  FMUL ST,ST(i)  16        13  Умножение ST на ST(i)    |
|DC C8+i  FMUL ST(i),ST  16        13  Умножение ST(i) на ST    |
|DE C8+i  FMULP ST(i),ST 16        13  Умножение ST(i) на ST    |
|                                      и извлечение из стека ST |
|DE C9    FIMUL          16        13  Умножение ST(1) на ST    |
|                                      и извлечение из стека ST |
|DA /1    FIMUL m32int 23.5(22-24) 8   Умножение ST на m32int   |
|DE /1    FIMUL m16int  25(23-27)  8   Умножение ST на m16int   |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- DEST x SCR;
IF команда = FMULP THEN извлечение из стека ST  FI;
Описание
--------
Команды умножения умножают операнд назначения на исходный
операнд (источник) и возвращают произведение в операнд
назначения.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, U, O, D, IS
Исключения защищенного режима
----------------------------------
#GP(0) в случае недопустимого исполнительного адреса операнда
памяти в сегментах CS, DS, ES, FS или GS; #SS(0) в случае
недопустимого адреса в сегменте SS; #PF(код сбоя) в случае
страничного сбоя; #AC для невыравненной ссылки к памяти при
текущем уровне привилегированности, равном 3.
Исключения режима реальных адресов
---------------------------------------
Прерывание 13, если какая-либо часть операнда лежит вне
пространства исполнительных адресов от 0 до 0FFFFH; Прерывание 7
при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
Те же исключения, что и для режима реальных адресов: #PF (код
сбоя) для страничных сбоев; #AC для невыравненной ссылки к
памяти при текущем уровне привилегированности, равном 3.
Примечания
----------
Если исходный операнд находится в памяти, то он автоматически
преобразуется в расширенный действительный формат.
-----------------------------------------------------------------
FNOP - Нет операции
-----------------------------------------------------------------
|Код      Команда     Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|D9 D0    FNOP           3          Никакая операция не выпол-  |
|                                   няется                      |
-----------------------------------------------------------------
Описание
--------
Команда NOP не выполняет никакой операции. Она не влияет ни на
что, за исключением указателей команд.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
-----------------------------------------------------------------
FPATAN - Частичный арктангенс
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 F3    FPATAN  289(218-303) 5(2-17) Замена   ST(1) на        |
|                                      arctan(ST(1)/ST) и       |
|                                      извлечение из стека ST   |
-----------------------------------------------------------------
Работа команды
--------------
ST(1) <- arctan(ST(1)/ST);
извлечение из стека ST;
Описание
--------
Частичный арктангенс вычисляет арктангенс от ST(1)/ST и
возвращает вычисленное значение в радианах в ST(1). Затем
выполняется извлечение из стека ST. Результат имеет тот же знак,
что и операнд из ST(1), и по величине меньше числа Пи.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, U, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Ограничений на диапазон принимаемых FPATAN аргументов не
имеется.
Тот факт, что FPATAN принимает два аргумента и вычисляет
арктангенс их отношения, упрощает вычмсление других
тригонометрических функций. Например, arcsin(x) (равный
арктангенсу x / кв. корень из (1 - x**2)) может быть вычислен
при помощи следующей последовательности операций: помещение x в
стек FPU; вычисление кв. корня из (1 - x**2) и помещение в стек
результата; выполнение FPATAN.
Процессор i486 во время выполнения данной команды проверяет
наличие прерываний. Для обслуживания прерывания процессор
отменяет выполнение данной команды (abort).
-----------------------------------------------------------------
FPREM  - Частичный остаток
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 F8    FPREM   84(70-138)   2(2-8)  Замена ST остатком от    |
|                                      деления ST на ST(1)      |
-----------------------------------------------------------------
Работа команды
--------------
EXPDIF <- экспонент(ST) - экспонент(ST(1));
IF EXPDIF < 64
THEN
   Q <-  целое,  полученное дроблением ST / ST(1) в направлении
нуля;
   ST <- ST - (ST(1) x Q);
   C2 <- 0;
   C0,C1,C3 <- три младших бита Q; (* Q2, Q1, Q0 *)
ELSE
   C2 <- 1;
   N <- число между 32 и 63;
   QQ <- целое,  полученное дроблением (ST/ST(1))/2**EXPDIF-N в
направлении нуля;
   ST <- ST - (ST(1) x QQ x 2**EXPDIF-N);
FI;
Описание
--------
Команда частичного остатка вычисляет остаток, полученный от
деления ST на ST(1), и помещает результат в ST. Знак остатка тот
же, что и знак исходного делимого в ST. Величина остатка меньше
величины модуля.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3, как описано в таблице 15-1.
Исключения числовых операций
---------------------------------
U, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
FPREM производит точный результат; исключение потери точности не
генерируется, и управление округлением не действует.
Команда FPREM не есть операция получения остатка, определяемая
стандартом IEEE 754. Для получения последнего следует
использовать команду FPREM1. FPREM поддерживается для
совместимости с математическими сопроцессорами 8087 и 80287.
FPREM работает методом итеративных вычитаний и может уменьшить
экспоненту ST не более чем на 63 за одно выполнение. Если FPREM
успешно дала остаток, меньший модуля, то работа завершена, и
флаг C2 очищен. В противном случае C2 устанавливается, и
результат в ST называется частичным остатком. Экспонент от
частичного остатка меньше экспонента исходного делимого как
минимум на 32. Программное обеспечение может циклически
выполнять эту команду (используя как делимое частичный остаток в
ST) до тех пор, пока флаг C2 не будет очищен командой.
Подпрограммы прерывания с более высоким приоритетом, которым
потребовался FPU, могут выполнить переключение контекста между
командами цикла получения остатка.
Важное использование FPREM состоит в приведении аргументов
периодических функций. После завершения этой операции FPREM
задает три младших бита частного во флагах C3, C1 и C0. Это
важно для приведениия величины аргумента для функции тангенса
(при использовании модуля Пи/4), поскольку позволяет найти
исходное значение угла в одном из восьми секторов единичной
окружности.
-----------------------------------------------------------------
FPREM1  - Частичный остаток
-----------------------------------------------------------------
|Код      Команда  Число       Парал-    Описание               |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 F5    FPREM1  94.5(72-167) 5.5(2-18) Замена ST остатком от  |
|                                        деления ST на ST(1)    |
-----------------------------------------------------------------
Работа команды
--------------
EXPDIF <- экспонент(ST) - экспонент(ST(1));
IF EXPDIF < 64
THEN
   Q <-  целое,  полученное дроблением ST / ST(1) в направлении
нуля;
   ST <- ST - (ST(1) x Q);
   C2 <- 0;
   C0,C1,C3 <- три младших бита Q; (* Q2, Q1, Q0 *)
ELSE
   C2 <- 1;
   N <- число между 32 и 63;
   QQ <- целое, ближайшее к (ST/ST(1))/2**EXPDIF-N в
направлении нуля;
   ST <- ST - (ST(1) x QQ x 2**EXPDIF-N);
FI;
Описание
--------
Команда частичного остатка вычисляет остаток, полученный от
деления ST на ST(1), и помещает результат в ST. Величина остатка
меньше половины величины модуля.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3, как описано в Таблице 15-1.
Исключения числовых операций
---------------------------------
U, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
FPREM1 производит точный результат; исключение потери точности
не генерируется, и управление округлением не действует.
Команда FPREM1 есть операция получения остатка, определяемая
стандартом IEEE 754. Она отличается от FPREM способом округления
частного от деления ST и ST(1).
FPREM1 работает методом итеративных вычитаний и может уменьшить
экспоненту ST не более чем на 63 за одно выполнение. Если FPREM1
успешно дала остаток, меньший половины модуля, то работа
завершена, и флаг C2 очищен. В противном случае C2
устанавливается, и результат в ST называется частичным остатком.
Экспонент от частичного остатка меньше экспонента исходного
делимого как минимум на 32. Программное обеспечение может
циклически выполнять эту команду (используя как делимое
частичный остаток в ST) до тех пор, пока флаг C2 не будет очищен
командой. Подпрограммы прерывания с более высоким приоритетом,
которым потребовался FPU, могут выполнить переключение контекста
между командами цикла получения остатка.
Важное использование FPREM1 состоит в приведении аргументов
периодических функций. После завершении этой операции FPREM1
задает три младших бита частного во флагах C3, C1 и C0. Это
важно для приведениия величины аргумента для функции тангенса
(при использовании модуля Пи/4), поскольку позволяет найти
исходное значение угла в одном из восьми секторов единичной
окружности.
-----------------------------------------------------------------
FPTAN - Частичный тангенс
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 F2    FATAN   244(200-273) 70      Замена   ST(1) на        |
|                                      его тангенс и помещение  |
|                                      в стек FPU числа 1       |
-----------------------------------------------------------------
Работа команды
--------------
IF операнд в допустимом диапазоне
THEN
   C2 <- 0;
   ST <- tan(ST);
   Декремент указателя вершины стека;
   ST <- 1.0;
ELSE
   C2 <- 1;
FI;
Описание
--------
Частичный тангенс заменяет содержимое ST на tan(ST) и затем
помещает в стек FPU величину 1.0. Значение ST в радианах должно
лежать в диапазоне | O | < 2**63. (Тета)
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, C2, как описано в Таблице 15-1; C0, C3 не определены.
Исключения числовых операций
---------------------------------
P, U, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Если операнд лежит вне допустимого диапазона, то флаг C2
установлен, а ST остается без изменений. Программист сам
отвечает за приведение операнда к абсолютной величине меньшей,
чем 2**63, вычитая из него некоторое произведение целого на 2Пи.
См. раздел 17.5, где описано, какое именно значение следует
брать для числа Пи при выполнении таких операций приведения
операнда.
То, что FPTAN помещает в стек FPU значение 1.0 после вычисления
tan(ST), обеспечивает совместимость с математическими
сопроцессорами 8087 и 80287 и упрощает вычисление прочих
тригонометрических функций. Например, котангенс (величина,
обратная тангенсу) можно вычислить, выполнив после FPTAN команду
FDIVR.
ST(7) должен быть пустым, чтобы избежать исключения неверной
операции.
Процессор i486 во время выполнения данной команды периодически
проверяет наличие прерываний. Для обслуживания прерывания
процессор отменяет выполнение данной команды (abort).
-----------------------------------------------------------------
FRNDINT - Округление к целому
-----------------------------------------------------------------
|Код      Команда  Число       Парал-   Описание                |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 FC    FRNDINT  29.1(21-30) 7.4(2-8) Округление ST к целому  |
-----------------------------------------------------------------
Работа команды
--------------
ST <- округленный ST;
Описание
--------
Команда округления к целому округляет значение в ST к целому в
соответствии с полем RC управляющего слова FPU.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
-----------------------------------------------------------------


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