logo

Главная Система команд x86 Система команд FPU FSCALE

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

FSCALE

Масштабировать

Влияние команды на флаги и форматы команды:

IS

IA

D

Z

O

U

P

*

*

*

 

*

*

*

 

Код

Команда

Описание

Проц.

Пример

D9 FD

FSCALE

ST(0) = ST(0) * 2ST(1)

8087

fscale

Описание:

Команда FSCALE умножает ST на 2 в степени ST(1) и помещает результат в ST, если входное значение в ST(1) не целочисленное, то FSCALE использует ближайшее целое меньшее по величине, т.е. обрезает значение в сторону нуля. Если получаемое целое равно нулю, то значение в ST не изменяется. Таким образом, FSCALE обеспечивает быстрое умножение или деление на целые степени двойки.

В таблице 6.177. приведены значения, возвращаемые командой FSCALE для различных классов операндов.

Таблица 6.177. Значения, возвращаемые командой FSCALE для различных классов операндов

STST(1)

-N

+0

+N

-INF

-INF

-INF

-INF

-F

-F

-F

-F

-0

-0

-0

-0

+0

+0

+0

+0

+F

+F

+F

+F

+INF

+INF

+INF

+INF

NaN

NaN

NaN

NaN

       

N - Целое значение

   

F - Конечное вещественное значение

 

В большинстве случаев, команда FSCALE не оказывает влияния на поле мантиссы, изменяется только порядок. Но для денормализованных операндов мантисса также изменяется, а результат приводится к нормализованному виду.

Команда FSCALE может быть использована как инверсия команды FXTRACT. В этом случае, так как FSCALE не выталкивает из стека значение порядка, то после FSCALE надо применить команду FSTP ST(1).

Флаги C0, C2, C3 регистра SW после выполнения команды неопределены, флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS, а также указывает направление округления в случае возникновения исключения #P (неточный результат): 0 – округление к меньшему, 1 – округление к большему.

Исключение #IA возникает, если входной операнд SNaN или представлен в неподдерживаемом формате.

Операция:

ST = ST * 2ST(1);

Особые ситуации защищенного режима:

#NM, если CR0.EM = 1 или CR0.TS = 1.

Особые ситуации режима реальной адресации:

#NM, если CR0.EM = 1 или CR0.TS = 1.

Особые ситуации режима V86:

#NM, если CR0.EM = 1 или CR0.TS = 1.

Замечание:

В процессорах Intel387, Intel486, … диапазон входного операнда не ограничен. Если 0 < |ST(1)| < 1, масштабным множителем будет нуль и ST(0) останется неизменным. Если округленный результат неточен, или если произошла потеря точности (#U замаскировано), возникает исключение #P. В Intel287 и 8087 диапазон входного операнда ограничен. Если 0 < |ST(1)| < 1, результат неопределен и исключения не устанавливаются. Влияние на программное обеспечение заключается в том, что различные результаты получаются для входного 0 < |ST(1)| < 1. Это изменение было введено для расширения диапазона масштабирования.


Входит в группу команд: Система команд FPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники