FICOM, FICOMP
Comparar Integer
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
DE /2 | FICOM m16int | Valido | Valido | Compare ST(0) con m16int. | |
DA /2 | FICOM m32int | Valido | Valido | Compare ST(0) con m32int. | |
DE /3 | FICOMP m16int | Valido | Valido | Compare ST(0) con m16int y registro de pilas pop. | |
DA /3 | FICOMP m32int | Valido | Valido | Comparar ST(0) con m32int y pop stack register. |
Coste medido
Cargando las mediciones de arch-data...
Descripción
Compara el valor en ST(0) con un entero operando de origen y establece las banderas de código de condiciones C0, C2, y C3 en la palabra de estado FPU según los resultados (ver tabla abajo). El valor entero se convierte en formato coma flotante de doble precisión antes de hacer la comparación.
Resultados FICOM/FICOMP
| Estado | C3 | C2 | C0 |
|---|---|---|---|
| > SRC | 0 | 0 | 0 |
| < SRC | 0 | 0 | 1 |
| = SRC | 1 | 0 | 0 |
| Desordenadas | 1 | 1 | 1 |
Operación
CASE (relation of operands) OF
ST(0) > SRC: C3, C2, C0 := 000;
ST(0) < SRC: C3, C2, C0 := 001;
ST(0) = SRC: C3, C2, C0 := 100;
Unordered: C3, C2, C0 := 111;
ESAC;
IF Instruction = FICOMP
THEN
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.#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. |