FBSTP

Tienda BCD Integer y Pop

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
DF /6FBSTP m80bcdValidoValidoStore ST(0) en m80bcd y pop ST(0).

Coste medido

Cargando las mediciones de arch-data...

Descripción

Convierte el valor en el registro ST(0) en un entero BCD de 18 dígitos, almacena el resultado en el operando de destino y abre la pila de registro. Si el valor fuente es un valor no integrado, se redondea a un valor entero, según el modo de redondeo especificado por el campo RC de la palabra de control FPU. 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.

El operando de destino especifica la dirección donde se almacena el primer valor de destino byte. El valor BCD (incluyendo su bit de signo) requiere 10 bytes de espacio en memoria.

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

Resultados FBSTP

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

Operación

DEST := BCD(ST(0));
PopRegisterStack;

FPU Flags Affected

C1                   Set to 0 if stack underflow occurred.

                     Set if result was rounded up; cleared otherwise.

C0, C2, C3           Undefined.

Excepciones coma flotante

#IS     Stack underflow occurred.
#IA     Converted value that exceeds 18 BCD digits in length.

Operando de origen es un SNaN, QNaN, +/-, o en un formato sin soporte.

#P      Value cannot be represented exactly in destination format.

Excepciones

Modo protegido
#GP(0)Si un registro de segmento está siendo cargado con un selector de segmento que apunta a 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 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