A.67 FSUB, FSUBP, FSUBR, FSUBRP: Floating-Point Subtract

    FSUB mem32                    ; D8 /4                [8086,FPU]
    FSUB mem64                    ; DC /4                [8086,FPU]
    
    FSUB fpureg                   ; D8 E0+r              [8086,FPU]
    FSUB ST0,fpureg               ; D8 E0+r              [8086,FPU]
    
    FSUB TO fpureg                ; DC E8+r              [8086,FPU]
    FSUB fpureg,ST0               ; DC E8+r              [8086,FPU]
    
    FSUBR mem32                   ; D8 /5                [8086,FPU]
    FSUBR mem64                   ; DC /5                [8086,FPU]
    
    FSUBR fpureg                  ; D8 E8+r              [8086,FPU]
    FSUBR ST0,fpureg              ; D8 E8+r              [8086,FPU]
    
    FSUBR TO fpureg               ; DC E0+r              [8086,FPU]
    FSUBR fpureg,ST0              ; DC E0+r              [8086,FPU]
    
    FSUBP fpureg                  ; DE E8+r              [8086,FPU]
    FSUBP fpureg,ST0              ; DE E8+r              [8086,FPU]
    
    FSUBRP fpureg                 ; DE E0+r              [8086,FPU]
    FSUBRP fpureg,ST0             ; DE E0+r              [8086,FPU]

FSUB subtracts the given operand from ST0 and stores the result back in ST0, unless the TO qualifier is given, in which case it subtracts ST0 from the given operand and stores the result in the operand.

FSUBR does the same thing, but does the subtraction the other way up: so if TO is not given, it subtracts ST0 from the given operand and stores the result in ST0, whereas if TO is given it subtracts its operand from ST0 and stores the result in the operand.

FSUBP operates like FSUB TO, but pops the register stack once it has finished. FSUBRP operates like FSUBR TO, but pops the register stack once it has finished.