Intel 64 and IA-32 Architectures Software Developers Manual Volume 2A, Instruction Set Reference, A-M

3-400 Vol. 2
INSTRUCTION SET REFERENCE, A-M
FSUBR/FSUBRP/FISUBR—Reverse Subtract
Description
Subtracts the destination operand from the source operand and stores the difference
in the destination location. The destination operand is always an FPU register; the
source operand can be a register or a memory location. Source operands in memory
can be in single-precision or double-precision floating-point format or in word or
doubleword integer format.
These instructions perform the reverse operations of the FSUB, FSUBP, and FISUB
instructions. They are provided to support more efficient coding.
The no-operand version of the instruction subtracts the contents of the ST(1) register
from the ST(0) register and stores the result in ST(1). The one-operand version
subtracts the contents of the ST(0) register from the contents of a memory location
(either a floating-point or an integer value) and stores the result in ST(0). The two-
operand version, subtracts the contents of the ST(i) register from the ST(0) register
or vice versa.
The FSUBRP instructions perform the additional operation of popping the FPU register
stack following the subtraction. To pop the register stack, the processor marks the
ST(0) register as empty and increments the stack pointer (TOP) by 1. The no-
operand version of the floating-point reverse subtract instructions always results in
the register stack being popped. In some assemblers, the mnemonic for this instruc-
tion is FSUBR rather than FSUBRP.
Opcode Instruction
64-Bit
Mode
Compat/
Leg Mode Description
D8 /5 FSUBR m32fp Valid Valid Subtract ST(0) from m32fp
and store result in ST(0).
DC /5 FSUBR m64fp Valid Valid Subtract ST(0) from m64fp
and store result in ST(0).
D8 E8+i FSUBR ST(0), ST(i) Valid Valid Subtract ST(0) from ST(i) and
store result in ST(0).
DC E0+i FSUBR ST(i), ST(0) Valid Valid Subtract ST(i) from ST(0) and
store result in ST(i).
DE E0+i FSUBRP ST(i), ST(0) Valid Valid Subtract ST(i) from ST(0),
store result in ST(i), and pop
register stack.
DE E1 FSUBRP Valid Valid Subtract ST(1) from ST(0),
store result in ST(1), and pop
register stack.
DA /5 FISUBR m32int Valid Valid Subtract ST(0) from m32int
and store result in ST(0).
DE /5 FISUBR m16int Valid Valid Subtract ST(0) from m16int
and store result in ST(0).