<<<    Index    >>>
7-36
FLOATING-POINT UNIT
performs a function similar to the FIST/FISTP instructions, except that the result is saved in a
real format.
The FABS, FCHS, and FXTRACT instructions perform convenient arithmetic operations. The
FABS instruction produces the absolute value of the source operand. The FCHS instruction
changes the sign of the source operand. The FXTRACT instruction separates the source operand
into its exponent and fraction and stores each value in a register in real format.
7.5.6.Comparison and Classification Instructions
The following instructions compare or classify real values:
FCOM/FCOMP/FCOMPP
Compare real and set FPU condition code flags.
FUCOM/FUCOMP/FUCOMPPUnordered compare real and set FPU condition code flags.
FICOM/FICOMP
Compare integer and set FPU condition code flags.
FCOMI/FCOMIP
Compare real and set EFLAGS status flags.
FUCOMI/FUCOMIP
Unordered compare real and set EFLAGS status flags.
FTST
Test (compare real with 0.0).
FXAM
Examine.
Comparison of real values differ from comparison of integers because real values have four
(rather than three) mutually exclusive relationships: less than, equal, greater than, and
unordered.
The unordered relationship is true when at least one of the two values being compared is a NaN
or in an undefined format. This additional relationship is required because, by definition, NaNs
are not numbers, so they cannot have less than, equal, or greater than relationships with other
real values.
The FCOM, FCOMP, and FCOMPP instructions compare the value in register ST(0) with a real
source operand and set the condition code flags (C0, C2, and C3) in the FPU status word
according to the results (refer to Table 7-15). If an unordered condition is detected (one or both
of the values is a NaN or in an undefined format), a floating-point invalid operation exception
is generated.
The pop versions of the instruction pop the FPU register stack once or twice after the comparison
operation is complete.
The FUCOM, FUCOMP, and FUCOMPP instructions operate the same as the FCOM, FCOMP,
and FCOMPP instructions. The only difference is that with the FUCOM, FUCOMP, and
FUCOMPP instructions, if an unordered condition is detected because one or both of the oper-
ands is a QNaN, the floating-point invalid operation exception is not generated.
<<<    Index    >>>