FSUB            Subtract real                        Exceptions: I D O U P
FSUBP Subtract real and pop C3 C2 C1 C0: ? ? * ?

FSUB [[destination,] source]
FSUBP [destination, ST]

Logic ; FSUB source ; FSUB and FSUBP
ST ← ST - source ST(1) ← ST(1) - ST
pop ST

; FSUB dest, source ; FSUBP dest, ST
ST(dest) ← ST(dest) - ST(src) ST(dest) ← ST(dest) - ST
pop ST

FSUB/FSUBP subtract the source operand from the destination operand
and leave the difference in the destination operand.

The one-operand form of FSUB subtracts a (single or double real)
memory operand from ST.
The two-operand form of FSUB calculates the difference between two
register operands (ST must be one of these) and returns the result
to destination.
FSUBP works like the two-operand FSUB but requires ST to be the
source operand; it also pops the stack.
The no-operand forms FSUB and FSUBP equal 'FSUBP ST(1), ST'.


Opcode Format
D8 /4 FSUB m32
DC /4 FSUB m64
D8 E0 + i FSUB ST,ST(i)
DC E8 + i FSUB ST(i),ST
DE E8 + i FSUBP ST(i),ST
DE E9 FSUB
DE E9 FSUBP


Timing
Variations/
operand 8087 287 387 486 Pentium
fsub reg 70-100 70-100 26-37 8-20 3/1 FX
fsub m32 (90-120)+EA 90-120 24-32 8-20 3/1 FX
fsub m64 (95-125)+EA 95-125 28-36 8-20 3/1 FX
fsubp reg 75-105 75-105 26-34 8-20 3/1 FX