FCOMI, FCOMIP, FUCOMI, FUCOMIP

Comparar valores en coma flotante y Set EFLAGS

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
DB F0+iFCOMI ST, ST(i)ValidoValidoCompare ST(0) con ST(i) y establezca banderas de estado en consecuencia.
DF F0+iFCOMIP ST, ST(i)ValidoValidoCompare ST(0) con ST(i), establecer banderas de estado en consecuencia, y la pila de registro pop.
DB E8+iFUCOMI ST, ST(i)ValidoValidoCompare ST(0) con ST(i), compruebe los valores ordenados y establezca banderas de estado en consecuencia.
DF E8+iFUCOMIP ST, ST(i)ValidoValidoCompare ST(0) con ST(i), compruebe los valores ordenados, establezca banderas de estado en consecuencia, y la pila de registro pop.

Coste medido

Cargando las mediciones de arch-data...

Descripción

Realiza una comparación no ordenada de los contenidos de los registros ST(0) y ST(i) y establece las banderas de estado ZF, PF y CF en el registro EFLAGS según los resultados (ver la tabla abajo). El signo de cero se ignora para las comparaciones, por lo que 0.0 es igual a +0.0.

FCOMI/FCOMIP/ FUCOMI/FUCOMIP Resultados

Resultados de comparación*ZFPFCF
ST0 > ST(i)000
ST0 < ST(i)001
ST0 = ST(i)100
Sin orden**111

Compatibilidad de arquitectura IA-32

Las instrucciones FCOMI/FCOMIP/FUCOMI/FUCOMIP fueron introducidas a la arquitectura IA-32 en los procesadores familiares P6 y no están disponibles en los procesadores IA-32 anteriores.

FCOMI/FCOMIP/ FUCOMI/FUCOMIP--Compare valores en coma flotante y Set EFLAGS

Operación

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 Instruction is FCOMI or 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 Instruction is FUCOMI or FUCOMIP
    THEN

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

                THEN
                      ZF, PF, CF := 111;

                ELSE (* ST(0) or ST(i) is SNaN or unsupported format *)
                       #IA;

                  IF FPUControlWord.IM = 1

                            THEN
                                  ZF, PF, CF := 111;

                      FI;
          FI;
FI;

IF Instruction is FCOMIP or FUCOMIP
    THEN
          PopRegisterStack;

FI;

FPU Flags Affected

C1                  Set to 0.

C0, C2, C3          Not affected.

Excepciones coma flotante

#IS                 Stack underflow occurred.
#IA                 (FCOMI or FCOMIP instruction) One or both operands are NaN values or have unsupported

formats.

(Instrucción FUCOMI o FUCOMIP) Uno o ambos operandos son valores SNaN (pero no QNaNs) o tienen formatos no definidos. Detección de un valor QNaN no genera una excepción de operando no válido.

FCOMI/FCOMIP/ FUCOMI/FUCOMIP--Compare valores en coma flotante y Set EFLAGS

Excepciones

Modo protegido
#NMCR0.EM[bit 2] o CR0.TS[bit 3] = 1.
#MFSi hay una excepción x87 FPU pendiente.
#UDSi se utiliza el prefijo LOCK.
Modo real
Las mismas excepciones que en modo protegido.
Modo virtual-8086
Las mismas excepciones que en modo protegido.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
Las mismas excepciones que en modo protegido.

Fuentes