Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
PFRSQRT
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
Код/Суфф. |
|||
0F 0F / 97 |
PFRSQRT mm,mm/m64 |
Вычислить приблизительное значение обратной величины квадратного корня для младшего упакованного вещественного из mm/m64, результат поместить в оба элемента mm |
pfrsqrt mm6,mm5 |
Описание:
Команда PFRSQRT оперирует только с младшим двойным словом (в формате короткого вещественного) 64-битного операнда-источника. Она возвращает оценочное (приблизительное) значение обратного значения квадратного корня исходного операнда. Значение результата дублируется в обоих коротких вещественных элементах 64-разрядного операнда-назначения.
Операндом-назначением является MMX-регистр. Операндом-источником может быть как MMX-регистр, так и операнд в памяти.
Исходный операнд в формате короткого вещественного имеет 24-битную мантиссу, возвращаемый результат также представляется в формате короткого вещественного, но точен только в старших 15 битах.
Если значение исходного операнда меньше нуля, то при вычислениях оно трактуется как положительное, а результату присваивается знак исходного опеитранда. Если значение исходного операнда равно нулю, то результат равен наибольшему (для +0) или наименьшему (для –0) возможному для формата коротких вещественных значению.
Если операнд-источник представлен в неподдерживаемом формате, то результат неопределен.
Увеличение точности результата (до полных 24 бит мантиссы) требует использования двух дополнительных команд (PFRSQIT1 и PFRCPIT2). При этом значение, возвращаемое командой PFRSQRT, передается как один из операндов в команду PFRSQIT1 и в команду PFRDPIT2 (см. описание команд PFRCPIT1 и PFRCPIT2).
Следующий пример иллюстрирует использование команды PFRSQRT при вычислении точного (все 24 бита мантиссы) значения a = sqrt(b).
X0 = PFRSQRT(b)
X1 = PFMUL(X0,X0)
X2 = PFRSQIT1(b,X1)
X3 = PFRCPIT2(X2,X0)
a = PFMUL(b,X3)
Операция:
DEST[31:0] = 1/sqrt(SRC[31:0]) ± δ;
DEST[63:32] = 1/sqrt(SRC[31:0]) ± δ;
Особые ситуации защищенного режима:
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru