Меню сайта

Урок 123. Степенные и тригонометрические функции

Оставшаяся группа команд сопроцессора 8087выполняет вычисления
— — — сложных математических функций. — Эти команды позволяют микросхеме
— — — 8087 вычислять арифметические выражения,требующие логарифмов,
— — — экспонент и тригонометрическихфункций. — На Фиг. 7.22 изображен
— — — список этих команд. — В этом списке нет тех операций, которые естьу
— — — карманного калькулятора. — Конструкторы процессора 8087 не смогли
— — — реализовать все нужные функции на одномкристале, так как это
— — — оказалось слишком сложным. — — — — — Вместо этого они создали набор функций
— — — более низкого уровня, из которых можнопрограммно построить функции
— — — калькулятора. — Например, таких тригонометрических функций как синус

— — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — -1/1/80 04:04:28
— — — — — — — — -Фиг. 7.22 Арифметические команды над вершиной стека 8087 — — — — Page — 1-1

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

— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE,DS:CODE

— — — — — — — — — -0000 — 9B D9 FA — — — — — — — — — — — — — — — — — — — FSQRT
— — — — — — — — — -0003 — 9B D9 FD — — — — — — — — — — — — — — — — — — — FSCALE
— — — — — — — — — -0006 — 9B D9 F8 — — — — — — — — — — — — — — — — — — — FPREM
— — — — — — — — — -0009 — 9B D9 FC — — — — — — — — — — — — — — — — — — — FRNDINT
— — — — — — — — — -000C — 9B D9 F4 — — — — — — — — — — — — — — — — — — — FXTRACT
— — — — — — — — — -000F — 9B D9 E1 — — — — — — — — — — — — — — — — — — — FABS
— — — — — — — — — -0012 — 9B D9 E0 — — — — — — — — — — — — — — — — — — — FCHS
— — — — — — — — — -0015 — 9B D9 F2 — — — — — — — — — — — — — — — — — — — FPTAN
— — — — — — — — — -0018 — 9B D9 F3 — — — — — — — — — — — — — — — — — — — FPATAN
— — — — — — — — — -001B — 9B D9 F0 — — — — — — — — — — — — — — — — — — — F2XM1
— — — — — — — — — -001E — 9B D9 F1 — — — — — — — — — — — — — — — — — — — FYL2X
— — — — — — — — — -0021 — 9B D9 F9 — — — — — — — — — — — — — — — — — — — FYL2XP1

— — — — — — — — — -0024 — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — -Фиг. 7.22 Арифметические команды над вершиной стека 8087
— — — и косинус нет- вместо этих функций естьфункция частичного
— — — тангенса. -Эта функция вычисляет отношение, равное тангенсу угла.
— — — Из этого отношения программа можетопределить синус, косинус,
— — — тангенс и любую другую тригонометрическуюфункцию. — — — — — Из обратных
— — — тригонометрических функций есть операциячастичного арктангенса,
— — — которая берет значения отношения чисел ивычисляет угол этого
— — — тангенса. -Эта частичная функция позволяет сконструировать
— — — арксинус, арккосинус и другие функции, неимея их в явном виде.
— — — — — Ниже приведен список команд этой группы скоротким комментарием
— — — работы каждой команды. — Ни у одной из этих команд не пишутся
— — — операнды, так как все они работают свершиной стека, и возможно,
— — — также с элементом ST1.

— — — — -FSQRT — — (квадратный — корень)
— — — — — ST — — — квадратныйкорень из (ST)
— — — — — ST — — — — -должно быть неотрицательно.
— — — — — FSCALE -(масштабирование) ST &lt— ST * 2ST1

— — — — — Эта команда необхо
дима для возведения встепень. — Другая, и
— — — притом единственная, функция возведения встепень имеет ограничения
— — — на значение показателя. — Эта команда возводит 2 в степень, равную
— — — целому числу. — Далее будет приведен пример возведения 10 в
— — — произвольную степень.
— — — — — FPREM (частичный остаток)
— — — — — ST &lt— ST mod ST1 — (частичный)

— — — — — Полностью операцию деления по заданномумодулю команда FPREM не
— — — выполняет. — — — Этакоманда за один раз уменьшает содержимое вершины
— — — стека максимум на 264. — Команда выполняет нахождение истинного
— — — остатка и требует очень много времени дляуменьшения большого числа
— — — по очень маленькому основанию. — Максимально уменьшая число в
— — — течение каждого выполнения команды,программист может разрешить
— — — прерывания в течение всей операции поискаостатка. — — — — — Если функция не
— — — завершена, команда FPREM устанавливаетфлаг C2 равным 1, а когда
— — — завершает вычисление остатка, тоустанавливает другие три флага C3,
— — — C1 и C0 равными трем младшим битамчастного. — Когда команда FPREM
— — — используется в тригонометрическихпримитивах для ограничения
— — — величины угла, это оказывается необходимымдля определения октанта
— — — первоначального угла. — Чтобы продемонстрировать работу этой
— — — команды, мы далее приведем примертригонометрических вычислений.

— — — — — FRNDIN — — — — — — — T — (округлениедо целого)
— — — — — — — -ST &lt— Integer(ST)

— — — — — Эта команда округляет текущее содержимоевершины стека до
— — — целого числа. — Текущее управляющее слово определяет направление
— — — округления.

— — — — — FXTRACT — — -(извлечение)
— — — — — — — — -ST &lt— дробная часть ST
— — — — — — — — -ST1 — — показатель степени двойкиST
— — — — — Эта команда разбивает текущую вершинустека на компоненты.
— — — Аргументом этой функции является вершинастека. — Значение
— — — показателя степени замещает содержимоевершины стека, а затем
— — — дробная часть аргумента помещается в стеки становится новой
— — — вершиной стека. — Действия этой команды FXTRACT обратны действиям
— — — команды FSCALE. — Если в вершине стека находится некоторое число, то
— — — выполнение последовательно команд FXTRACTи FSCALE оставляет в
— — — вершине стека то же число. — — — — — Но команда FSCALE не удаляет из стека
— — — показатель степени, так что теперь в стекедополнительно окажется
— — — еще одно число.

— — — — — FABS — -(абсолютная величина)
— — — — — -ST &lt— абсолютное значение ST

— — — — — Эта команда устанавливает у числа ввершине стека знаковый
— — — разряю в нуль (что соответствуетположительному значению).

— — — — — FCHS — -(смена знака)
— — — — — -ST &lt— -ST

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

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

— — — — — FPTAN -(частичный тангенс)
— — — — — -ST &lt— X
— — — — — -ST1 &lt— Y, где Y/X = TAN(угол)

— — — — — Эта команда позволяет вычислить всетригонометрические функции.
— — — Исходное число — угол, выраженный врадианах, значение которого
— — — должно быть в интервале 0 &lt- угол &lt-PI/4, — помещается в вершину
— — — стека. -Уменьшить угол до правильного значения можно с помощью
— — — команды FPREM. — Результатом является отношение Y/X, которое равно
— — — тангенсу угла- Y замещает вершину стека, азатем в стек помещается
— — — X. — — — — — Другиетригонометрические функции можно вычислить с
— — — использованием этих значений- например,косинус COS(угол) =
— — — X/SQRT(X2 + Y2).

— — — — — FPATAN — — — — — (частичныйарктангенс)
— — — — — — -ST &lt— Arctan(Y/X) = Arctan(ST1/ST)

— — — — — Эта функция дополняет предыдущую,FPTAN. — Команда FPATAN
— — — вычисляет угол в соответствии с отношениемчисел ST1 и ST0. — Она
— — — извлекает из стека число X, а затемзаписывает результирующий угол
— — — вместо числа Y в качестве новой вершиныстека. — Исходные значения
— — — должны подчинять
ся неравенству

— — — — — 0 &lt- Y &lt- X &lt- бесконечность
— — — — — F2XM1 -(два в степени X минус 1)
— — — — — — -ST &lt— 2ST — 1

— — — — — Эта функция выполняет возведение встепень- она возводит 2 в
— — — степень, указанную в вершине стека. — Исходное число должно
— — — находиться в диапазоне 0 &lt-= ST&lt-=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 &lt— Y*Log2(X) = ST1*Log2(ST)

— — — — — Эта функция выполняет операциюлогарифмирования. — Она берет
— — — логарифм по основанию 2 от содержимоговершины стека и затем
— — — умножает его на элемент ST1. — Команда FYL2X извлекает из стека
— — — число X и замещает результат числомY. — Исходные числа должны
— — — удовлетворять следующим соотношениям:

— — — — — 0 &lt- X &lt- бесконечности и — бесконечность&lt- Y &lt- бесконечности.
— — — Эта функция позволяет вычислять логарифмыи по основаниям, отличным
— — — от 2. -Следующая формула:

— — — — — Logn(2) * Log2(X)

— — — — — вычисляет логарифм числа X по основанию n-значение Logn2
— — — вычисляется как 1/(Log2n).

— — — — — FYL2XP1 -(Y умножить на логарифм по основанию 2 от X+1)
— — — — — — — -ST &lt— Y*Log2(X+1) = ST1*Log2(ST+1)

— — — — — Эта функция идентична функции FYL2X заисключением того, что к
— — — X прибавляется 1. — Функция FYL2XP1 накладывает более жесткие
— — — ограничения на X, и предназначена длявычисления логарифмов чисел,
— — — значения которых очень близки к 1. — — — Эта функция дает наиболее
— — — высокую точность, если

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

Категория: Программирование на Ассемблере | Дата: 15.03.13

Меню раздела
Блок