В таблице 10 приведены опкоды основных команд сопроцессора, работающих с памятью. Обратите внимание, что с вещественными значениями типа long double непосредственные математические операции невозможны – прежде их необходимо загрузить в стек сопроцессора.
Команда |
Тип |
||
короткий (float) |
длинный (double) |
расширенный (long double) |
|
FLD |
0xD9 ??000??? |
0xDD ??000??? |
0xDB ??101??? |
FSTP |
0xD9 ??011??? |
0xDD ??011??? |
0xDB ??111??? |
FST |
0xD9 ??010??? |
0xDD ??010??? |
нет |
FADD |
0xD8 ??000??? |
0xDC ??000??? |
нет |
FADDP |
0xDE ??000??? |
0xDA ??000??? |
нет |
FSUB |
0xD8 ??100??? |
0xDC ??100??? |
нет |
FDIV |
0xD8 ??110??? |
0xDC ??110??? |
нет |
FMUL |
0xD* ??001??? |
0xDC ??001??? |
нет |
FCOM |
0xD8 ??010??? |
0xDC ??010??? |
нет |
FCOMP |
0xD8 ??011??? |
0xDC ??011??? |
нет |
Таблица 10 Опкоды основных команд сопроцессора. Второй байт опкода представлен в двоичном виде. Знак вопроса обозначает любой бит.
Замечание о вещественных типах языка Turbo Pascal. Вещественные типы языка Си вследствие его машиноориентированности совпадают с вещественными типами сопроцессора, что логично. Основной же вещественный тип Turbo Pascal-я, - Real, занимает 6 байт и противоестественен для машины. Поэтому, при вычислениях через сопроцессор он программно переводится в Extended тип (long double в терминах Си). Это "съедает" львиную долю производительности, но других типов встроенная математическая библиотека, призванная заменить собой сопроцессор, увы - не поддерживает.