Assembler - язык неограниченных возможностей

         

Команды управления 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
    <
    /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 — код последней команды.

    Слово 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
    <


    /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, всеми более старшими процессорами.


    Содержание раздела