logo

Понедельник 05 Декабрь 2016 (GMT+0300)

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

FCOMI

Сравнить вещественные значения и по результату установить флаги в EFLAGS

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

IS

IA

D

Z

O

U

P

*

*

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

DB F0+i

FCOMI ST,ST(i)

Сравнить ST(0) и ST(i) и установить флаги ZF, PF, CF согласно результата

Pentium Pro

fcomi st,st(1)

DF F0+i

FCOMIP ST,ST(i)

Сравнить ST(0) и ST(i) и установить флаги ZF, PF, CF согласно результата, верхний элемент выталкивается из регистрового стека

Pentium Pro

fcomip st,st(5)

DB E8+i

FUCOMI ST,ST(i)

Сравнить ST(0) и ST(i) и установить флаги ZF, PF, CF согласно результата

Pentium Pro

fucomi st,st(1)

DF E8+i

FUCOMIP ST,ST(i)

Сравнить ST(0) и ST(i) и установить флаги ZF, PF, CF согласно результата, верхний элемент выталкивается из регистрового стека

Pentium Pro

fucomip st,st(2)

Операция:

CASE (relation of operands) OF

  ST(0) > ST(i): ZF, PF, CF = 000;

  ST(0) < ST(i): ZF, PF, CF = 001;

  ST(0) = ST(i): ZF, PF, CF = 100;

ESAC;

IF Команда FCOMI или FCOMIP

THEN

  IF ST(0) or ST(i) = NaN or unsupported format

  THEN

     #IA

     IF FPUControlWord.IM = 1

     THEN

        ZF, PF, CF = 111;

     FI;

  FI;

FI;

IF Команда FUCOMI или FUCOMIP

THEN

  IF ST(0) or ST(i) = QNaN, but not SNaN or unsupported format

  THEN

     ZF, PF, CF = 111;

  ELSE (* ST(0) или ST(i) в неподдерживаемом формате или SNaN *)

     #IA;

     IF FPUControlWord.IM = 1

     THEN

        ZF, PF, CF = 111;

     FI;

  FI;

FI;

IF Команды FCOMIP или FUCOMIP

THEN

  PopRegisterStack;

FI;

Описание:

Команды сравнения вещественных значений FCOMI, FCOMIP, FUCOMI, FUCOMIP сравнивают вершину стека с операндом-источником, который может быть регистром или операндом в памяти (коротким или длинным вещественным). По результатам сравнения устанавливаются не биты условий C0, C2, C3 регистра SW, а соответствующие флаги регистра EFLAGS (см. таблицу 6.142.).

Таблица 6.142. Соответствие между битами C0..C3 регистра SW
и битами регистра EFLAGS

Флаги FPU

Флаги EFLAGS

C0

CF

C1

Нет

C2

PF

C3

ZF

Команды FCOMIP и FUCOMIP, кроме этого, выталкивают из стека верхний элемент (ST).

Отличия между командами FCOMI, FCOMIP и командами неупорядоченного сравнения FUCOMI, FUCOMIP заключаются в работе с операндами QNaN. FCOMI и FCOMIP генерируют исключение #IA и устанавливают флаги в значение "несравнимо" (ZF = 1, PF = 1, CF = 1), если любой операнд команды NaN (SNaN или QNaN) или представлен в неподдерживаемом формате. Команды FUCOMI и FUCOMIP делают то же самое, кроме генерации исключения #IA для случая с операндами QNaN.

Если исключение #I не замаскировано, то флаги не устанавливаются перед вызовом обработчика исключений.

Флаг C1 регистра SW устанавливается равным 0 в случае возникновения стековой ошибки #IS.

Знак нуля игнорируется, так что -0.0 равен +0.0.

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


#NM, если CR0.EM = 1 или CR0.TS = 1.

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


#NM, если CR0.EM = 1 или CR0.TS = 1.

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


#NM, если CR0.EM = 1 или CR0.TS = 1.

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



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

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

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