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

2.4.7. Трансцендентные операции 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.


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