Assembler - язык неограниченных возможностей

         

Трансцендентные операции FPU




  • Команда:
  • FSIN
  • Назначение:
  • Синус
  • Процессор:
  • 80387

    Вычисляет синус числа, находящегося в ST(0), и сохраняет результат в этом же регистре. Операнд считается заданным в радианах и не может быть больше 263 или меньше -263 (можно воспользоваться FPREM с делителем 2

    , если операнд слишком велик). Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) не изменяется.

  • Команда:
  • FCOS
  • Назначение:
  • Косинус
  • Процессор:
  • 80387

    Вычисляет косинус числа, находящегося в ST(0), и сохраняет результат в этом же регистре. Операнд считается заданным в радианах и не может быть больше 263 или меньше -263 (так же, как и в случае синуса, можно воспользоваться FPREM с делителем 2

    , если операнд слишком велик). Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) не изменяется.

  • Команда:
  • FSINCOS
  • Назначение:
  • Синус и косинус
  • Процессор:
  • 80387

    Вычисляет синус и косинус числа, находящегося в ST(0), помещает синус в ST(0) и затем помещает косинус в стек (так что синус оказывается в ST(1), косинус — в ST(0), и ТОР уменьшается на 1). Операнд считается заданным в радианах и не может быть больше 263 или меньше -263. Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) и стек не изменяются.

  • Команда:
  • FPTAN
  • Назначение:
  • Тангенс
  • Процессор:
  • 8087

    Вычисляет тангенс числа, находящегося в регистре ST(0), заменяет его на вычисленное значение и затем помещает 1 в стек, так что результат оказывается в ST(1), ST(0) содержит 1, а ТОР уменьшается на единицу. Как и для остальных тригонометрических команд, операнд считается заданным в радианах и не может быть больше 263 или меньше -263. Если операнд выходит за эти пределы, флаг С2 устанавливается в 1 и значение ST(0) и стек не изменяются. Единица помещается в стек для того, чтобы можно было получить котангенс вызовом команды FDIVR сразу после FPTAN.

  • Команда:
  • FPATAN
  • Назначение:
  • Арктангенс
  • Процессор:
  • 8087

    Вычисляет арктангенс числа, получаемого при делении ST(1) на ST(0), сохраняет результат в ST(1) и выталкивает ST(0) из стека (помечает ST(0) как пустой и увеличивает TOP на 1). Рeзyльтaт всегда имеет тот же знак, что и ST(1), и меньше

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


    FPATAN может выполняться над любыми операндами (кроме не-чисел), давая результаты для различных нулей и бесконечностей, определенные в соответствии со стандартом IEEE (как показано в табл. 17).

    Таблица 17. Результаты работы команды FPATAN1

      ST(0)

    ST(1)
      -
    -F 0 0 +F +
    -
    -3
    /4
    -
    /2
    -
    /2
    -
    /2
    -
    /2
    -
    /4
    -F -
    от -
    до -
    /2
    -
    /2
    -
    /2
    от -
    /2 до -0
    0
    0 -
    -
    -
    0 0 0
    0 +
    +
    +
    0 0 0
    +F +
    от +
    до +
    /2
    +
    /2
    +
    /2
    от +
    /2 до +0
    0
    +
    +3
    /4
    +
    /2
    +
    /2
    +
    /2
    +
    /2
    +
    /4
    1 F в этой таблице — конечное вещественное число.

  • Команда:
  • F2XMI
  • Назначение:
  • Вычисление 2х-1
  • Процессор:
  • 8087
    Возводит 2 в степень, равную ST(0), и вычитает 1. Результат сохраняется в ST(0). Значение ST(0) должно лежать в пределах от -1 до +1, иначе результат не определен.

  • Команда:
  • FYL2X
  • Назначение:
  • Вычисление у*log2(x)
  • Процессор:
  • 8087
    Вычисляет ST(1)*log2(ST(0)), помещает результат в ST(1) и выталкивает ST(0) из стека, так что после этой операции результат оказывается в ST(0). Первоначальное значение ST(0) должно быть неотрицательным. Если регистр ST(0) содержал ноль, результат (если ZM = 1) будет равен бесконечности со знаком, обратным ST(1).

  • Команда:
  • FYL2XP1
  • Назначение:
  • Вычисление у*log2(x+1)
  • Процессор:
  • 8087
    Вычисляет ST(1)*log2(ST(0)+1), помещает результат в ST(1) и выталкивает ST(0) из стека, так что после этой операции результат оказывается в ST(0). Первоначальное значение ST(0) должно быть в пределах от -(1 -
    /2) до (1 +
    /2), иначе результат не определен. Команда FYL2XP1 дает большую точность для ST(0), близких к нулю, чем FYL2X для суммы того же ST(0) и 1.


    Содержание раздела