FIDIV
Usage: FIDIV dest,src Modifies flags: None
Divides the 'dest' by the 'src' operand and stores the result in the 'dest'. The 'dest' (dividend) is always in an FPU register; the 'src' operand (divisor) can be a register or a memory location.
Floating-Point/Integer Division
FIDIV mem16 ; DE /6 [8086,FPU]
FIDIV mem32 ; DA /6 [8086,FPU]
FIDIVR mem16 ; DE /7 [8086,FPU]
FIDIVR mem32 ; DA /7 [8086,FPU]
FIDIV divides ST0 by the 16-bit or 32-bit integer stored in the given memory location, and stores the result in ST0. FIDIVR does the division the other way up: it divides the integer by ST0, but still stores the result in ST0.
Source operands in memory can be in single-precision or double-precision floating-point format, word or doubleword integer format.
The no-operand version of the instruction divides the contents of the ST(1) register by the contents of the ST(0) register. The one-operand version divides the contents of the ST(0) register by the contents of a memory location (either a floating-point or an integer value). The two-operand version, divides the contents of the ST(0) register by the contents of the ST(i) register or vice versa.
The FDIVP instructions perform the additional operation of popping the FPU register stack after storing the result. 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 divide instructions always results in the register stack being popped. In some assemblers, the mnemonic for this instruction is FDIV rather than FDIVP.
FPU Flags Affected
C1 Set to 0 if stack underflow occurred. Set if result was rounded up; cleared otherwise.
C0, C2, C3 Undefined.
FDIV/FDIVP/FIDIV-Divide
Opcode Instruction Description
D8 /6 FDIV m32fp Divide ST(0) by m32fp and store result in ST(0).
DC /6 FDIV m64fp Divide ST(0) by m64fp and store result in ST(0).
D8 F0 +i FDIV ST(0), ST(i) Divide ST(0) by ST(i) and store result in ST(0).
DC F8 +i FDIV ST(i), ST(0) Divide ST(i) by ST(0) and store result in ST(i).
DE F8 +i FDIVP ST(i), ST(0) Divide ST(i) by ST(0), store result in ST(i), and pop the register stack.
DE F9 FDIVP Divide ST(1) by ST(0), store result in ST(1), and pop the register stack.
DA /6 FIDIV m32int Divide ST(0) by m32int and store result in ST(0).
DE /6 FIDIV m16int Divide ST(0) by m64int and store result in ST(0).
EXAMPLE:
fidiv st2 D$Last