[Назад] [Далее]

2.4.9. Команды управления FPU

  • Команда:
  • 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. Использование последних трех слов варьируется в зависимости от текущей разрядности адресации и операндов.

    Из кода последней выполненной 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, всеми более старшими процессорами.


    п»ї
    "target=_blank><\/a>") //-->