Команды трансцендентных функций

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

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

Команды трансцендентных функций:

FCOS — команда вычисляет косинус угла, находящийся в вершине стека сопроцессора — регистре ST(0). Команда не имеет операндов. Результат возвращается в регистр st(0).

FSIN — команда вычисляет синус угла, находящийся в вершине стека сопроцессора — регистре ST(0). Команда не имеет операндов. Результат возвращается в регистр ST(0).

FSINCOS — команда вычисляет синус и косинус угла, находящиеся в вершине стека сопроцессора — регистре ST(0). Команда не имеет операндов. Результат возвращается в регистрах ST(0)и st(1). При этом синус помещается в ST(0), а косинус — в ST(1).

FPTAN — команда вычисляет частичный тангенс угла, находящийся в вершине стека сопроцессора — регистре ST(0). Команда не имеет операндов. Результат возвращается в регистрах ST(0)и ST(1).

FPRATAN — команда вычисляет частичный арктангенс угла, находящийся в вершине стека сопроцессора — регистре ST(0). Команда не имеет операндов. Результат возвращается в регистрах ST(0)и ST(1). (угол от 0 до пи/4)

Отметим еще две команды сопроцессора, FPREM и FPREM1.

Команда FPREM — команда получения частичного остатка от деления. Исходные значения делимого и делителя размещаются в стеке — делимое в ST(0), делитель в ST(1). Делитель рассматривается как некоторый модуль. Поэтому в результате работы команды получается остаток от деления по модулю. Но произойти это может не сразу, так как этот результат в общем случае достигается за несколько последовательных обращений к команде FPREM, если значения операндов сильно различаются. Физически работа команды заключается в реализации хорошо известного всем действия: деления в столбик. При этом каждое промежуточное деление осуществляется отдельной командой FPREM. Цикл, центральное место в котором занимает команда FPREM, завершается, когда очередная полученная разность в st(0)становится меньше значения модуля в ST(1). Судить об этом можно по состоянию флага с2 в регистре состояния SWR:

если С2 =0,то работа команды FPREM полностью завершена, так как разность в ST(0) меньше значения модуля в st(1); И если С2 =1,то необходимо продолжить выполнение команды FPREM, так как разность в ST(0) больше значения модуля в ST(1). Таким образом, необходимо анализировать флаг С2 в теле цикла. Для этого С2 записывается в регистр флагов основного процессора с последующим анализом его командами условного перехода. Другой способ заключается в сравнении ST(0) и st(1).

Важно отметить, то команда FPREM не соответствует последнему стандарту IEEE-754 на вычисления с плавающей точкой. По этой причине в систему команд сопроцессора 1387 была введена команда FPREM1,которая отличается от команды FPREM тем, что накладывается дополнительное требование на значение остатка в ST(0).Это значение не должно превышать половины модуля в ST(1). В остальном работа команды FPREM 1 аналогична работе FPREM.

Три трансцендентные команды:

Команда F2XM1 — Команда вычисления значения функции у = 2x-1 Исходное значение х размещается в вершине стека сопроцессора в регистре ST(0) и должно лежать в диапазоне -1<= х <=1. Результат у замещает х в регистре ST(0).

Команда FYL2X — команда вычисления значения функции 2 = у l og 2 (x). Исходное значение х размещается в вершине стека сопроцессора, а исходное значение у — в регистре sТ(1). Значение х должно лежать в диапазоне 0 < х < +°°, а значение у — в диапазоне -°° <y<+°°. Перед тем как осуществить запись результата z в вершину стека, команда FYL2X выталкивает значения х и у из стека и только после этого производит запись z в регистр ST(0).

Команда FYL2XP1 — команда вычисления значения функции z == у Iog 2 (x+1). Исходное значение х размещается в вершине стека сопроцессора — регистре ST(0), а исходное значение у — в регистре ST(1).Значение х должно лежать в диапазоне 0 <| х | < 1 -1/sqrt(2),а значение у — в диапазоне -°° < у <+°°. Перед тем как записать результат z в вершину стека — регистр ST(0), команда FYL2XP1 выталкивает из стека значения х и у.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: