На главную Назад
Добро пожаловать, уважаемый посетитель!

Оставшаяся группа команд сопроцессора 8087 выполняет вычисления

сложных математических функций.Эти команды позволяют микросхеме

8087 вычислять арифметические выражения, требующие логарифмов,

экспонент и тригонометрических функций.На Фиг. 7.22 изображен

список этих команд.В этом списке нет тех операций, которые есть у

карманного калькулятора.Конструкторы процессора 8087 не смогли

реализовать все нужные функции на одном кристале, так как это

оказалось слишком сложным.Вместо этого они создали набор функций

более низкого уровня, из которых можно программно построить функции

калькулятора.Например, таких тригонометрических функций как синус

Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:04:28

Фиг. 7.22 Арифметические команды над вершиной стека 8087 Page1-1

 

PAGE,132

TITLEФиг. 7.22 Арифметические команды над вершиной стека 8087

 

0000CODESEGMENT

ASSUMECS:CODE,DS:CODE

 

00009B D9 FAFSQRT

00039B D9 FDFSCALE

00069B D9 F8FPREM

00099B D9 FCFRNDINT

000C9B D9 F4FXTRACT

000F9B D9 E1FABS

00129B D9 E0FCHS

00159B D9 F2FPTAN

00189B D9 F3FPATAN

001B9B D9 F0F2XM1

001E9B D9 F1FYL2X

00219B D9 F9FYL2XP1

 

0024CODEENDS

END

 

Фиг. 7.22 Арифметические команды над вершиной стека 8087

и косинус нет; вместо этих функций есть функция частичного

тангенса.Эта функция вычисляет отношение, равное тангенсу угла.

Из этого отношения программа может определить синус, косинус,

тангенс и любую другую тригонометрическую функцию.Из обратных

тригонометрических функций есть операция частичного арктангенса,

которая берет значения отношения чисел и вычисляет угол этого

тангенса.Эта частичная функция позволяет сконструировать

арксинус, арккосинус и другие функции, не имея их в явном виде.

Ниже приведен список команд этой группы с коротким комментарием

работы каждой команды.Ни у одной из этих команд не пишутся

операнды, так как все они работают с вершиной стека, и возможно,

также с элементом ST1.

 

FSQRT(квадратныйкорень)

STквадратный корень из (ST)

STдолжно быть неотрицательно.

FSCALE(масштабирование) ST <- ST * 2ST1

 

Эта команда необходима для возведения в степень.Другая, и

притом единственная, функция возведения в степень имеет ограничения

на значение показателя.Эта команда возводит 2 в степень, равную

целому числу.Далее будет приведен пример возведения 10 в

произвольную степень.

FPREM (частичный остаток)

ST <- ST mod ST1(частичный)

 

Полностью операцию деления по заданному модулю команда FPREM не

выполняет.Эта команда за один раз уменьшает содержимое вершины

стека максимум на 264.Команда выполняет нахождение истинного

остатка и требует очень много времени для уменьшения большого числа

по очень маленькому основанию.Максимально уменьшая число в

течение каждого выполнения команды, программист может разрешить

прерывания в течение всей операции поиска остатка.Если функция не

завершена, команда FPREM устанавливает флаг C2 равным 1, а когда

завершает вычисление остатка, то устанавливает другие три флага C3,

C1 и C0 равными трем младшим битам частного.Когда команда FPREM

используется в тригонометрических примитивах для ограничения

величины угла, это оказывается необходимым для определения октанта

первоначального угла.Чтобы продемонстрировать работу этой

команды, мы далее приведем пример тригонометрических вычислений.

 

FRNDINT(округление до целого)

ST <- Integer(ST)

 

Эта команда округляет текущее содержимое вершины стека до

целого числа.Текущее управляющее слово определяет направление

округления.

 

FXTRACT(извлечение)

ST <- дробная часть ST

ST1показатель степени двойки ST

Эта команда разбивает текущую вершину стека на компоненты.

Аргументом этой функции является вершина стека.Значение

показателя степени замещает содержимое вершины стека, а затем

дробная часть аргумента помещается в стек и становится новой

вершиной стека.Действия этой команды FXTRACT обратны действиям

команды FSCALE.Если в вершине стека находится некоторое число, то

выполнение последовательно команд FXTRACT и FSCALE оставляет в

вершине стека то же число.Но команда FSCALE не удаляет из стека

показатель степени, так что теперь в стеке дополнительно окажется

еще одно число.

 

FABS(абсолютная величина)

ST <- абсолютное значение ST

 

Эта команда устанавливает у числа в вершине стека знаковый

разряю в нуль (что соответствует положительному значению).

 

FCHS(смена знака)

ST <- -ST

 

Эта команда изменяет знак у вершины стека.

 

Следующие команды выполняют также трансцендентные функции, как

тригонометрические, а также логарифмические и возведение в степень.

 

FPTAN(частичный тангенс)

ST <- X

ST1 <- Y, где Y/X = TAN(угол)

 

Эта команда позволяет вычислить все тригонометрические функции.

Исходное число - угол, выраженный в радианах, значение которого

должно быть в интервале 0 < угол < PI/4, - помещается в вершину

стека.Уменьшить угол до правильного значения можно с помощью

команды FPREM.Результатом является отношение Y/X, которое равно

тангенсу угла; Y замещает вершину стека, а затем в стек помещается

X.Другие тригонометрические функции можно вычислить с

использованием этих значений; например, косинус COS(угол) =

X/SQRT(X2 + Y2).

 

FPATAN(частичный арктангенс)

ST <- Arctan(Y/X) = Arctan(ST1/ST)

 

Эта функция дополняет предыдущую, FPTAN.Команда FPATAN

вычисляет угол в соответствии с отношением чисел ST1 и ST0.Она

извлекает из стека число X, а затем записывает результирующий угол

вместо числа Y в качестве новой вершины стека.Исходные значения

должны подчиняться неравенству

 

0 < Y < X < бесконечность

F2XM1(два в степени X минус 1)

ST <- 2ST - 1

 

Эта функция выполняет возведение в степень; она возводит 2 в

степень, указанную в вершине стека.Исходное число должно

находиться в диапазоне 0 <= ST <=0.5, и чтобы вычислить два в

степени, большей 0.5, эту команду нужно использовать вместе с

командой FSCALF.С помощью команд FLD, загружающих специальные

константы, программа может возвести в заданную степень также числа,

отличные от 2, для этого используются следующие формулы:

 

10**X = 2**(X*Log2(10))

e**X = 2**(X*Log2(e))

Y**X = 2**(X*Log2(Y))

 

Далее приводится пример возведения 10 в произвольную степень.

 

FYL2X (Y умножить на логарифм по основанию 2 от X)

ST <- Y*Log2(X) = ST1*Log2(ST)

 

Эта функция выполняет операцию логарифмирования.Она берет

логарифм по основанию 2 от содержимого вершины стека и затем

умножает его на элемент ST1.Команда FYL2X извлекает из стека

число X и замещает результат числом Y.Исходные числа должны

удовлетворять следующим соотношениям:

 

0 < X < бесконечности и - бесконечность < Y < бесконечности.

Эта функция позволяет вычислять логарифмы и по основаниям, отличным

от 2.Следующая формула:

 

Logn(2) * Log2(X)

 

вычисляет логарифм числа X по основанию n; значение Logn2

вычисляется как 1/(Log2n).

 

FYL2XP1(Y умножить на логарифм по основанию 2 от X+1)

ST <- Y*Log2(X+1) = ST1*Log2(ST+1)

 

Эта функция идентична функции FYL2X за исключением того, что к

X прибавляется 1.Функция FYL2XP1 накладывает более жесткие

ограничения на X, и предназначена для вычисления логарифмов чисел,

значения которых очень близки к 1.Эта функция дает наиболее

высокую точность, если

 

0 < ABS(X) < 1 - (корень из 2 )/2


 

Mail.ru