Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FPTAN
Влияние команды на флаги и форматы команды:
* |
* |
* |
|
|
* |
* |
D9 F2 |
FPTAN |
ST(0) = tg(ST(0)), затем загрузить в регистровый стек значение 1.0 |
8087 |
fptan |
Описание:
Команда FPTAN замещает содержимое ST значением tg(ST) и затем помещает 1.0 в стек FPU. Входное значение в ST выражается в радианах и должно лежать в диапазоне |X| < 263.
Если операнд в ST находится вне приемлемого диапазона, то устанавливается флаг C2, и ST остается неизмененным (в противном случае флаг C2 сбрасывается), исключения #IA не возникает. Программа далее должна уменьшить величину операнда до абсолютного значения, меньшего чем 263. Это можно сделать путем вычитания подходящего целого, умноженного на 2p.
Исключение #IA возникает, если операнд SNaN, ±∞ или представлен в неподдерживаемом формате. Если #IA имеет место, когда соответствующий бит маски в CW установлен, то в результате операции в ST и ST(1) будет находиться неопределенность QNaN.
Флаги C0, C3 регистра SW после выполнения команды неопределены. В случае возникновения стековой ошибки #IS, флаг C1 устанавливается равным 1 при переполнении регистрового стека и сбрасывается, если ST помечен как пустой. Этот флаг также указывает направление округления в случае возникновения исключения #P (неточный результат): 0 – округление к меньшему, 1 – округление к большему, если C2=1, значение флага C1 неопределено.
Тот факт, что FPTAN помещает 1.0 в стек FPU после вычисления tg(ST), поддерживает совместимость с математическими сопроцессорами 8087, Intel287 и упрощает вычисление других тригонометрических функций. Например, котангенс (который является обратной величиной тангенса) может быть вычислен при помощи выполнения команды FDIVR сразу после FPTAN.
Операция:
IF (Операнд в диапазоне)
THEN
C2 = 0;
ST = tan(ST);
Декремент указателя вершины стека FPU;
ST = 1.0;
ELSE
C2 = 1;
FI;
Замечание:
Для сопроцессоров Intel286 и 8087 входное значение операнда в ST(0) ограничено |X| < p/4, поэтому оно предварительно должно корректироваться командой FPREM.
В случае возникновения ошибки, когда исключение #IA замаскировано, процессоры Intel387, Intel486, … помещают в ST и ST(1) неопределенность QNAN (это обеспечивает совместимость со стандартом IEEE-754), сопроцессоры Intel287 и 8087 в этом случае помещают неопределенность QNaN только в ST, а в ST(1) возвращается исходный операнд (бывший ранее в ST).
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru