2.4.8. Константы FPU

Команда

Назначение

Процессор

FLD1

Поместить в стек 1,0

8087

FLDZ

Поместить в стек +0,0

BGB7

FLDPI

Поместить в стек число я

BGB7

FLDL2E

Поместить в стек 1од2(е)

BGB7

FLDL2T

Поместить в стек 1од2(10)

BGB7

FLDLN2

Поместить в стек !п(2)

BGB7

FLDLG2

Поместить в стек 1д(2)

BGB7

Все эти команды помещают в стек (то есть уменьшают ТОР на один и поме­щают в 8Т(0)) соответствующую часто используемую константу. Начиная с со­процессора 80387, все константы хранятся в более точном формате, чем 80-бит­ный формат, используемый в регистрах данных, и при загрузке в стек происходит округление в соответствии с полем RC.

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

Команда

Назначение

Процессор

FINCSTP

Увеличить указатель вершины стека

8087

Поле ТОР регистра состояния FPU увеличивается на 1. Если ТОР бьию равно семи, оно обнуляется. Эта команда не эквивалентна выталкиванию ST(0) из сте­ка, потому что регистр данных, который назывался ST(0) и стал ST(7), не поме­чается как пустой.тшш

Команда_Назначение_Процессор

FDECSTP_Уменьшить указатель вершины стека_8087

Поле ТОР регистра состояния FPU уменьшается на 1. Если ТОР было равно нулю, оно устанавливается в 7. Содержимое регистров данных и TW не изменяется.

Команда_Назначение       '_Процессор

FFP.EE операнд Освободить регистр данных 8087

Команда отмечает в регистре Г\У, что операнд (регистр данных Щп)) пустой. Содержимое регистра и ТОР не изменяется.

Команда Назначение Процессор

FINIT Инициализировать FPU 8087

FNINIT Инициализировать FPU без ожидания 8087

Команды FINIT и FNINIT восстанавливают значения по умолчанию в регистрах CR, SR, TW, а начиная с 80387 - FIP и FDP. Управляющий регистр инициализируется значением 037Fh (округление к ближайшему, 64-битная точность, все исключе­ния замаскированы). Регистр состояния обнуляется (ТОР = 0, флаги исключе­ний не установлены). Регистры данных никак не изменяются, но все они помеча­ются пустыми в регистре TW. Регистры FIP и FDP обнуляются. Команда FINIT, в отличие от FNINIT, проверяет наличие произошедших и необработанных ис­ключений и обрабатывает их до инициализации. Команда FINIT полностью эк­вивалентна (и на самом деле является) WAIT FNINIT.

Команда

Назначение

Процессор

FCLEX

Обнулить флаги исключений

8087

FNCLEX

Обнулить флаги исключений без ожидания

8087

Команды обнуляют флаги исключений (РЕ, UE, OE, ZE, DE, IE), а также фла­ги ES, SF и В в регистре состояния FPU. Команда FCLEX, в отличие от FNCLEX,

проверяет наличие произошедших и необработанных исключений и обрабатыва­ет их до выполнения. Команда FCLEX полностью эквивалентна (и на самом деле является) WAIT FNCLEX.

Команда

Назначение

Процессор

FSTCW приемник

Сохранить регистр CR

8087

FNSTCW приемник

Сохранить регистр CR без ожидания

8087

Команды копируют содержимое CR в приемник (16-битная переменная). Ко­манда FSTCW, в отличие от FNSTCW, проверяет наличие произошедших и нео­бработанных исключений и обрабатывает их до выполнения. Команда FSTCW

полностью эквивалентна (и на самом деле является) WAIT FNSTCW.

Команда_Назначение_Процессор

FLDCW источник Загрузить регистр CR 8087

Копирует содержимое источника переменная) в регистр CR. Если

один или несколько флагов исключений установлены в регистре SR и замаски­рованы в CR, а команда FLDCW эти маски удалила, исключения будут обрабо­таны перед началом выполнения следующей команды FPU (кроме команд без

ожидания). Чтобы этого не происходило, обычно перед FLDCW выполняют команду FCLEX.

Команда

Назначение

Процессор

FSTENV приемник FNSTENV приемник

Сохранить вспомогательные регистры

Сохранить вспомогательные регистры без ожидания

8087'; 8087'

Сохраняет все вспомогательные регистры FPU в приемник или 28 байт в памяти, в зависимости от разрядности операндов) и маскирует все исключения, а также сохраняет содержимое регистров CR, SR, TW, FIP, FDP и последнюю команду в формате, зависящем от текущей разрядности операндов и адресов (У двойных слов для 32-битных операндов и У слов для 1б-битных операндов). Первое слово (или младшая половина первого двойного слова в 32-битном случае) всегда содержит CR, второе слово - SR, третье слово - TW, четвертое - FIP. Ис­пользование последних трех слов варьируется в зависимости от текущей разряд­ности адресации и операндов.

□ 32 -битные операнды и 1б-битная адресация:

двойное слово 5: биты 1O-O старшего слова - код последней команды, млад­шее слово - селектор для FIP;

двойное слово б: FDP (32-битный);

двойное слово 7: младшее слово содержит селектор для FDP; а 32-битные операнды и 1б-битная адресация: двойное слово 5: биты 31-1б - FIP, биты 1O-O - код последней команды; двойное слово 6: биты 15-0 - FDP; двойное слово 7: биты 31-16 - FDP;

а 1б-битные операнды и 32-битная адресация:

слово 5: селектор для FIP;

слово б: FDP;

слово У: селектор для FDP;

□ 16-битные операнды и 16-битная адресация:

слово 5: биты 15-12 - биты 19-1б 20-битного FIP, биты 1O-O - код послед­ней команды;

слово б: FDP;

слово У: биты 15-12 - биты 19-1б 20-битного FDP.

Из кода последней выполненной сохраняются первые два бай-

та без префиксов и без первых пяти бит, которые одинаковы для всех команд! FPU, то есть всего 11 бит. Команда FSTENV, в отличие от FNSTENV, проверяет наличиеттшт,

произошедших и необработанных исключений и обрабатывает их до выполнения. Команда FSTENV полностью эквивалентна (и на самом деле является) WAIT FNSTENV.

Команда

Назначение

Процессор

источник

Загрузить вспомогательные регистры

BOB?

Команда загружает все вспомогательные регистры FPU (регистры CR, SR, TW, FIP, FDP) из источника (область памяти в 14 или 28 байт, в зависимости от раз­рядности сохраненные ранее командой Если в за­гружаемом SW установлены несколько (или один) флагов исключений, которые одновременно не замаскированы флагами CR, то эти исключения будут выполне­ны перед следующей командой FPU (кроме команд без ожидания).

Команда

Назначение

Процессор

FSAVE приемник

Сохранить состояние

BOB?

FNSAVE приемник

Сохранить состояние FPU без ожидания

BOB?

Сохраняет состояние FPU (регистры данных и вспомогательные регистры) в приемник (область памяти размером 94 или 108 байт, в зависимости от разряд­ности операндов) и инициализирует FPU аналогично командам FINIT/FNINIT. Команда FSAVE, в отличие от FNSAVE, проверяет наличие произошедших и нео­бработанных исключений и обрабатывает их до выполнения. Она полностью эк­вивалентна (и на самом деле является) WAIT FNSAVE. Эта команда обычно ис­пользуется операционной системой при переключении задач или программами, которые должны передавать вызываемым процедурам чистый FPU.

Команда

Назначение

Процессор

FXSAVE приемник

Быстрое сохранение состояния FPU

PII

Команда FXSAVE сохраняет текущее состояние FPU, включая все регистры, в приемник (512-байтную область памяти с адресом, кратным 1б), не проверяя на

необработанные исключения, аналогично команде FNSAVE. Кроме того, в отли­чие от FSAVE/FNSAVE, эта команда не переинициализирует FPU после сохране­ния состояния. Она несовместима с FSAVE/FRSTOR.

Команда Назначение Процессор

FRSTOR источник Восстановить состояние FPU BOB?

Загружает состояние FPU (вспомогательные регистры и регистры данных) из источника (область в памяти размером в 94 или 108 байт, в зависимости от раз­рядности операндов).

Команда Назначение Процессор

FXRSTOR источник

Быстрое восстановление состояния FPU

PIКоманда FXRSTOR восстанавливает текущее состояние FPU, включая все ре­гистры, из источника (512-байтной области памяти с адресом, кратным 16), кото­рый был заполнен командой FXSAVE.

Команда Назначение Процессор

FSTSW приемник Сохранить регистр SR 80287

FNSTSW приемник Сохранить регистр SR без ожидания 80287

Сохраняет текущее значение регистра SR в приемник (регистр АХ или 16-бит­ная переменная). Команда FSTSWAX обычно используется после команд срав­нения и FPREM/FPREM1/FXAM, чтобы выполнять условные переходы.

Команда .      Назначение Процессор

WAIT Ожидание готовности FPU 8087

FWAIT

Процессор проверяет, присутствуют ли необработанные и незамаскированные исключения FPU, и обрабатывает их. Эту команду можно указывать в критичес­ких ситуациях после команд FPU, чтобы убедиться, что возможные исключения бу­дут обработаны. WAIT и FWAIT - разные названия для одной и той же команды.

Команда

Назначение

Процессор

FNOP

Отсутствие операции

8087

Эта команда занимает место и время, но не выполняет никакого действия. Уста­ревшие команды FPU - FENI (разрешить исключения, 8087), FDISI (запретить исключения, 8087) и FSETPM (80287) выполняются как FNOP всеми более стар­шими процессорами.