FIST, FISTP
Store Integer
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
DF /2 | FIST m16int | Valido | Valido | Store ST(0) en m16int. | |
DB /2 | FIST m32int | Valido | Valido | Store ST(0) en m32int. | |
DF /3 | FISTP m16int | Valido | Valido | Store ST(0) en m16int y la pila de registro pop. | |
DB /3 | FISTP m32int | Valido | Valido | Store ST(0) en m32int y la pila de registro pop. | |
DF /7 | FISTP m64int | Valido | Valido | Store 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 | ** | |
| -0 | 0 | |
| +0 | 0 | |
| +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. |
#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. |