Win87EmSaveArea

3.1

typedef  struct _Win87EmSaveArea {
    unsigned char  Save80x87Area[SIZE_80X87_AREA];
    unsigned char  SaveEmArea[];
} Win87EmSaveArea;

The Win87EmSaveArea structure contains the states of the floating-point coprocessor and floating-point emulator.

Members

Save80x87Area

Specifies an array of values defining the state of the floating-point coproces-sor if one is present. The array has the same format as data saved by an fsave instruction and consists of SIZE_80X87_AREA (94) array elements.

SaveEmArea

Specifies an array of values defining the state of the floating-point emulator. The array has the following form:

Have8087    db  0        ; 1 if coprocessor is present; otherwise, 0
            db  ?        ; reserved
            dw  ?        ; reserved
            dw  ?        ; reserved

ControlWord label   word ; emulator control word
CWmask      db      ?    ; exception masks
CWcntl      db      ?    ; arithmetic control flags

StatusWord  label   word ; emulator status word
SWerr       db      ?    ; exception flags
SWcc        db      ?    ; condition codes

BASstk      dw      ?    ; offset of start of emulator register area
CURstk      dw      ?    ; offset of current top-of-stack register
LIMstk      dw      ?    ; offset of end of emulator register area

            dw      ? dup(?)    ; reserved

Comments

The BASstk, CURstk, and LIMstk fields specify the offsets from the start of the SaveEmArea member into the emulator's register area. If BASstk and CURstk have the same value, the stack is empty. Each of the emulator's registers is 12 bytes long and has the form shown in the following illustration.

The mantissa contains the leading 1 before the decimal point in the high-order bit of the most significant byte (msb). The exponent is not biased, that is, it is a signed integer. The following illustration shows the flag and tag bytes.

See Also

__Win87EmRestore, __Win87EmSave