FSTSW, FNSTSW

Tienda x87 FPU Status Word

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
9B DD /7FSTSW m2byteValidoValidoAlmacene FPU palabra estado en m2byte después de comprobar para las excepciones coma flotante pendientes.
9B DF E0FSTSW AXValidoValidoAlmacene la palabra de estado FPU en AX registro después de comprobar las excepciones coma flotante pendientes.
DD /7FNSTSW1 m2byteValidoValidoAlmacene la palabra FPU estado en m2byte sin consultar las excepciones coma flotante pendientes.
DF E0FNSTSW1 AXValidoValidoAlmacene la palabra de estado FPU en el registro AX sin consultar las excepciones coma flotante pendientes.

Coste medido

Cargando las mediciones de arch-data...

Descripción

Almacena el valor actual de la palabra estado x87 FPU en la ubicación de destino. El operando de destino puede ser una ubicación de memoria de dos bytes o el registro AX. Los cheques de instrucción FSTSW y descriptores pendientes desenmascarar las excepciones coma flotante antes de almacenar la palabra de estado; la instrucción FNSTSW no.

La forma FNSTSW AX de la instrucción se utiliza principalmente en ramificación condicional (por ejemplo, después de una instrucción de comparación FPU o una instrucción FPREM, FPREM1 o FXAM), donde la dirección de la rama depende del estado de las banderas de código de estado FPU. (Ver la sección titulada "Branching and Conditional Moves on FPU Condition Codes" en el capítulo 8 de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1.) Esta instrucción también se puede utilizar para invocar controladores de excepción (por examinar las banderas de excepción) en entornos que no utilizan interrupciones. Cuando se ejecuta la instrucción FNSTSW AX, el registro AX se actualiza antes de que el procesador ejecute otras instrucciones. El estado almacenado en el registro AX está garantizado por lo tanto desde la terminación de la instrucción FPU anterior.

El ensamblador emite dos instrucciones para la instrucción FSTSW (una instrucción FWAIT seguida de una instrucción FNSTSW), y el procesador ejecuta cada una de estas instrucciones por separado. Si se genera una excepción para cualquiera de estas instrucciones, el guardar EIP apunta a la instrucción que causó la excepción.

La operación de esta instrucción es la misma en modos no-64-bit y modo 64-bit.

Compatibilidad de arquitectura IA-32

Al operar un procesador Pentium o Intel486 en modo compatibilidad MS-DOS, es posible (bajo circunstancias inusuales) interrumpir una instrucción FNSTSW antes de ser ejecutado a descriptor una excepción FPU pendiente. Vea la sección titulada "No-Wait FPU Instrucciones pueden obtener FPU Interrupt in Window" en el Apéndice D del Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1, para una descripción de estas circunstancias. Una instrucción FNSTSW no se puede interrumpir de esta manera en procesadores Intel posteriores, excepto para el procesador Intel QuarkTM X1000.

Operación

DEST := FPUStatusWord;

FPU Flags Affected

The C0, C1, C2, and C3 are undefined.

Excepciones coma flotante

None.

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.
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