Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FPATAN
Влияние команды на флаги и форматы команды:
* |
* |
* |
|
|
* |
* |
D9 F3 |
FPATAN |
ST(1) = arctg(ST(1)/ST(0)), верхний элемент выталкивается из регистрового стека |
8087 |
fpatan |
Описание:
Команда FPATAN вычисляет арктангенс выражения ST(1)/ST(0) и возвращает выраженный в радианах результат в ST(1). Результат имеет тот же знак, что и операнд из ST(1), и абсолютное значение меньшее p.
Тот факт, что FPATAN принимает два аргумента и возвращает арктангенс их отношения, упрощает вычисление других тригонометрических функций (например, арксинуса). Команда FPATAN фактически в качестве входных значений принимает координаты точки (X, Y), где X — абсцисса, помещаемая в ST(0), а Y — ордината, помещаемая в ST(1). Возвращаемая величина представляет собой угол между осью абсцисс и прямой, проходящей через центр координат и заданную точку. Когда входное значение Y положительно, то и возвращаемый угол положителен, и наоборот, кода Y отрицательно, возвращаемый угол тоже отрицателен.
Флаги C0, C2, C3 регистра SW после выполнения команды неопределены, флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS, а также указывает направление округления в случае возникновения исключения #P (неточный результат): 0 – округление к меньшему, 1 – округление к большему.
В таблице 6.167. приведены значения, возвращаемые командой FPATAN для различных классов операндов.
Таблица 6.167. Значения, возвращаемые командой FPATAN для различных классов операндов
SRCDEST |
-INF |
-F |
-0 |
+0 |
+F |
+INF |
NaN |
-INF |
-3π/4 |
-π/2 |
-π/2 |
-π/2 |
-π/2 |
-π/4 |
NaN |
-F |
-π |
-π...-π/2 |
-π/2 |
-π/2 |
-π/2…-0 |
-0 |
NaN |
-0 |
-π |
-π |
-π |
-0 |
-0 |
-0 |
NaN |
+0 |
+π |
+π |
+π |
+0 |
+0 |
+0 |
NaN |
+F |
+π |
+π…+π/2 |
+π/2 |
+π/2 |
+π/2…+0 |
+0 |
NaN |
+INF |
+3π/4 |
+π/2 |
+π/2 |
+π/2 |
+π/2 |
+π/4 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
F - Конечное вещественное значение |
Исключение #IA возникает, если любой из операндов SNaN или представлен в неподдерживаемом формате. Заметьте, что исключения #IA не возникает, когда операндами команды являются нули и бесконечности, несмотря на то, что операции деления нуль на нуль и бесконечности на бесконечность в их самостоятельной форме вызывают появление исключения. Дело в том, что выдаваемые командой FPATAN вещественные результаты являются совершенно корректными при вычислении заданной функции в комплексной форме.
Операция:
ST(1) = arctan(ST(1) / ST);
Pop(ST);
Замечание:
Для процессоров Intel387, Intel486, … никаких ограничений на диапазон принимаемых FPATAN аргументов не налагается. Для сопроцессоров Intel287 и 8087 существует ограничение 0≤|ST(0)|<|ST(1)|<+∞. Это не влияет на совместимость программного обеспечения и введено для расширения возможностей.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru