Аппаратное обеспечение IBM PC© Александр Фролов, Григорий ФроловТом 2, книга 1, М.: Диалог-МИФИ, 1992. 14.12. Команды сопроцессоров 8087/80287/80387Загрузка данных в стекFLD src Загрузка вещественного числа st(0) <- src (mem32/mem64/mem80) FILD src Загрузка целого числа st(0) <- src (mem16/mem32/mem64) FBLD src Загрузка десятичного числа st(0) <- src (mem80) Загрузка константFLDZ Загрузка нуля st(0) <- 0.0 FLD1 Загрузка единицы st(0) <- 1.0 FLDPI Загрузка числа Pi st(0) <- Pi FLDL2T Загрузка log2(10) st(0) <- log2(10) FLDL2E Загрузка log2(e) st(0) <- log2(e) FLDLG2 Загрузка log10(2) st(0) <- log10(2) FLDLN2 Загрузка loge(2) st(0) <- loge(2) Запись данныхFST dest Запись вещественного числа dest <- st(0) (mem32/mem64) FSTP dest Запись вещественного числа с извлечением его из стека численных регистров dest <- st(0) (mem32/mem64/mem80) FIST dest Запись целого числа dest <- st(0) (mem32/mem64) FISTP dest Запись целого числа с извлечением его из стека численных регистров dest <- st(0) (mem16/mem32/mem64) FBST dest Запись десятичного числа dest <- st(0) (mem80) FBSTP dest Запись десятичного числа с извлечением его из стека численных регистров dest <- st(0) (mem80) СравнениеFCOM Сравнение вещественных чисел Установка флагов по результатам операции st(0) - st(1) FCOM op Сравнение вещественных чисел Установка флагов по результатам операции st(0) - op (mem32/mem64) FCOMP op Сравнение вещественных чисел с извлечением из стека Установка флагов по результатам операции st(0) - op (mem32/mem64) FCOMPP Сравнение вещественных чисел с двойным извлечением из стека численных регистров Установка флагов по результатам операции st(0) - st(1) FICOM op Сравнение целых чисел Установка флагов по результатам операции st(0) - op (mem16/mem32) FICOMP op Сравнение целых чисел с извлечением из стека численных регистров Установка флагов по результатам операции st(0) - op (mem16/mem32) FTST Сравнение с нулем Сравнивается st(0) и 0.0 FUCOM st(i) Неупорядоченное сравнение (только 80486) Содержимое st(0) сравнивается с st(i) FUCOMP st(i) Неупорядоченное сравнение (только 80486) с извлечением из стека численных регистров Содержимое st(0) сравнивается с st(i) FUCOMPP st(i) Неупорядоченное сравнение (только 80486) с двойным извлечением из стека численных регистров Содержимое st(0) сравнивается с st(i) FXAM Проверка верхушки стека По состоянию st(0) устанавливаются коды условий Арифметические командыFADD Сложение вещественных чисел st(0) <- st(0) + st(1) FADD src Сложение вещественных чисел st(0) <- st(0) + src (mem32/mem64) FADD st(i),st Сложение вещественных чисел st(i) <- st(i) + st(1) FADDP st(i),st Сложение вещественных чисел с извлечением из стека численных регистров st(i) <- st(i) + st(1) FIADD src Сложение целых чисел st(0) <- st(0) + src (mem16/mem32) FSUB Вычитание вещественных чисел st(0) <- st(0) - st(1) FSUB src Вычитание вещественных чисел st(0) <- st(0) - src FSUB st(i),st Вычитание вещественных чисел st(i) <- st(i) - st(1) FSUBP st(i),st Вычитание вещественных чисел с извлечением из стека численных регистров st(i) <- st(i) - st(1) FSUBR st(i),st Вычитание вещественных чисел обратное st(0) <- st(i) - st(0) FSUBRP st(i),st Вычитание вещественных чисел обратное с извлечением из стека численных регистров st(0) <- st(i) - st(0) FISUB src Вычитание целых чисел st(0) <- st(0) - src (mem16/mem32) FISUBR src Вычитание целых чисел обратное st(0) <- src (mem16/mem32) - st(0) FMUL Умножение вещественных чисел st(0) <- st(0) * st(1) FMUL st(i) Умножение вещественных чисел st(0) <- st(0) * st(i) FMUL st(i),st Умножение вещественных чисел st(i) <- st(0) * st(i) FMULP st(i),st Умножение вещественных чисел с извлечением из стека численных регистров st(i) <- st(0) * st(i) FIMUL src Умножение целых чисел st(0) <- st(0) * src (mem16/mem32) FDIV Деление вещественных чисел st(0) <- st(0) / st(1) FDIV st(i) Деление вещественных чисел st(0) <- st(0) / st(i) FDIV st(i),st Деление вещественных чисел st(i) <- st(0) / st(i) FDIVP st(i),st Деление вещественных чисел с извлечением из стека численных регистров st(i) <- st(0) / st(i) FIDIV src Деление целых чисел st(0) <- st(0) / src (mem16/mem32) FDIVR st(i),st Деление вещественных чисел обратное st(0) <- st(i) / st(0) FDIVRP st(i),st Деление вещественных чисел обратное с извлечением из стека численных регистров st(0) <- st(i) / st(0) FIDIVR src Деление целых чисел обратное st(0) <- src (mem16/mem32) / st(0) FSQRT Извлечение квадратного корня st(0) <- v st(0) FSCALE Масштабирование на степень числа 2 st(0) <- 2 | st(0) FXTRACT Извлечение экспоненты st(0) <- значение экспоненты st(0) FPREM Вычисление частичного остатка st(0) <- st(0) MOD st(1) FPREM1 Вычисление частичного остатка в стандарте IEEE, только для 80486 st(0) <- st(0) MOD st(1) FRNDINT Округление до ближайшего целого st(0) <- INT(st(0)) FABS Вычисление абсолютного значения st(0) <- ABS(st(0)) FCHS Изменение знака st(0) <- -st(0) Трансцендентные командыFCOS Вычисление косинуса st(0) <- COS(st(0)) FPTAN Вычисление частичного тангенса st(0) <- TAN(st(0)) FPATAN Вычисление частичного арктангенса st(0) <- ATAN(st(0)) FSIN Вычисление синуса st(0) <- SIN(st(0)) FSINCOS Вычисление синуса и косинуса st(1) <- SIN(st(0)) st(0) <- COS(st(0)) F2XM1 Вычисление выражения 2x-1 st(0) <- 2st(0)-1 FYL2X Вычисление Y * log2(X) Y = st(0), X = st(1) st(0) <- Y * log2(X) FYL2XP1 Вычисление Y * log2(X+1) Y = st(0), X = st(1) st(0) <- Y * log2(X+1) Управляющие командыFINIT Инициализация арифметического сопроцессора FSTSW AX Запись слова состояния AX <- MSW FSTSW dest Запись слова состояния dest (mem16) <- MSW FLDCW src Загрузка управляющего слова CW <- src (mem16) FSTCW dest Запись управляющего слова dest (mem16) <- CW FCLEX Сброс флагов особых случаев FSTENV dest Запись содержимого всех регистров сопроцессора, кроме численных FLDENV src Загрузка содержимого всех регистров сопроцессора, кроме численных FSAVE dest Запись содержимого всех регистров сопроцессора FRSTOR src Загрузка содержимого всех регистров сопроцессора FINCSTP Увеличение указателя стека численных регистров на 1 st(6) <- st(5) st(5) <- st(4) st(4) <- st(3) st(3) <- st(2) st(2) <- st(1) st(1) <- st(0) st(0) <- пустой FDECSTP Уменьшение указателя стека численных регистров на 1 st(0) <- st(1) st(1) <- st(2) st(2) <- st(3) st(3) <- st(4) st(4) <- st(5) st(5) <- st(6) st(6) <- st(7) st(7) <- пустой FFREE Освобождение регистра st(i) Команда помечает численный регистр st(i) как неинициализированный, записывая в соответствующее поле регистра тегов значение 11 FNOP Холостая команда st(0) <- st(0) WAIT/FWAIT Синхронизация центрального процессора и арифметического сопроцессора Центральный процессор будет находиться в состоянии ожидания до тех пор, пока сопроцессор не завершит выполнение текущей команды. FSETPM Установить защищенный режим работы Процессор переходит в защищенный режим работы, возврат в реальный режим возможен только при сбросе сопроцессора. |