logo

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

Система команд 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

FDIVRP

Инверсное деление с извлечением из стека

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

IS

IA

D

Z

O

U

P

*

*

*

*

*

*

*

 

Код

Команда

Описание

Проц.

Пример

D8 /7

FDIVR m32real

ST(0) = m32real / ST(0)

8087

fdivr dword ptr [si]

DC /7

FDIVR m64real

ST(0) = m64real / ST(0)

8087

fdivr qword ptr [bx]

D8 F8+i

FDIVR ST,ST(i)

ST(0) = ST(i) / ST(0)

8087

fdivr ST,ST(4)

DC F0+i

FDIVR ST(i),ST

ST(i) = ST(0) / ST(i)

8087

fdivr ST(2),ST

DE F0+i

FDIVRP ST(i),ST

ST(i) = ST(0) / ST(i), верхний элемент выталкивается из регистрового стека

8087

fdivrp ST(3),ST

DE F1

FDIVRP

ST(1) = ST(0) / ST(1), верхний элемент выталкивается из регистрового стека

8087

fdivrp ST(1),ST

DE /7

FIDIVR m16int

ST(0) = m16int / ST(0)

8087

fidivr word ptr [si]

DA /7

FIDIVR m32int

ST(0) = m32int / ST(0)

8087

fidivr dword ptr [bp]

Описание:

Команды инверсного деления делят операнд-источник на операнд-назначение (в однооперандных формах команд инверсного деления в качестве операнда-назначения используется ST) и возвращают частное на место операнда-назначения. Команда FDIVRP, кроме этого, выталкивает из регистрового стека FPU верхний элемент (ST). Если в мнемонике команды FDIVRP не записано никакого операнда, то ST делится на ST(1).

Если операнд-источник находится в памяти, то он может быть в представлен форматах: короткого вещественного, длинного вещественного, целого слова или короткого целого, перед выполнением операции он автоматически приводится к временному вещественному формату.

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

Если операция инверсного деления вызывает исключение #Z (деление на нуль) и соответствующий бит маски сброшен (генерация прерывания разрешена), то результат операции в операнде-назначении не сохраняется. Если исключение #Z имеет место при установленном бите маски (генерация прерывания запрещена), то в операнд-назначение возвращается бесконечность со знаком, равным ИСКЛЮЧАЮЩЕМУ ИЛИ знаков операндов.

В таблице 6.150. приведены возвращаемые командами инверсного деления значения для различных классов операндов, а также случаи, когда возникают исключения #IA и #Z.

Таблица 6.150. Значения, возвращаемые командами FDIVR, FDIVRP, FIDIVR для различных классов операндов

SRCDEST

-INF

-F

-0

+0

+F

+INF

NaN

-INF

#IA

+INF

+INF

-INF

-INF

#IA

NaN

-F

+0

+F

#Z

#Z

-F

-0

NaN

-I

+0

+F

#Z

#Z

-F

-0

NaN

-0

+0

+0

#IA

#IA

-0

-0

NaN

+0

-0

-0

#IA

#IA

+0

+0

NaN

+I

-0

-F

#Z

#Z

+F

+0

NaN

+F

-0

-F

#Z

#Z

+F

+0

NaN

+INF

#IA

-INF

-INF

+INF

+INF

#IA

NaN

NaN

NaN

NaN

NaN

NaN

NaN

NaN

NaN

               

I - Конечное целое значение

         

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

       

 

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

Операция:

IF DEST = 0

THEN

  #Z;

ELSE

  IF Команда FIDIVR

  THEN

     DEST = ConvertExtendedReal(SRC) / DEST;

  ELSE (* Операнд-источник представлен в вещественном формате *)

     DEST = SRC / DEST;

  FI;

FI;

IF Команда FDIVRP

THEN

  PopRegisterStack;

FI;

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

#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#NM, если CR0.EM = 1 или CR0.TS = 1.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

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

#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.
#NM, если CR0.EM = 1 или CR0.TS = 1.

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

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.

Замечание:

В процессорах, поддерживающих стандарт IEEE-754 (Intel387, Intel486,…) операция инверсного деления с использованием денормализованных операндов при определенных условиях может вызвать исключение #U. Аналогичная ситуация на математических сопроцессорах Intel287 и 8087, не отвечающих стандарту IEEE-754, приводит к исключению #IA.

Некоторые ассемблеры поддерживают для безоперандной версии команды FDIVRP мнемонику FDIVR. Т.е. безоперандная мнемоника всегда вызывает выталкивание из стека верхнего элемента.


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




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

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

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