logo

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

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

FUCOMP

Неупорядоченно сравнить вещественные и извлечь один из стека

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

IS

IA

D

Z

O

U

P

*

*

*

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

D0 E0+i

FUCOM ST(i)

Сравнить ST(0) и ST(i)

Intel387

fucom ST(3)

DD E1

FUCOM

Сравнить ST(0) и ST(1)

Intel387

fucom

DD E8+i

FUCOMP ST(i)

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

Intel387

fucomp ST(4)

DD E9

FUCOMP

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

Intel387

fucomp

DA E9

FUCOMPP

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

Intel387

fucompp

Описание:

Команды неупорядоченного сравнения вещественных значений сравнивают вершину стека с операндом-источником, который должен быть регистром. По результатам сравнения устанавливаются биты условий C0, C2, C3 регистра SW. Команда FUCOMP, кроме этого, выталкивает из стека верхний элемент (ST). Команда FUCOMPP — два верхних элемента. Биты условий регистра SW аналогичны флагам регистра EFLAGS, они устанавливаются по результатам операций FPU, а их соответствие флагам приведено в таблице 6.192.

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

Флаги FPU

Флаги EFLAGS

C0

CF

C1

Нет

C2

PF

C3

ZF

 

Отличия между командами FCOM, FCOMP, FCOMPP и командами неупорядоченного сравнения FUCOM, FUCOMP, FUCOMPP заключаются в работе с операндами QNaN. FCOM, FCOMP и FCOMPP генерируют исключение #IA и устанавливают флаги в значение "несравнимо" (C0=1, C2=1, C3 = 1), если любой операнд команды NaN (SNaN или QNaN) или представлен в неподдерживаемом формате. Команды FUCOM, FUCOMP и FUCOMPP делают то же самое, кроме генерации исключения #IA для случая с операндами QNaN.

Биты условий устанавливаются в "несравнимо" (С1 C2 С3 = 111), только если исключение #I замаскировано. Флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS.

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

Операция:

CASE (Отношение операндов) OF

  ST > SRC: C3, C2, C0 = 000;

  ST < SRC: C3, C2, C0 = 001;

  ST = SRC: C3, C2, C0 = 100;

ESAC;

IF ST(0) or SRC = QNaN

THEN

  C3, C2, C0 = 111;

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

  #IA;

  IF FPUControlWord.IM = 1

  THEN

     C3, C2, C0 = 111;

  FI;

FI;

IF Команда FUCOMP

THEN

  PopRegisterStack;

FI;

IF Команда FUCOMPP

THEN

  PopRegisterStack;

  PopRegisterStack;

FI;

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

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

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

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

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

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


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




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

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

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