Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
FXTRACT
Влияние команды на флаги и форматы команды:
* |
* |
* |
* |
|
|
|
D9 F4 |
FXTRACT |
Выделить в значении ST(0) порядок и мантиссу, сохранить порядок в ST(0) и загрузить мантиссу в регистровый стек |
8087 |
fxtract |
Описание:
Команда FXTRACT выделяет в значении ST(0) его порядок и мантиссу. Порядок замещает исходный операнд в ST(0), а затем мантисса загружается в стек.
После выполнения команды FXTRACT новая вершина стека ST(0) содержит значение мантиссы исходного операнда, которое представлено вещественным числом. Знак этого числа такой же, как и у исходного операнда, его порядок равен нулю (значение 0x3FFFh), а мантисса идентична мантиссе исходного операнда. При этом ST(1) содержит значение несмещенного порядка исходного операнда, который выражен вещественным числом.
Чтобы проиллюстрировать действие FXTRACT, предположим, что ST содержит число с показателем равным +4 (т.е. поле порядка содержит 0x4003h). После выполнения FXTRACT, ST(1) будет содержать вещественное число +4.0, а именно: положительный знак, в поле порядка значение 0x4001h (не смещенное +2), поле мантиссы содержит 1.00...00b. Другими словами, значение в ST(1) будет равно 1.0 * 22= 4. Если ST содержит операнд, с порядком равным -7 (т.е. поле порядка содержит 0x3FF8h), тогда FXTRACT возвратит в ST(1) порядок равный -7.0 (-1.75 * 22= -7.0). В обоих случаях после FXTRAСT поля знака и мантиссы в ST будут такими же, что и у исходного операнда, а поле порядка будет содержать 0x3FFFh (нулевой порядок).
Если исходный операнд равен нулю (с любым знаком), возникает исключение #Z. Если при этом исключение #Z замаскировано, то FXTRACT возвращает -∞ в ST(1) и нуль со знаком равным знаку исходного операнда в ST(0).
Исключение #IA возникает, если любой из операндов SNaN или представлен в неподдерживаемом формате.
Операция:
TEMP = Значение ST;
ST = Порядок ST;
Декремент указателя вершины стека FPU;
ST = TEMP;
Замечание:
Команда FXTRACT на процессорах Intel387, Intel486, … , если исходным операндом является нуль, вызывается исключение #Z и в ST(1) заносится -∞. Если операндом является +∞, исключения не возникает.
Для сопроцессоров Intel287 и 8087, если операндом является нуль, в ST(1) заносится нуль, а исключения #Z не возникает. Если же исходным операндом является +∞, то возникает исключение #IA.
Это не влияет на программное обеспечение которое обычно обходит 0 и ∞. Изменение было рекомендовано IEEE-754 для полной поддержки функции logb(x).
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru