Команды трансцендентных функций
Сопроцессор имеет ряд команд, предназначенных для вычисления значений тригонометрических функций, таких как синус, косинус, тангенс, арктангенс, а также значений логарифмических и показательных функций.
Значения аргументов в командах, вычисляющий результат тригонометрических функций, должны задаваться в радианах.
Команды трансцендентных функций:
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 =у log 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 выталкивает из стека значения х и у.
Дата добавления: 2015-04-15; просмотров: 1178;