FBSTP
Tienda BCD Integer y Pop
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
DF /6 | FBSTP m80bcd | Valido | Valido | Store 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. |
#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. |