2.4.5. Базовая арифметика FPU

FADD приемник,источник Сложение вещественных чисел 8087

FADDP приемник.источник Сложение с выталкиванием из стека 8087

FIADD источник Сложение целых чисел 8087

Команда выполняет сложение источника и приемника и помещает результат в приемник. Команда FADDP после этого выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды сложения могут прини­мать следующие формы:

Числа с плавающей запятой 'ШШШШШП

□ FADD источник, когда источником является 32- или 64-битная переменная, а приемником - ST(0);

□ FADD ST(0),ST(n), FADD ST(n),ST(0), FADDP ST(n),ST(0), когда источник и приемник заданы в виде регистров FPU;

U FADD без операндов эквивалентна FADD ST(0),ST(1); FADDP без операндов эквивалентна FADDP ST(i),ST(0);

источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником - ST(0).

Команда

Назначение

Процессор

FSUB приемник,источник

Вычитание вещественных чисел

BOB?

FSUBP приемник.источник

Вычитание с выталкиванием из стека

BOB?

FISUB источник

Вычитание целых чисел

BOB?

Выполняет вычитание источника из приемника и сохраняет результат в при­емнике. Команда FSUBP после этого выталкивает ST(0) из ' стека (помечает ST(0) как пустой и увеличивает ТОР на один). Команды вычитания могут принимать следующие формы:

□ FSUB источник, когда источником является 32- или 64-битная переменная, содержащая вещественное число, а приемником - ST(0);

a FSUB ST(0),ST(n), FSUB ST(n),ST(0), FSUBP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

□ FSUB без операндов эквивалентна FSUB ST(0),ST(1); FSUBP без операндов

эквивалентна FSUBP ST(1),ST(0);

О FISUB источник, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником - ST(0).

Если один из операндов - бесконечность, то результат - бесконечность соот­ветствующего знака. Если оба операнда — бесконечности одного знака, результат

не определен (происходит исключение «недопустимая операция»).

Команда Назначение

Процессор

РБиВР; приемник.источник           Обратное вычитание вещественных чисел FSUBRP приемник,источник          Обратное вычитание с выталкиванием FISUBR источник                        Обратное вычитание целых чисел

BOB? BOB? BOB?

Эти команды эквивалентны КиВ/^иВР/РКиВ, но при этом они выполня­ют вычитание приемника из источника, а не источника из приемника.

Команда Назначение

Процессор

FMl.IL приемник.источник             Умножение вещественных чисел РМ1Д.Р приемник.источник           Умножение с выталкиванием из стека источник                          Умножение целых чисел

BOB? BOB? BOB?

Выполняет умножение источника и приемника и помещает в при-

емник. Команда FMULP после этого выталкивает ST(0) из стека (помечает ST(0)

как пустой и увеличивает ТОР на один). Так же как и остальные команды базо­вой арифметики, команды умножения могут принимать следующие формы:

FMUL источник, когда источником является 32- или 64-битная переменная, а приемником -

UFMUL ST(0),ST(n),FMUL ST(n),ST(0),FMULP ST(n),ST(0), когда источник и приемник заданы явно в виде регистров FPU;

□ FMt/Ібез операндов эквивалентна FMUL ST(0),ST(1); FMULP без операн­дов эквивалентна FMULP ST(1),ST(0);

uFIMUIucmoHHUK, когда источником является 16- или 32-битная переменная, содержащая целое число, а приемником - ST(0).

Команда

Назначение

Процессор

FDIV

Деление вещественных чисел

BOB?

FDIVP приемник.источник

Деление с выталкиванием из стека

8087

FIDIV источник

Деление целых чисел

BOB?

Выполняет деление приемника на источник и сохраняет результат в приемни­ке. Команда РБГУР после этого выталкивает 8Т(0) из стека (помечает БТ^О) как пустой и увеличивает ТОР на один). Команды вычитания могут принимать сле­дующие формы:

FDIV источник, когда источником является 32- или 64-битная переменная,

содержащая вещественное число, а приемником - ST(0);

когда источник и при­емник заданы явно в виде регистров FPU;

uFDIV6e3 операндов эквивалентна FDIV ST(0),ST(1); FDIVP без операндов эквивалентна FDIVP ST(1),ST(0);

О FIDIV источник, когда источником является 16- или 32-битная содержащая целое число, а приемником - ST(0).

При делении бесконечности на ноль (так же как и на любое число) результат -бесконечность, при делении нуля на бесконечность (так же как и на любое число) результат - ноль. При делении на ноль нормального числа происходит исключе­ние деления на ноль, а если флаг ZM = 1, в качестве результата записывается бес­конечность соответствующего знака.

Команда

Назначение

Процессор

FDIVR

Обратное деление вещественных чисел

BOB?

FDIVRP приемник.источник

Обратное деление с выталкиванием

BOB?

FIDIVR источник

Обратное деление целых чисел

BOB?

Эти команды эквивалентны РБГУ/РБГУР/РГОР/, но при этом они выполня­ют деление источника на приемник, а не приемника на источник.

Числа с плавающей запятой

Команда

Назначение

Процессор

FPREM

FPREM1

Найти частичный остаток от деления Найти частичный остаток в стандарте IEEE

BOB?

BO3B?

Эти команды выполняют деление БТ(0) на ЭТ(1) и помещают остаток от деле­ния в БТ(0). Деление осуществляется при помощи последовательных вычитаний БТ(1) из БТ(0), но за один раз выполняется не более 64 таких вычитаний. Если БТ(0) не стал меньше БТ(1) за это время, говорят, что в БТ(0) находится частич­ный остаток от деления. Если был получен точный остаток, флаг С2 сбрасывает­ся в 0, если частичный - устанавливается в 1, так что можно повторять эту коман­ду до обнуления С2. Если вычисление привело к точному остатку, три младших бита частного (то есть числа потребовавшихся вычитаний) сохраняются в СО, СЗ, С1 (биты 2, 1, 0 соответственно). Например, используя ЕРЯЕМ1, можно умень­шить аргумент тангенса, вычислив его остаток от деления на я/4, тогда потребу­ются младшие три бита частного, чтобы определить, не поменялся ли при этой операции знак тангенса.

Различие между ЕРЯЕМ и БРЕЕМ 1 заключается в разном определении значения частного. Сначала эти команды выполняют вещественное деление БТ(0) на БТ(1), округляют результат (БРЕЕМ 1 - к ближайшему целому, БРЯЕМ - к нулю), а затем, если частное меньше 64, вычисляют точный остаток, а если больше - частичный.

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

FABS Найти абсолютное значение BOB?

Если БТ(0) был отрицательным числом - переводит его в положительное.

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

FCHS Изменить знак BOB?

Изменяет знак БТ(0), превращая положительное число в отрицательное,

и наоборот.

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

FRNDINT Округлить до целого BOB?

Округляет значение БТ(0) до целого числа в соответствии с режимом округ­ления, заданным битами ЯС.

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

FSCALE Масштабировать по степеням двойки BOB?

Умножает ST(0) на два в степени ST(1) и записывает результат в ST(0). Зна­чение ST.(l) предварительно округляется в сторону нуля до целого числа. Эта команда выполняет действие, обратное FXTRACT.

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

FXTRACT Извлечь экспоненту и мантиссу 8087

Разделяет число в ST(0) на мантиссу и экспоненту, сохраняет экспоненту в ST(0) и помещает мантиссу в стек, так что после этого ТОР уменьшается на 1, мантисса оказывается в ST(0), а экспонента - в ST(1).

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

FSQRT Извлечь квадратный корень 8087

Вычисляет квадратный корень из ST(0) и сохраняет результат в ST(0).