FCOM, FCOMP, FCOMPP
Compare valores en coma flotante
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
D8 /2 | FCOM m32fp | Valido | Valido | Compare ST(0) con m32fp. | |
DC /2 | FCOM m64fp | Valido | Valido | Compare ST(0) con m64fp. | |
D8 D0+i | FCOM ST(i) | Valido | Valido | Compare ST(0) con ST(i). | |
D8 D1 | FCOM | Valido | Valido | Compare ST(0) con ST(1). | |
D8 /3 | FCOMP m32fp | Valido | Valido | Compare ST(0) con m32fp y la pila de registro pop. | |
DC /3 | FCOMP m64fp | Valido | Valido | Compare ST(0) con m64fp y la pila de registro pop. | |
D8 D8+i | FCOMP ST(i) | Valido | Valido | Compare ST(0) con ST(i) y la pila de registro pop. | |
D8 D9 | FCOMP | Valido | Valido | Compare ST(0) con ST(1) y la pila de registro pop. | |
DE D9 | FCOMPP | Valido | Valido | Compare ST(0) con ST(1) y la pila de registro pop dos veces. |
Coste medido
Cargando las mediciones de arch-data...
Descripción
Compara el contenido del registro ST(0) y el valor fuente y establece las banderas de código de condiciones C0, C2, y C3 en la palabra estado FPU según los resultados (ver la tabla abajo). El operando de origen puede ser un registro de datos o una ubicación de memoria. Si no se da operando de origen, el valor en ST(0) se compara con el valor en ST(1). El signo de cero es ignorado, por lo que 0.0 es igual a +0.0.
FCOM/FCOMP/FCOMPP Resultados
| Estado | C3 | C2 | C0 |
|---|---|---|---|
| ST(0) > SRC | 0 | 0 | 0 |
| ST(0) < SRC | 0 | 0 | 1 |
| ST(0) = SRC | 1 | 0 | 0 |
| Sin autorización* | 1 | 1 | 1 |
Operación
CASE (relation of operands) 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 = NaN or unsupported format
THEN
#IA
IF FPUControlWord.IM = 1
THEN
C3, C2, C0 := 111;
FI;
FI;
IF Instruction = FCOMP
THEN
PopRegisterStack;
FI;
IF Instruction = FCOMPP
THEN
PopRegisterStack;
PopRegisterStack;
FI;
FPU Flags Affected
C1 Set to 0.
C0, C2, C3 See table on previous page.Excepciones coma flotante
#IS Stack underflow occurred.#IA One or both operands are NaN values or have unsupported formats.El registro está marcado vacío.
#D One or both operands are denormal values.Excepciones
Modo protegido
#GP(0) | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS contiene un NULL selector de segmento. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#NM | CR0.EM[bit 2] o CR0.TS[bit 3] = 1. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si se utiliza el prefijo LOCK. |
Modo real
#GP | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#NM | CR0.EM[bit 2] o CR0.TS[bit 3] = 1. |
#UD | Si se utiliza el prefijo LOCK. |
Modo virtual-8086
#GP(0) | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#NM | CR0.EM[bit 2] o CR0.TS[bit 3] = 1. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada. |
#UD | Si se utiliza el prefijo LOCK. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#SS(0) | Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica. |
#GP(0) | Si la dirección de memoria está en forma no canónica. |
#NM | CR0.EM[bit 2] o CR0.TS[bit 3] = 1. |
#MF | Si hay una excepción x87 FPU pendiente. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si se utiliza el prefijo LOCK. |