FSUBR, FSUBRP, FISUBR
Subtracto inverso
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
D8 /5 | FSUBR m32fp | Valido | Valido | Subtract ST(0) de m32fp y resultado de la tienda en ST(0). | |
DC /5 | FSUBR m64fp | Valido | Valido | Subtract ST(0) de m64fp y resultado de la tienda en ST(0). | |
D8 E8+i | FSUBR ST(0), ST(i) | Valido | Valido | Subtract ST(0) de ST(i) y resultado de almacén en ST(0). | |
DC E0+i | FSUBR ST(i), ST(0) | Valido | Valido | Subtract ST(i) from ST(0) and store result in ST(i). | |
DE E0+i | FSUBRP ST(i), ST(0) | Valido | Valido | Subtract ST(i) de ST(0), resultado de la tienda en ST(i), y registro de la pila pop. | |
DE E1 | FSUBRP | Valido | Valido | Subtract ST(1) from ST(0), store result in ST(1), and pop register stack. | |
DA /5 | FISUBR m32int | Valido | Valido | Subtract ST(0) de m32int y resultado de la tienda en ST(0). | |
DE /5 | FISUBR m16int | Valido | Valido | Subtract ST(0) de m16int y resultado de la tienda en ST(0). |
Coste medido
Cargando las mediciones de arch-data...
Descripción
Sustrae el operando de destino del operando de origen y almacena la diferencia en la ubicación de destino. El operando de destino es siempre un registro FPU; el operando de origen puede ser un registro o una ubicación de memoria. Operandos de origen en memoria puede estar en forma de precisión simple o coma flotante de precisión doble o en formato de palabra o doble palabra.
Estas instrucciones realizan las operaciones inversas de las instrucciones FSUB, FSUBP y FISUB. Se les proporciona para apoyar una codificación más eficiente.
La versión no-operando de la instrucción resta el contenido del registro ST(1) del registro ST(0) y almacena el resultado en ST(1). La versión one-operando resta el contenido del registro ST(0) del contenido de una ubicación de memoria (ya sea una coma flotante o un valor entero) y almacena el resultado en ST(0). La versión de dos operando, resta el contenido del registro ST(i) del registro ST(0) o viceversa.
Las instrucciones FSUBRP realizan el funcionamiento adicional de la pila de registro FPU después de la resta. 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 versión no-operando de las instrucciones de subtracto inverso de la coma flotante siempre resulta en la pila de registro que se está llenando. En algunos ensambladores, la mnemónica para esta instrucción es FSUBR en lugar de FSUBRP.
Las instrucciones FISUBR convierten un integer operando de origen a formato coma flotante de doble precisión antes de realizar la resta.
En el cuadro siguiente se muestran los resultados obtenidos cuando se restringen varias clases de números entre sí, asumiendo que no se produce desbordamiento ni desbordamiento. Aquí, el valor DEST se resta del valor SRC (SRC - DEST = resultado).
Cuando la diferencia entre dos operandos de signo similar es 0, el resultado es +0, excepto por el modo redondo hacia -, en cuyo caso el resultado es -0. Esta instrucción también garantiza que +0 - (-0) = +0, y que -0 - (+0) = -0. Cuando el operando de origen es un entero 0, se trata como un +0.
Cuando un operando es , el resultado es del signo esperado. Si ambos operandos son del mismo signo, se genera una excepción de cooperación inválida.
FSUBR/FSUBRP/FISUBR Resultados
| - | * | + | + | + | + | + | Nan |
|---|---|---|---|---|---|---|---|
| -F - | +/-F or +/-0 | - | DEST | -DE | ST +F | + | Nan |
| -0 - | SRC | +/-0 | +0 | SRC | + | Nan | |
| +0 - | SRC | -0 | +/-0 | SRC | + | Nan | |
| +F - | -F -DEST | -DEST | +/-F or +/ | -0 + | Nan | ||
| + - | - | - | - | - | * | Nan | |
| Nan Nan | Nan | Nan | Nan | Nan | Nan | Nan |
Operación
IF Instruction = FISUBR
THEN
DEST := ConvertToDoubleExtendedPrecisionFP(SRC) - DEST;
ELSE (* Source operand is floating-point value *)
DEST := SRC - DEST; FI;
IF Instruction = FSUBRP
THEN
PopRegisterStack; FI;
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 Operand is an SNaN value or unsupported format.Operandos son infinitos de signo.
#D Source operand is a denormal value.#U Result is too small for destination format.#O Result is too large for destination format.#P Value cannot be represented exactly in destination format.Excepciones
Modo protegido
#GP(0) | Si un operando de memoria dirección efectiva 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. |