FCMOV es un f punto loating c onditional mov correo código de operación de la Intel x86 arquitectura, introducido por primera vez en Pentium Pro procesadores. Copia el contenido de uno de los registros de pila de coma flotante, dependiendo del contenido del registro de bandera de enteros EFLAGS , al registro ST (0) (parte superior de la pila). Hay 8 variantes de la instrucción seleccionadas por los códigos de condición que deben configurarse para que la instrucción realice el movimiento.
Similar a la instrucción CMOV , FCMOV permite que se realicen algunas operaciones condicionales sin la sobrecarga de ramificación habitual . [1] Sin embargo, tiene una latencia más alta que las instrucciones de bifurcación condicionales. [2] Por lo tanto, es más útil para operaciones condicionales o comparativas simples pero impredecibles, donde puede proporcionar ganancias sustanciales en el rendimiento.
La instrucción se usa generalmente con la instrucción FCOMI o el modismo FCOM - FSTSW - SAHF para establecer los códigos de condición relevantes basados en el resultado de una comparación de punto flotante.
Variantes
Esta tabla muestra las variantes de las instrucciones FCMOV. [1] El primer operando es siempre el registro ST (0) (equivalentemente, la parte superior de la pila de coma flotante). La columna Opcode indica una secuencia de dos bytes donde el segundo byte es un valor base que indica el número del registro de pila de coma flotante que se utilizará para el segundo operando. Agregue el número deseado para completar el valor del código de operación correspondiente.
Código de operación | Mnemotécnico | Significado | Condición |
---|---|---|---|
DA C0 + i | FCMOVB | Mover si abajo | Llevar conjunto de bandera |
DA C8 + i | FCMOVE | Mover si es igual | Conjunto de bandera cero |
DA D0 + i | FCMOVBE | Mover si es inferior o igual | Llevar bandera o conjunto de bandera cero |
DA D8 + i | FCMOVU | Mover si no está ordenado | Conjunto de indicadores de paridad |
DB C0 + i | FCMOVNB | Mover si no está abajo | Llevar bandera despejada |
DB C8 + i | FCMOVNE | Mover si no es igual | Bandera cero borrada |
DB D0 + i | FCMOVNBE | Mover si no es inferior o igual | Bandera de transporte y bandera cero despejadas |
DB D8 + i | FCMOVNU | Mover si no está desordenado | Indicador de paridad borrado |