3-180
INSTRUCTION SET REFERENCE
FCOM/FCOMP/FCOMPPCompare Real
Description
These instructions compare the contents of register ST(0) and source value and sets condition
code flags C0, C2, and C3 in the FPU status word according to the results (refer to the table
below). The source operand can be a data register or a memory location. If no source operand is
given, the value in ST(0) is compared with the value in ST(1). The sign of zero is ignored, so
that 0.0 = +0.0.
NOTE:
*Flags not set if unmasked invalid-arithmetic-operand (#IA) exception is generated.
This instruction checks the class of the numbers being compared (refer to FXAMExamine
in this chapter). If either operand is a NaN or is in an unsupported format, an invalid-arithmetic-
operand exception (#IA) is raised and, if the exception is masked, the condition flags are set to
unordered. If the invalid-arithmetic-operand exception is unmasked, the condition code flags
are not set.
The FCOMP instruction pops the register stack following the comparison operation and the
FCOMPP instruction pops the register stack twice following the comparison operation. To pop
the register stack, the processor marks the ST(0) register as empty and increments the stack
pointer (TOP) by 1.
Opcode
Instruction
Description
D8 /2
FCOM m32real
Compare ST(0) with m32real.
DC /2
FCOM m64real
Compare ST(0) with m64real.
D8 D0+i
FCOM ST(i)
Compare ST(0) with ST(i).
D8 D1
FCOM
Compare ST(0) with ST(1).
D8 /3
FCOMP m32real
Compare ST(0) with m32real and pop register stack.
DC /3
FCOMP m64real
Compare ST(0) with m64real and pop register stack.
D8 D8+i
FCOMP ST(i)
Compare ST(0) with ST(i) and pop register stack.
D8 D9
FCOMP
Compare ST(0) with ST(1) and pop register stack.
DE D9
FCOMPP
Compare ST(0) with ST(1) and pop register stack twice.
Condition
C3
C2
C0
ST(0) > SRC
0
0
0
ST(0) < SRC
0
0
1
ST(0) = SRC
1
0
0
Unordered*
1
1
1