Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- iAPx86 - <b>fucom unordered compare real exceptions: i d s</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
FUCOM           Unordered compare real               Exceptions: I D S
FUCOMP          Unordered compare real and pop       C3 C2 C1 C0: * * * *
FUCOMPP         Unordered compare real and pop twice FPU: 387+

FUCOM [source]
FUCOMP [source]
FUCOMPP

        Logic
        ; FUCOM                ; FUCOMP              ; FUCOMPP
        if source operand      if source operand     CMP ST, ST(1)
           CMP ST, ST(i)          CMP ST, ST(i)      set condition codes
        else                   else                  pop ST
           CMP ST, ST(1)          CMP ST, ST(1)      pop ST
        endif                  endif
        set condition codes    set condition codes
                               pop ST

                C3 C1 C0
                0  0  0     ST > source
                0  0  1     ST < source
                1  0  0     ST = source
                1  1  1     unordered

    FUCOM compares two registers and leaves the result encoded in the
    status word as shown above. If no source is specified, ST(1) is
    compared to ST. Otherwise, the source register is compared to ST.

    FUCOMP does what FUCOM does, and then pops the stack.

    FUCOMPP compares ST and ST(1), leaves the result encoded in the
    status word as shown above, and pops the stack twice.


    The FUCOM instructions perform the same operation as the FCOM
    instructions. The only difference is that the FUCOM instruction
    raises the invalid-arithmetic-operand exception (#IA) only when
    either or both operands is an SNaN or is in an unsupported format;
    QNaNs cause the condition code flags to be set to unordered, but do
    not cause an exception to be generated. The FCOM instruction raises
    an invalid-operation exception when either or both of the operands
    is a NaN value of any kind or is in an unsupported format.


    Opcode      Format
    DD E0 + i   FUCOM ST(i)
    DD E1       FUCOM
    DD E8 + i   FUCOMP ST(i)
    DD E9       FUCOMP
    DD EA       FUCOMPP


    Timing
    Variations    8087         287        387      486     Pentium
    fucom          -            -         24        4      4/1     FX
    fucomp         -            -         26        4      4/1     FX
    fucompp        -            -         26        5      4/1     FX

See Also: FCOM FXAM CC

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson