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



 

Часть 32

FRSTOR - Восстановить состояние FPU
-----------------------------------------------------------------
|Код       Команда    Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|DB /4   FRSTOR m94/  131 реальный  Загрузка состояния FPU из   |
|        108byte      или вирт./    m94byte или m108byte        |
|                     120 защищ.                                |
-----------------------------------------------------------------
Работа команды
--------------
Состояние FPU <- SRC;
Описание
--------
FRSTOR перезагружает состояние FPU (контекст и регистровый стек)
из области памяти, заданной исходным операндом. Эти данные
должны были быть записаны туда предыдущей командой FSAVE или
FNSAVE.
Контекст FPU состоит из управляющего слова FPU, слова состояния,
слова тега и указателей ошибки (данных и команд). Макет
контекста в памяти зависит одновременно от размера операнда и
текущего режима работы процессора. Атрибут USE текущего кодового
сегмента определяет размер операнда: 14-разрядный операнд
относится к сегменту USE16, а 28-разрядный операнд относится к
сегменту USE32. На рисунках 15-5 - 15-8 показан макет контекста
для обоих размеров операндов в режимах реальных адресов и
защищенном. (В виртуальном режиме 8086 используется макет
контекста реального режима). Регистры стека, начиная с ST и
кончая ST(7), находятся в 80 байтах, непосредственно следующих
за образом контекста. FRSTOR должна выполняться в том же рабочем
режиме, что и соответствующие команды FSAVE и FNSAVE.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
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.
Примечания
----------
Если образ контекста содержит немаскируемое исключение, загрузка
его приведет к условию ошибки операции с плавающей точкой.
-----------------------------------------------------------------
FSAVE/FNSAVE - Сохранить состояние FPU
-----------------------------------------------------------------
|Код       Команда    Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|DB DD /6 FSAVE m94/  154 реальный  Сохранение состояния FPU в  |
|         109byte     или вирт./    m94byte или m108byte после  |
|                     143 защищ.+   проверки условия немаскиру- |
|                     минимум 3     емой ошибки с плавающей     |
|                     для FWAIT     точкой. Затем ре-инициализа-|
|                                   ция FPU.                    |
|DD /6   FNSAVE m94/  154 реальный  Сохранение состояния FPU в  |
|         109byte     или вирт./    m94byte или m108byte без    |
|                     143 защищ.    проверки условия немаскиру- |
|                                   емой ошибки с плавающей     |
|                                   точкой. Затем ре-инициализа-|
|                                   ция FPU.                    |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- состояние FPU;
инициализация FPU; (* Эквивалентно FNINIT *)
Описание
--------
Команды сохранения записывают текущее состояние FPU (контекст и
регистры стека) по заданному назначению и затем
ре-инициализируют FPU. Контекст FPU состоит из управляющего
слова FPU, слова состояния, слова тега и указателей ошибки
(данных и команд).
Макет контекста в памяти зависит одновременно от размера
операнда и текущего режима работы процессора. Атрибут USE
текущего кодового сегмента определяет размер операнда:
94-разрядный операнд относится к сегменту USE16, а 108-разрядный
операнд относится к сегменту USE32. На рисунках 15-5 - 15-8
показан макет контекста для обоих размеров операндов в режимах
реальных адресов и защищенном. (В виртуальном режиме 8086
используется макет контекста реального режима). Регистры стека,
начиная с ST и кончая ST(7), находятся в 80 байтах,
непосредственно следующих за образом контекста.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 очищаются.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#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.
Примечания
----------
FSAVE и FNSAVE не сохраняют состояния FPU до тех пор, пока не
будут завершены действия FPU. Таким образом, сохраненный образ
отражает состояние FPU после выполнения любой ранее
декодированной команды.
Если программа должна читать образ в памяти состояния,
следующего за командой сохранения, то она должна выдать команду
FWAIT, чтобы гарантировать, что сохранение завершено.
Команды сохранения обычно используются, когда операционной
системе необходимо выполнить переключение контекста, или
обработчику исключения требуется использовать FPU, либо
когда прикладная программа собирается передать в подпрограмму
"чистый" FPU.
-----------------------------------------------------------------
FSCALE - Умножение на масштабный коэффициент
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 FD    FSCALE   31(30-32)     2     Умножение ST на масштаб- |
|                                      ный коэффициент в ST(1)  |
-----------------------------------------------------------------
Работа команды
--------------
ST <- ST x 2**ST(1);
Описание
--------
Команда масштабирования интерпретирует значение в ST(1) как
целое и прибавляет его к экспоненте ST. Таким образом, FSCALE
обеспечивает быстрое умножение или деление на целочисленные
степени 2.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, U, O, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Команда FSCALE может использоваться как команда, обратная по
отношению к FXTRACT. Поскольку FSCALE не извлекает из стека
экспонентную часть, за FSCALE должна следовать команда FSTP
ST(1), чтобы полностью отменить действие предыдущей команды
FXTRACT.
Ограничений на  диапазон масштабного коэффициента в ST(1) не
существует. Если значение не является целочисленнным,  то  FSCALE
использует ближайшее  целое,  меньшее данной величины;  т.е.  это
значение округляется в сторону нуля. Если результирующее целое
равно нулю, то значение в ST не изменяется.
-----------------------------------------------------------------
FSIN - Синус
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 FE    FSIN    241(193-279)   2     Замена ST его   синусом  |
-----------------------------------------------------------------
Работа команды
--------------
IF операнд в допустимом диапазоне
THEN
   C2 <- 0;
   ST <- sin(ST);
ELSE
   C2 <- 1;
FI;
Описание
--------
Команда FSIN заменяет содержимое ST на sin(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).
-----------------------------------------------------------------
FSINCOS - Синус и косинус
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 FB   FSINCOS  291(243-329)   2     Вычисление синуса и      |
|                                      косинуса ST; замена ST на|
|                                      синус и затем помещение  |
|                                      косинуса в стек FPU      |
-----------------------------------------------------------------
Работа команды
--------------
IF операнд в допустимом диапазоне
THEN
   C2 <- 0;
   врем <- cos(ST);
   ST <- sin(ST);
   Декремент указателя вершины стека FPU;
   ST <- врем;
ELSE
   C2 <- 1;
FI;
Описание
--------
Команда FSINCOS вычисляет сразу sin(ST) и cos(ST), заменяет ST
на синус и затем помещает косинус в стек FPU. Значение 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, где описано, как правильно
записать значение числа пи при выполнении такого рода вычитания.
Команда FSINCOS выполняется быстрее, чем FSIN и FCOS по
отдельности.
При выполнении данной команды процессор i486 проверяет наличие
прерываний. Для обслуживания прерывания выполнение команды
отменяется (abort).
-----------------------------------------------------------------
FSQRT - Квадратный корень
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 FA   FSQRT    85.5(83-87)  70      Замена ST его квадратным |
|                                      корнем                   |
-----------------------------------------------------------------
Работа команды
--------------
ST <- квадратный корень ST
Описание
--------
Команда FSQRT заменяет значение в ST на его квадратный корень.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, D, I, IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Квадратный корень -0 равен -0.
-----------------------------------------------------------------
FST/FSTP - Сохранить действительное число
-----------------------------------------------------------------
|Код       Команда  Число      Описание                         |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|D9 /2   FST  m32real  7       Копирование ST в m32real         |
|DD /2   FST  m64real  8       Копирование ST в m64real         |
|DD D0+i FST  ST(i)    3       Копирование ST в ST(i)           |
|D9 /3   FSTP m32real  7       Копирование ST в m32real         |
|                              и извлечение из стека ST         |
|DD /3   FSTP m64real  8       Копирование ST в m64real         |
|                              и извлечение из стека ST         |
|DB /7   FSTP m80real  6       Копирование ST в m80real         |
|                              и извлечение из стека ST         |
|DD D8+i FSTP ST(i)    3       Копирование ST в ST(i)           |
|                              и извлечение из стека ST         |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- ST(0);
IF команда = FSTP THEN извлечение из стека ST;  FI;
Описание
--------
FST копирует текущее значение регистра ST в операнд назначения,
который может являться либо другим регистром, либо операндом
памяти действительного формата одинарной или двойной точности.
FSTP выполняет сначала копирование, а затем извлечение из стека
ST; помимо типов, разрешенных в FST, она работает и с
расширенными действительными операндами.
Если источник является регистром, то используется номер
регистра, который был до извлечения из стека.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Операнды назначения или расширенного действительного формата :
IS.
Операнды назначения действительного формата одинарной или
двойной точности: P, U, O, D, 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.
Примечания
----------
Если операнд назначения это действительное число одинарной или
двойной точности, то мантисса округляется до ширины операнда
назначения в соответствии с полем RC управляющего слова, а
экспонента преобразуется к ширине и характеристике формата
назначения. Также выполняется проверка условия
переполнения/потери значимости.
Если ST содержит ST, +- бесконечность или NaN, то мантисса не
округляется, а усекается (справа) таким образом, чтобы
помещаться в операнд назначения. Также не выполняется
преобразования экспоненты: она усекается справа. Эти операции
сохраняют идентичность значения бесконечности или NaN
(экспоненты).
Когда операнд назначения является непустым элементом стека, то
исключение неверной операции не генерируется.
-----------------------------------------------------------------
FSTCW/FNSTCW - Сохранить управляющее слово
-----------------------------------------------------------------
|Код       Команда      Число        Описание                   |
|операции               тактовых                                |
|                       циклов                                  |
|                                                               |
|9B D9 /7  FSTCW m2byte  3+минимум   Сохранение управляющего    |
|                        3 для FWAIT слова FPU в m2byte после   |
|                                    проверки условия немаскиру-|
|                                    емой ошибки операции с     |
|                                    плавающей точкой           |
|99 /7    FNSTCW m2byte  3           Сохранение управляющего    |
|                                    слова FPU в m2byte без     |
|                                    проверки условия немаскиру-|
|                                    емой ошибки операции с     |
|                                    плавающей точкой           |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- CW;
Описание
--------
Команды FSTCW и FNSTCW записывают текущее значение управляющего
слова FPU по заданному назначению.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#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.
Примечания
----------
FSTCW проверяет условия немаскируемой ошибки операции с
плавающей точкой, прежде чем сохранить управляющее слово; FNSTCW
этого не делает.
-----------------------------------------------------------------
FSTENV/FNSTENV - Сохранить контекст  FPU
-----------------------------------------------------------------
|Код       Команда    Число         Описание                    |
|операции             тактовых                                  |
|                     циклов                                    |
|                                                               |
|9B D9 /6 FSTENVm14/   67 реальный  Сохранение контекста FPU в  |
|          28byte     или вирт./    m14byte или  m28byte после  |
|                      56 защищ.+   проверки условия немаскиру- |
|                     минимум 3     емой ошибки с плавающей     |
|                     для FWAIT     точкой. Затем маскирование  |
|                                   всех исключений с           |
|                                   плавающей точкой.           |
|D9 /6   FNSTENVm14/   67 реальный  Сохранение контекста FPU в  |
|          28byte     или вирт./    m14byte или  m28byte без    |
|                      56 защищ.    проверки условия немаскиру- |
|                                   емой ошибки с плавающей     |
|                                   точкой. Затем маскирование  |
|                                   всех исключений             |
|                                   плавающей точкой.           |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- контекст  FPU;
CW[0..5] <- 111111B;
Описание
--------
Команды сохранения контекста записывают текущий контекст FPU по
заданному назначению и затем маскируют все исключения операций с
плавающей точкой. Контекст FPU состоит из управляющего слова
FPU, слова состояния, слова тега и указателей ошибки (данных и
команд).
Макет контекста в памяти зависит одновременно от размера
операнда и текущего режима работы процессора. Атрибут USE
текущего кодового сегмента определяет размер операнда:
14-разрядный операнд относится к сегменту USE16, а 28-разрядный
операнд относится к сегменту USE32. На рисунках 15-5 - 15-8
показан макет контекста для обоих размеров операндов в режимах
реальных адресов и защищенном. (В виртуальном режиме 8086
используется макет контекста реального режима).
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#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.
Примечания
----------
FSTENV и FNSTENV не сохраняют контекста FPU до тех пор, пока не
будут завершены действия FPU. Таким образом, сохраненный
контекст отражает состояние FPU после выполнения любой ранее
декодированной команды.
Команды сохранения контекста часто используются в обработчиках
исключений, поскольку они обеспечивают доступ к указателям
ошибки FPU. Контекст обычно сохраняется в стеке оперативной
памяти. После этого FSTENV и FNSTENV устанавливают все маски
исключений в управляющем слове FPU. Это предотвращает прерывания
обработчика исключений вследствие ошибкок операции с плавающей
точкой.
FSTENV проверяет условия немаскируемого исключения с плавающей
точкой, прежде чем сохранить контекст FPU; FNSTENV этого не
делает.
-----------------------------------------------------------------
FSTSW/FNSTSW - Сохранить слово состояния
-----------------------------------------------------------------
|Код       Команда       Число       Описание                   |
|операции                тактовых                               |
|                        циклов                                 |
|                                                               |
|9B DF /7  FSTSW m2byte  3+минимум   Сохранение слова состояния |
|                        3 для FWAIT FPU в m2byte после         |
|                                    проверки условия немаскиру-|
|                                    емой ошибки операции с     |
|                                    плавающей точкой           |
|9B DF E0  FSTSW         3+минимум   Сохранение слова состояния |
|                        3 для FWAIT FPU в регистр AX после     |
|                                    проверки условия немаскиру-|
|                                    емой ошибки операции с     |
|                                    плавающей точкой           |
|9F /7    FNSTSW m2byte  3           Сохранение слова состояния |
|                                    FPU в m2byte без           |
|                                    проверки условия немаскиру-|
|                                    емой ошибки операции с     |
|                                    плавающей точкой           |
|9F E0    FNSTSW AX      3           Сохранение слова состояния |
|                                    FPU в регистре AX без      |
|                                    проверки условия немаскиру-|
|                                    емой ошибки операции с     |
|                                    плавающей точкой           |
-----------------------------------------------------------------
Работа команды
--------------
DEST <- SW;
Описание
--------
Команды FSTSW и FNSTSW записывают текущее значение слова
состояния FPU по заданному назначению, которое может являться
либо двух-байтовым адресом памяти, либо регистром AX.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#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.
Примечания
----------
FSTSW проверяет условия немаскируемой ошибки операции с
плавающей точкой, прежде чем сохранить слово состояния; FNSTSW
этого не делает.
FSTSW и FNSTSW используются в основном в конструкциях условного
перехода (после выполнения сравнения командами FPREM, FPREMI или
FXAM). Они также могут использоваться для активизации
обработчиков исключений (путем опроса битов исключений) в
контекстах, не использующих прерываний.
При выполнении команды FNSTSW AX регистр AX обновляется до того,
как процессор i486 выполнит любую другую команду. Сохраняемое
состояние - это состояния по завершении предыдущей команды ESC.
-----------------------------------------------------------------
FSUB/FSUBP/FISUB - Вычитание
-----------------------------------------------------------------
|Код      Команда     Число     Парал-   Описание                
|операции             тактовых  лельное                          
|                     циклов    выпол-                           
|                               нение                            
|D8 /4   FSUB  m32real  10(8-20) 7(5-17) Вычитание m32real из ST 
|DC /4   FSUB  m64real  10(8-20) 7(5-17) Вычитание m64real из ST 
|D8 E0+i FSUB  ST,ST(i) 10(8-20) 7(5-17) Вычитание  ST(i)  из ST 
|DC E8+i FSUB  ST(i),ST 10(8-20) 7(5-17) Замена ST(i) на ST-ST(i)
|DE E8+i FSUBP ST(i),ST 10(8-20) 7(5-17) Замена ST(i) на ST-ST(i)
|                                        извлечение из стека ST  
|DE E9   FSUB           10(8-20) 7(5-17) Замена ST(1) на ST-ST(1)
|                                        извлечение из стека ST  
|DA /4   FISUB m32int 22.5(19-32)7(5-17) Вычитание m32int из ST  
|DE /4   FISUB m16int  24(20-35) 7(5-17) Вычитание m16int из ST  
-----------------------------------------------------------------
Работа команды
--------------
DEST <- ST - Другой операнд;
IF команда = FSUBP THEN извлечение из стека ST;  FI;
Описание
--------
Команды вычитания вычитают из вершины стека другой операнд и
возвращают разность в регистр назначения.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, U, O, 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.
Примечания
----------
Если исходный операнд находится в памяти, он автоматически будет
преобразован к расширенному действительному формату.
-----------------------------------------------------------------
FSUBR/FSUBPR/FISUBR - Обратное вычитание
-----------------------------------------------------------------
|Код      Команда     Число     Парал-   Описание                
|операции             тактовых  лельное                          
|                     циклов    выпол-                           
|                               нение                            
|D8 /5   FSUBR m32real  10(8-20) 7(5-17) Замена ST на m32real-ST 
|DC /5   FSUBR m64real  10(8-20) 7(5-17) Замена ST на m64real-ST 
|D8 E8+i FSUBR ST,ST(i) 10(8-20) 7(5-17) Замена ST на ST(i) - ST 
|DC E0+i FSUBR ST(i),ST 10(8-20) 7(5-17) Вычитание ST из ST(i)   
|DE E0+i FSUBRP ST(i),  10(8-20) 7(5-17) Вычитание ST из ST(i) и 
|               ST                       извлечение из стека ST  
|DE E1   FSUBR          10(8-20) 7(5-17) Вычитание ST из ST(1) и 
|                                        извлечение из стека ST  
|DA /5  FISUBR m32int 22.5(19-32)7(5-17) Замена ST на m32int-ST  
|DE /5  FISUBR m16int  24(20-35) 7(5-17) Замена ST на m16int-ST  
-----------------------------------------------------------------
Работа команды
--------------
DEST <- Другой операнд - ST;
IF команда = FSUBRP THEN извлечение из стека ST;  FI;
Описание
--------
Команды обратного вычитания вычитают вершину стека из другого
операнда и возвращают разность в регистр назначения.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
P, U, O, 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.
Примечания
----------
Если исходный операнд находится в памяти, он автоматически будет
преобразован к расширенному действительному формату.
-----------------------------------------------------------------
FTST - Тестирование
-----------------------------------------------------------------
|Код      Команда  Число       Парал-  Описание                 |
|операции          тактовых    лельное                          |
|                  циклов      выпол-                           |
|                              нение                            |
|D9 E4   FTST         4            1   Сравнение ST с 0.0       |
-----------------------------------------------------------------
Работа команды
--------------
CASE (отношение операндов) OF
   Не сравнимы:   C3, C2, C0 <- 111;
   ST > SRC:      C3, C2, C0 <- 000;
   ST < SRC:      C3, C2, C0 <- 001;
   ST = SRC:      C3, C2, C0 <- 100;
-----------------------------------------------------------------
           Флаги FPU          |            EFlags
-----------------------------------------------------------------
             C0                              CF
             C1                              отсутствует
             C2                              PF
             C3                              ZF
-----------------------------------------------------------------
Описание
--------
Команда тестирования сравнивает вершину стека с 0.0. После
выполнения команды условные коды отражают результат сравнения.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
D,I,IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Если ST имеет значение NaN, или объект, имеющий неопределенный
формат, либо при сбое в стеке, то генерируется исключение
неверной операции, а биты условия устанавливаются в значение
"неупорядочен".
Знак нулевого значения игнорируется, таким образом что -0.0 = -
+0.0.
-----------------------------------------------------------------
FUCOM/FUCOMP/FUCOMPP - Неупорядоченное сравнение действительных
                       чисел
-----------------------------------------------------------------
|Код       Команда  Число    Парал-  Описание                   |
|операции           тактовых лельное                            |
|                   циклов   выпол-                             |
|                            нение                              |
|DD E0+i FUCOM ST(i)   4       1   Сравнение ST с ST(i)         |
|DD E1   FUCOM         4       1   Сравнение ST с ST(1)         |
|DD E8+i FUCOMP ST(i)  4       1   Сравнение ST с ST(i)         |
|                                  и извлечение из стека ST     |
|DD E9   FUCOMP        4       1   Сравнение ST с ST(1)         |
|                                  и извлечение из стека ST     |
|DD E9   FUCOMPP       5       1   Сравнение 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 команда = FUCOMP THEN извлечение из стека ST; FI;
IF команда = FUCOMPP 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
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Если любой  из  операндов  имеет  значение  SNaN,  или имеет
неопределенный формат, либо при сбое в стеке, генерируется
исключение неверной операции, а биты условия устанавливаются в
значение "неупорядочен".
Если любой из операндов имеет значение QNaN , биты условия
устанавливаются в значение "неупорядочен". В отличие от обычных
команд сравнения (FCOM и т.д.), неупорядоченные команды
сравнения не дают исключения неверной операции вследствие
наличия операнда QNaN.
Знак нулевого значения игнорируется, таким образом что -0.0 = -
+0.0.
-----------------------------------------------------------------
FWAIT - Ожидание
-----------------------------------------------------------------
|Код       Команда       Число       Описание                   |
|операции                тактовых                               |
|                        циклов                                 |
|                                                               |
|9B        FWAIT         (1-3)       Алиас команды WAIT         |
-----------------------------------------------------------------
Описание
--------
Команда FWAIT заставляет процессор проверить наличие подвешенных
немаскируемых числовых исключений, прежде чем перейти к
дальнейшему выполнению.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3 не определены.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Как показывает ее код операции, команда FWAIT не является
фактической командой ESC, а просто альтернативной мнемонической
формой команды WAIT.
Кодирование команды FWAIT после команды ESC обеспечивает
обработку любых немаскируемых исключений с плавающей точкой,
вызываемых командой, до того, как процессор сможет каким-либо
образом изменить результат команды.
Информация об использовании команды FWAIT дается в главе 18, в
разделе "Параллельная обработка".
-----------------------------------------------------------------
FXAM - Рассмотреть
-----------------------------------------------------------------
|Код       Команда  Число            Описание                   |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|D9 E5      FXAM       8   Сообщить о типе объекта в регистре ST|
-----------------------------------------------------------------
Работа команды
--------------
C1 <-   знаковый   бит   ST;   (*  0  для  положительных,  1  для
                                   отрицательных *)
CASE (тип объекта в ST) OF
   Не поддерживается:  C3, C2, C0 <- 000;
   NaN: (не-число)     C3, C2, C0 <- 001;
   Нормированный:      C3, C2, C0 <- 010;
   Неопределенность:   C3, C2, C0 <- 011;
   Ноль:               C3, C2, C0 <- 100;
   Пустой:             C3, C2, C0 <- 101;
   Денормированный:    C3, C2, C0 <- 111;
-----------------------------------------------------------------
           Флаги FPU          |            EFlags
-----------------------------------------------------------------
             C0                              CF
             C1                              отсутствует
             C2                              PF
             C3                              ZF
-----------------------------------------------------------------
Описание
--------
Команда сообщает о типе объекта, содержащегося в регистре ST,
устанавливая флаги FPU.
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C0, C1, C2, C3, как показано выше.
Исключения числовых операций
---------------------------------
Отсутствуют
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
-----------------------------------------------------------------
FXCH - Поменять местами содержимое регистров
-----------------------------------------------------------------
|Код       Команда  Число            Описание                   |
|операции           тактовых                                    |
|                   циклов                                      |
|                                                               |
|D9 C8+i  FXCH ST(i)   4       Поменять местами содержимое ST  и|
|                              ST(i)                            |
|D9 C9    FXCH         4       Поменять местами содержимое ST  и|
|                              ST(1)                            |
-----------------------------------------------------------------
Работа команды
--------------
врем <- ST;
ST <- DEST;
DEST <- врем;
Описание
--------
Команда меняет местами содержимое регистров назначения и вершины
стека. Если назначение явно не задано, то используется ST (1).
Изменяемые флаги модуля операций с плавающей точкой
---------------------------------------------------
C1, как описано в Таблице 15-1; C0, C2, C3 не определены.
Исключения числовых операций
---------------------------------
IS
Исключения защищенного режима
----------------------------------
#NM при установленном EM или TS в CR0.
Исключения режима реальных адресов
---------------------------------------
Прерывание 7 при установленном EM или TS в CR0.
Исключения виртуального режима 8086
----------------------------------------
#NM при установленном EM или TS в CR0.
Примечания
----------
Многие числовые константы работают только с вершиной стека; FXCH
обеспечивает простое средство использования этих команд в
отношении нижних элементов стека. Например, следующая
последовательность берет квадратный корень из содержимого
третьего регистра сверху (предполагая, что ST непустой):
FXCH ST(3)
FSQRT
FXCH ST(3)
-----------------------------------------------------------------


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