Операнды любых команд могут быть закодированы несколькими способами. Например, команда FADD (сложение вещественное) может быть записана без операндов, только с операндом-источником или и с источником, и с приемником. При описании команд для разделения альтернативных форм представления операндов используется наклонная черта, причем черта без последующей спецификации означает отсутствие явно задаваемых операндов. Таким образом, для команды FADD возможные комбинации операндов будут представлены как:
Это означает, что, например, команда FADD может быть записана в одной из следующих форм:
FADD приемник, источник.
Важно помнить, что операнды в памяти могут быть закодированы в любом из режимов адресации памяти процессора.
вторая буква I (Integer) обозначает операцию с целыми числами, буква B (BCD) – с целыми в BCD-формате, отсутствие букв I и B – операцию с вещественными числами;
последняя буква P (Pop) идентифицирует команду, заканчивающуюся извлечением из стека.
Для некоторых команд управления работой сопроцессора имеются альтернативные мнемоники, второй буквой которых является N (например, FSAVE/FNSAVE). Мнемоники такого типа сообщают ассемблеру, автоматически вставляющему в программе для процессора 8086 перед каждой командой сопроцессора команду WAIT (ожидания), что перед этой командой вставлять WAIT не нужно. Команды с такой формой игнорируют незамаскированные ошибки, а команды с ожиданием контролируют их наличие.
Мнемоника
| Операнды
| Описание
|
Команды пересылки данных
|
FLD
| ST(i)
| Загрузка новой вершины стека
|
| short_real
|
|
| long_real
|
|
| temp_real
|
|
FBLD
| bcd
|
|
FILD
| word_integer
|
|
| short_integer
|
|
| long_integer
|
|
FSTP
| ST(i)
| Извлечение из стека
|
| short_real
|
|
| long_real
|
|
| temp_real
|
|
FISTP
| word_integer
|
|
| short_integer
|
|
| long_integer
|
|
FBSTP
| bcd
|
|
FST
| ST(i)
| Копирование вершины стека
|
| short_real
|
|
| long_real
|
|
FIST
| word_integer
|
|
| short_integer
|
|
FXCH
| //ST(i)
| Обмен вершины стека с заданным регистром стека
|
FLDLG2
|
| Загрузка новой вершины стека константой lg2
|
FLDLN2
|
| Загрузка новой вершины стека константой ln2
|
FLDL2E
|
| Загрузка новой вершины стека константой log2e
|
FLDL2T
|
| Загрузка новой вершины стека константой log210
|
FLDPI
|
| Загрузка новой вершины стека константой π
|
FLDZ
|
| Загрузка новой вершины стека нулем
|
FLD1
|
| Загрузка новой вершины стека единицей
|
Команды арифметических операций
|
Базовые арифметические команды
|
FADD
| //ST, ST(i) / ST(i), ST
| Сложение
|
| short_real
|
|
| long_real
|
|
FADDP
| ST(i), ST
|
|
FIADD
| word_integer
|
|
| short_integer
|
|
FSUB
| //ST, ST(i) / ST(i), ST
| Вычитание
|
| short_real
|
|
| long_real
|
|
FSUBP
| ST(i),ST
|
|
FISUB
| word_integer
|
|
| short_integer
|
|
FSUBR
| //ST, ST(i) / ST(i), ST
|
|
| short_real
|
|
| long_real
|
|
FSUBRP
| ST(i), ST
|
|
FISUBR
| word_integer
|
|
| short_integer
|
|
FMUL
| //ST, ST(i) / ST(i), ST
| Умножение
|
| short_real
|
|
| long_real
|
|
FMULP
| ST(i), ST
|
|
FIMUL
| word_integer
|
|
| short_integer
|
|
FDIV
| //ST, ST(i) /ST(i), ST
| Деление
|
| short_real
|
|
| long_real
|
|
FDIVP
| ST(i), ST
|
|
FIDIV
| word_integer
|
|
| short_integer
|
|
FDIVR
| //ST, ST(i) /ST(i), ST
|
|
| short_real
|
|
| long_real
|
|
FDIVRP
| ST(i), ST
|
|
FIDIVR
| word_integer
|
|
| short_integer
|
|
Дополнительные арифметические команды
|
FABS
|
| Нахождение модуля
|
FCHS
|
| Смена знака
|
FSQRT
|
| Извлечение квадратного корня
|
FRNDINT
|
| Округление до целого
|
FPREM
|
| Нахождение частичного остатка
|
FSCALE
|
| Масштабирование
|
FXTRACT
|
| Нахождение мантиссы и несмещенного порядка
|
Команды сравнения
|
FCOM
| // ST(i)
| Сравнение
|
| short_real
|
| long_real
|
FCOMP
| //ST(i)
| Сравнение с извлечением из стека
|
| short_real
|
| long_real
|
FCOMPP
|
| Сравнение с двойным извлечением из стека
|
FICOM
| word_integer
| Сравнение с целым операндом в памяти
|
| short_integer
|
FICOMP
| word_integer
| Сравнение с целым операндом в памяти и извлечение из стека
|
| short_integer
|
FCOMI
| ST,ST(i)
| Сравнение и установка флагов CF, ZF центрального процессора (начиная с Pentium II). Машинный код: db 0dbh, 0fih.
|
FCOMIP
|
| Сравнение с извлечением из стека и установка флагов CF, ZF центрального процессора (начиная с Pentium II). Машинный код: db 0dfh, 0fih.
|
FTST
|
| Сравнение с нулем
|
FXAM
|
| Проверка содержимого st(0)
|
Трансцендентные команды
|
FPATAN
|
| Вычисление частичного арктангенса
|
FPTAN
|
| Вычисление частичного тангенса
|
FCOS
|
| Вычисление косинуса (начиная с 80387)
|
FSINCOS
|
| Вычисление синуса и косинуса (начиная с 80387)
|
F2XM1
|
| Вычисление функции 2 x - 1
|
FYL2X
|
| Вычисление функции y log2 x
|
FYL2XP1
|
| Вычисление функции y log2 (x +1)
|
Команды управления
|
FCLEX
|
| Сброс флагов ошибок, флага запроса на прерывание и флага занятости в слове состояния
|
FNCLEX
|
|
FDECSTP
|
| Уменьшение на 1 указателя стека в слове состояния
|
FDISI
|
| Запрещение прерываний в слове состояния
|
FNDISI
|
|
FENI
|
| Разрешение прерываний в слове состояния
|
FNENI
|
|
FFREE
| ST(i)
| Освобождение регистра в слове тэгов
|
FINCSTP
|
| Увеличение на 1 указателя стека в слове состояния
|
FINIT
|
| Инициализация (сброс) сопроцессора
|
FNINIT
|
|
FLDCW
| word
| Загрузка слова управления
|
FLDENV
| address
| Загрузка программной среды сопроцессора (всех регистров, кроме стековых)
|
FNOP
|
| Пустая операция
|
FRSTOR
| address
| Загрузка полного состояния сопроцессора (всех регистров, включая стековые)
|
FSAVE
| address
| Сохранение полного состояния сопроцессора (всех регистров, включая стековые)
|
FNSAVE
| address
|
FSTCW
| word
| Сохранение слова управления
|
FSTENV
| address
| Сохранение программной среды сопроцессора (всех регистров, кроме стековых)
|
FSTSW
| word
| Сохранение слова состояния в памяти
|
FNSTSW
| word
|
FSTSW AX
|
| Сохранение слова состояния в регистре AX центрального процессора (начиная с 80287)
|
FWAIT
|
| Ожидание (альтернативная мнемоника команды центрального процессора WAIT)
|