Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FSCALE
Влияние команды на флаги и форматы команды:
* |
* |
* |
|
* |
* |
* |
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);
Замечание:
В процессорах Intel387, Intel486, … диапазон входного операнда не ограничен. Если 0 < |ST(1)| < 1, масштабным множителем будет нуль и ST(0) останется неизменным. Если округленный результат неточен, или если произошла потеря точности (#U замаскировано), возникает исключение #P. В Intel287 и 8087 диапазон входного операнда ограничен. Если 0 < |ST(1)| < 1, результат неопределен и исключения не устанавливаются. Влияние на программное обеспечение заключается в том, что различные результаты получаются для входного 0 < |ST(1)| < 1. Это изменение было введено для расширения диапазона масштабирования.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru