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