[Назад] [Далее] | |
FINCSTP | |
Увеличить указатель вершины стека | |
8087 |
Поле ТОР регистра состояния 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 |
Команды копируют содержимое 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 — код последней команды.
Слово 6: FDP.
Слово 7: биты 15 – 12 — биты 19 – 16 20-битного FDP.
Из кода последней выполненной 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 |
Команда 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, всеми более старшими процессорами.