[Назад] [Далее]

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

  • Команда:
  • FADD приемник,источник
  • Назначение:
  • Сложение вещественных чисел
  • Команда:
  • FADDP приемник,источник
  • Назначение:
  • Сложение с выталкиванием из стека
  • Команда:
  • FIADD источник
  • Назначение:
  • Сложение целых чисел
  • Процессор:
  • 8087

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

  • Команда:
  • FSUB приемник,источник
  • Назначение:
  • Вычитание вещественных чисел
  • Команда:
  • FSUBP приемник,источник
  • Назначение:
  • Вычитание с выталкиванием из стека
  • Команда:
  • FISUB источник
  • Назначение:
  • Вычитание целых чисел
  • Процессор:
  • 8087

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

    Если один из операндов — бесконечность, результат — бесконечность соответствующего знака. Если оба операнда — бесконечности одного знака, результат не определен (происходит исключение «недопустимая операция»).

  • Команда:
  • FSUBR приемник,источник
  • Назначение:
  • Обратное вычитание вещественных чисел
  • Команда:
  • FSUBRP приемник,источник
  • Назначение:
  • Обратное вычитание с выталкиванием
  • Команда:
  • FISUBR источник
  • Назначение:
  • Обратное вычитание целых чисел
  • Процессор:
  • 8087

    Эти команды эквивалентны FSUB/FSUBP/FISUB во всем, кроме того, что они выполняют вычитание приемника из источника, а не источника из приемника.

  • Команда:
  • FMUL приемник,источник
  • Назначение:
  • Умножение вещественных чисел
  • Команда:
  • FMULP приемник,источник
  • Назначение:
  • Умножение с выталкиванием из стека
  • Команда:
  • FIMUL источник
  • Назначение:
  • Умножение целых чисел
  • Процессор:
  • 8087

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

  • Команда:
  • FDIV приемник,источник
  • Назначение:
  • Деление вещественных чисел
  • Команда:
  • FDIVP приемник,источник
  • Назначение:
  • Деление с выталкиванием из стека
  • Команда:
  • FIDIV источник
  • Назначение:
  • Деление целых чисел
  • Процессор:
  • 8087

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

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

  • Команда:
  • FDIVR приемник,источник
  • Назначение:
  • Обратное деление вещественных чисел
  • Команда:
  • FDIVRP приемник,источник
  • Назначение:
  • Обратное деление с выталкиванием
  • Команда:
  • FIDIVR источник
  • Назначение:
  • Обратное деление целых чисел
  • Процессор:
  • 8087

    Эти команды эквивалентны FDIV/FDIVP/FIDIV во всем, кроме того, что они выполняют деление источника на приемник, а не приемника на источник.

  • Команда:
  • FPREM
  • Назначение:
  • Найти частичный остаток от деления
  • Процессор:
  • 8087
  • Команда:
  • FPREM1
  • Назначение:
  • Найти частичный остаток в стандарте IEEE
  • Процессор:
  • 80387

    Эти команды выполняют деление ST(0) на ST(1) и помещают остаток от деления в ST(0). Деление осуществляется при помощи последовательных вычитаний ST(1) из ST(0), но за один раз выполняется не более 64 таких вычитаний. Если ST(0) не стал меньше ST(1) за это время, говорят, что в ST(0) находится частичный остаток от деления. Если был получен точный остаток, флаг С2 сбрасывается в 0, если частичный — устанавливается в 1, так что можно повторять эту команду до обнуления С2. Если вычисление привело к точному остатку, три младших бита частного (то есть числа потребовавшихся вычитаний) сохраняются в С0, С3, С1 (биты 2, 1, 0 соответственно). Например, используя FPREM1, можно уменьшить аргумент тангенса, вычислив его остаток от деления на /4, тогда потребуются младшие три бита частного, чтобы определить, не поменялся ли при этой операции знак тангенса.

    Различие между FPREM и FPREM1 заключается в разном определении значения частного. Сначала эти команды выполняют вещественное деление ST(0) на ST(1), округляют результат (FPREM1 — к ближайшему целому, FPREM — к нулю), а затем, если частное меньше 64, вычисляяют точный остаток, а если больше — частичный.

  • Команда:
  • FABS
  • Назначение:
  • Найти абсолютное значение
  • Процессор:
  • 8087

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

  • Команда:
  • FCHS
  • Назначение:
  • Изменить знак
  • Процессор:
  • 8087

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

  • Команда:
  • FRNDINT
  • Назначение:
  • Округлить до целого
  • Процессор:
  • 8087

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

  • Команда:
  • FSCALE
  • Назначение:
  • Масштабировать по степеням двойки
  • Процессор:
  • 8087

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

  • Команда:
  • FXTRACT
  • Назначение:
  • Извлечь экспоненту и мантиссу
  • Процессор:
  • 8087

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

  • Команда:
  • FSQRT
  • Назначение:
  • Извлечь квадратный корень
  • Процессор:
  • 8087

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


    п»ї
    "target=_blank><\/a>") //-->