Поле ТОР регистра состояния FPU увеличивается на 1. Если ТОР было равно семи, оно обнуляется. Эта команда не эквивалентна выталкиванию ST(0) из стека, потому что регистр данных, который назывался ST(0) и стал ST(7), не помечается как пустой.
Команда:
FDECSTP
Назначение:
Уменьшить указатель вершины стека
Процессор:
8087
Поле ТОР регистра состояния FPU уменьшается на 1. Если ТОР было равно нулю, оно устанавливается в 7. Содержимое регистров данных и TW не изменяется.
Команда:
FFREE операнд
Назначение:
Освободить регистр данных
Процессор:
8087
Команда отмечает в регистре TW, что операнд (регистр данных ST(n)) — пустой. Содержимое регистра и ТОР не изменяются.
Команда:
FINIT
Назначение:
Инициализировать FPU
Команда:
FNINIT
Назначение:
Инициализировать FPU без ожидания
Процессор:
8087
Команды FINIT и FNINIT восстанавливают значения по умолчанию в регистрах CR, SR, TW, а начиная с 80387 — FIP и FDP Управляющий регистр инициализируется значением 037Fh (округление к ближайшему, 64-битная точность, все исключения замаскированы). Регистр состояния обнуляется (ТОР = 0, никакие флаги исключений не установлены). Регистры данных никак не изменяются, но все они помечаются пустыми в регистре TW. Регистры FIP и FDP обнуляются. Команда FINIT, в отличие от FNINIT, проверяет наличие произошедших и необработанных исключений и обрабатывает их до инициализации. Команда FINIT полностью эквивалентна (и на самом деле является) WAIT FNINIT.
Команда:
FCLEX
Назначение:
Обнулить флаги исключений
Команда:
FNCLEX
Назначение:
Обнулить флаги исключений без ожидания
Процессор:
8087
Команды обнуляют флаги исключений (РЕ, UE, OF, ZE, DE, IE), а также флаги ES, SF и В в регистре состояния FPU. Команда FCLEX, в отличие от FNCLEX, проверяет наличие произошедших и необработанных исключений и обрабатывает их до выполнения. Команда FCLEX полностью эквивалентна (и на самом деле является) WAIT FNCLEX.
Команда:
FSTCW приемник
Назначение:
Сохранить регистр CR
Команда:
FNSTCW приемник
Назначение:
Сохранить регистр CR без ожидания
Процессор:
8087
<
/p>
Команды копируют содержимое CR в приемник (16-битная переменяя). Команда FSTCW, в отличие от FNSTCW, проверяет наличие произошедших и необработанных исключений и обрабатывает их до выполнения. Команда FSTCW полностью эквивалентна (и на самом деле является) WAIT FNSTCW.
Команда:
FLDCW источник
Назначение:
Загрузить регистр CR
Процессор:
8087
Копирует содержимое источника (16-битная переменная) в регистр CR. Если один или несколько флагов исключений установлены в регистре SR и замаскированы в CR, а команда FLDCW эти маски удалила, исключения будут обработаны перед началом выполнения следующей команды FPU (кроме команд без ожидания). Чтобы этого не происходило, обычно перед FLDCW выполняют команду FCLEX.
Команда:
FSTENV приемник
Назначение:
Сохранить вспомогательные регистры
Команда:
FNSTENV приемник
Назначение:
Сохранить вспомогательные регистры без ожидания
Процессор:
8087
Сохраняет все вспомогательные регистры FPU в приемник (14 или 28 байт в памяти, в зависимости от разрядности операндов) и маскирует все исключения. Сохраняет содержимое регистров CR, SR, TW, FIP, FDP и последнюю команду в формате, зависящем от текущей разрядности операндов и адресов (7 двойных слов для 32-битных операндов и 7 слов для 16-битных операндов). Первое слово (или младшая половина первого двойного слова в 32-битном случае) всегда содержит CR, второе слово — SR, третье слово — TW, четвертое — FIP. Использование последних трех слов варьируется в зависимости от текущей разрядности адресации и операндов.
32-битные операнды и 32-битная адресация:
Двойное слово 5: биты 10 – 0 старшего слова — код последней команды, младшее слово — селектор для FIP.
Двойное слово 6: FDP (32-битный).
Двойное слово 7: младшее слово содержит селектор для FDP.
32-битные операнды и 16-битная адресация:
Двойное слово 5: биты 31 – 16 — FIP, биты 10 – 0 — код последней команды.
Двойное слово 6: биты 15 – 0 — FDP.
Двойное слово 7: биты 31 – 16 — FDP.
16-битные операнды и 32-битная адресация:
Слово 5: селектор для FIP.
Слово 6: FDP.
Слово 7: селектор для FDP.
16-битные операнды и 16-битная адресация:
Слово 5: биты 15 – 12 — биты 19 – 16 20-битного FIP, биты 10 – 0 — код последней команды.
Из кода последней выполненной FPU- команды сохраняются первые два байта без префиксов и без первых пяти бит, которые одинаковы для всех команд FPU, то есть всего 11 бит. Команда FSTENV, в отличие от FNSTENV, проверяет наличие произошедших и необработанных исключений и обрабатывает их до выполнения. Команда FSTENV полностью эквивалентна (и на самом деле является) WAIT FNSTENV.
Команда:
FLDENV источник
Назначение:
Загрузить вспомогательные регистры
Процессор:
8087
Команда загружает все вспомогательные регистры FPU (регистры CR, SR, TW, FIP, FDP) из источника (область памяти в 14 или 28 байт, в зависимости от разрядности операндов), сохраненные ранее командой FSTENV/FNSTENV. Если в загружаемом SW установлены несколько (или один) флагов исключений, которые одновременно не замаскированы флагами CR, эти исключения будут выполнены перед следующей командой FPU (кроме команд без ожидания).
Команда:
FSAVE приемник
Назначение:
Сохранить состояние FPU
Команда:
FNSAVE приемник
Назначение:
Сохранить состояние FPU без ожидания
Процессор:
8087
Сохраняет состояние FPU (регистры данных и вспомогательные регистры) в приемник (область памяти размером 94 или 108 байт, в зависимости от разрядности операндов) и инициализирует FPU аналогично командам FINIT/FNINIT. Команда FSAVE, в отличие от FNSAVE, проверяет наличие произошедших и необработанных исключений и обрабатывает их до выполнения. Команда FSAVE полностью эквивалентна (и на самом деле является) WAIT FNSAVE. Эта команда обычно используется операционной системой при переключении задач или программами, которые должны передавать вызываемым процедурам чистый FPU.
Команда:
FXSAVE приемник
Назначение:
Быстрое сохранение состояния FPU
Процессор:
PII
<
/p>
Команда FXSAVE сохраняет все текущее состояние FPU, включая все регистры, в приемник (512-байтную область памяти с адресом, кратным 16), не проверяя на необработанные исключения, аналогично команде FNSAVE. Кроме того, в отличие от FSAVE/FNSAVE, эта команда не переинициализирует FPU после сохранения состояния. Эта команда несовместима с FSAVE/FRSTOR.
Команда:
FRSTOR источник
Назначение:
Восстановить состояние FPU
Процессор:
8087
Загружает состояние FPU (вспомогательные регистры и регистры данных) из источника (область в памяти размером в 94 или 108 байт, в зависимости от разрядности операндов).
Команда:
FXRSTOR источник
Назначение:
Быстрое восстановление состояния FPU
Процессор:
PII
Команда FXRSTOR восстанавливает все текущее состояние FPU, включая все регистры, из источника (512-байтной области памяти с адресом, кратным 16), который был заполнен командой FXSAVE.
Команда:
FSTSW приемник
Назначение:
Сохранить регистр SR
Команда:
FNSTSW приемник
Назначение:
Сохранить регистр SR без ожидания
Процессор:
80287
Сохраняет текущее значение регистра SR в приемник (регистр АХ или 16-битная переменная). Команда FSTSW АХ обычно используется после команд сравнения и FPREM/FPREM1/FXAM, чтобы выполнять условные переходы.
Команда:
WAIT FWAIT
Назначение:
Ожидание готовности FPU
Процессор:
8087
Процессор проверяет, присутствуют ли необработанные и немаскированные исключения FPU, и обрабатывает их. Эту команду можно указывать в критических ситуациях после команд FPU, чтобы убедиться, что возможные исключения будут обработаны. WAIT и FWAIT — разные названия для одной и той же команды.
Команда:
FNOP
Назначение:
Отсутствие операции
Процессор:
8087
Эта команда занимает место и время, но не выполняет никакого действия. Устаревшие команды FPU — FENI (разрешить исключения, 8087), FDISI (запретить исключения, 8087) и FSETPM (80287) выполняются, как FNOP, всеми более старшими процессорами.