logo

Воскресенье 04 Декабрь 2016 (GMT+0300)

Главная Система команд x86 Система команд FPU FSCALE
Система команд 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

Операция:

ST = ST * 2ST(1);

Описание:

Команда 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 или представлен в неподдерживаемом формате.

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

#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



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

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

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