FIST, FISTP

Store Integer

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
DF /2FIST m16intValidoValidoStore ST(0) en m16int.
DB /2FIST m32intValidoValidoStore ST(0) en m32int.
DF /3FISTP m16intValidoValidoStore ST(0) en m16int y la pila de registro pop.
DB /3FISTP m32intValidoValidoStore ST(0) en m32int y la pila de registro pop.
DF /7FISTP m64intValidoValidoStore ST(0) en m64int y en la pila de registro pop.

Coste medido

Cargando las mediciones de arch-data...

Descripción

La instrucción FIST convierte el valor en el registro ST(0) a un entero firmado y almacena el resultado en el operando de destino. Los valores se pueden almacenar en formato entero de palabra o palabra doble. El operando de destino especifica la dirección donde se almacena el primer byte del valor de destino.

La instrucción FISTP realiza la misma operación que la instrucción FIST y luego aparece la pila de registro. Para abrir la pila de registro, el procesador marca el registro ST(0) como vacío y aumenta el puntero de pila (TOP) por 1. La instrucción FISTP también almacena valores en formato cuádpago entero.

La siguiente tabla muestra los resultados obtenidos al almacenar varias clases de números en formato entero.

Resultados FIST/FISTP

-o valor demasiado grande para el formato DEST*
F -1-I
-1 < F < -0**
-00
+00
+0<F<+1**
F+1+I
+o valor demasiado grande para el formato DEST*
Nan*

Operación

DEST := Integer(ST(0));

IF Instruction = FISTP

    THEN
          PopRegisterStack;

FI;

FPU Flags Affected

C1                         Set to 0 if stack underflow occurred.

                           Indicates rounding direction of if the inexact exception (#P) is generated: 0 := not roundup; 1
                           := roundup.

                           Set to 0 otherwise.

C0, C2, C3                 Undefined.

Excepciones coma flotante

#IS                        Stack underflow occurred.
#IA                        Converted value is too large for the destination format.

Operando de origen es un formato SNaN, QNaN, +/- o no compatible.

#P                         Value cannot be represented exactly in destination format.

Excepciones

Modo protegido
#GP(0)Si el destino se encuentra en un segmento no escrito. Si la dirección efectiva un operando de memoria está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS se utiliza para acceder a la memoria y contiene un NULL selector de segmento.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS.
#NMCR0.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.
#UDSi se utiliza el prefijo LOCK.
Modo real
#GPSi un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SSSi un operando de memoria dirección efectiva está fuera del límite del segmento SS.
#NMCR0.EM[bit 2] o CR0.TS[bit 3] = 1.
#UDSi 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.
#NMCR0.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.
#UDSi 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.
#NMCR0.EM[bit 2] o CR0.TS[bit 3] = 1.
#MFSi 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.
#UDSi se utiliza el prefijo LOCK.

Fuentes