User's Manual

19-8 Vol. 3
ARCHITECTURE COMPATIBILITY
The following flags were added to the EFLAGS register in the Pentium processor:
VIF (virtual interrupt flag), bit 19.
VIP (virtual interrupt pending), bit 20.
ID (identification flag), bit 21.
The AC flag (bit 18) was added to the EFLAGS register in the Intel486 processor.
19.16.1 Using EFLAGS Flags to Distinguish Between 32-Bit IA-32
Processors
The following bits in the EFLAGS register that can be used to differentiate between
the 32-bit IA-32 processors:
Bit 18 (the AC flag) can be used to distinguish an Intel386 processor from the P6
family, Pentium, and Intel486 processors. Since it is not implemented on the
Intel386 processor, it will always be clear.
Bit 21 (the ID flag) indicates whether an application can execute the CPUID
instruction. The ability to set and clear this bit indicates that the processor is a P6
family or Pentium processor. The CPUID instruction can then be used to
determine which processor.
Bits 19 (the VIF flag) and 20 (the VIP flag) will always be zero on processors that
do not support virtual mode extensions, which includes all 32-bit processors prior
to the Pentium processor.
See Chapter 14, “Processor Identification and Feature Determination,” in the Intel®
64 and IA-32 Architectures Software Developer’s Manual, Volume 1, for more infor-
mation on identifying processors.
19.17 STACK OPERATIONS
This section identifies the differences in stack implementation between the various
IA-32 processors.
19.17.1 PUSH SP
The P6 family, Pentium, Intel486, Intel386, and Intel 286 processors push a different
value on the stack for a PUSH SP instruction than the 8086 processor. The 32-bit
processors push the value of the SP register before it is decremented as part of the
push operation; the 8086 processor pushes the value of the SP register after it is
decremented. If the value pushed is important, replace PUSH SP instructions with the
following three instructions:
PUSH BP
MOV BP, SP