<<<    Index    >>>
11-3
PROCESSOR IDENTIFICATION AND FEATURE DETERMINATION
AP-485, Intel Processor Identification and the CPUID Instruction (Order Number 241618),
provides additional information and example source code for use in identifying IA processors.
It also contains guidelines for using the CPUID instruction to help maintain the widest range of
software compatibility. The following guidelines are among the most important, and should
always be followed when using the CPUID instruction to determine available features:
•
Always begin by testing for the “GenuineIntel,” message in the EBX, EDX, and ECX
registers when the CPUID instruction is executed with EAX equal to 0. If the processor is
not genuine Intel, the feature identification flags may have different meanings than are
described in “CPUID—CPU Identification” in Chapter 3, Instruction Set Reference of the
Intel Architecture Software Developer’s Manual, Volume 2.
•
Do not assume a value of 1 in a feature identification flag indicates that a given feature is
present. For future feature identification flags, a value of 1 may indicate that the specific
feature is not present.
•
Test feature identification flags individually and do not make assumptions about undefined
bits.
Note that the CPUID instruction will cause the invalid opcode exception (#UD) if executed on
a processor that does not support it. The CPUID instruction application note provides a code
sequence to test the validity of the CPUID instruction. Also, this test code (for CPUID valid) is
not reliable when executed in virtual-8086 mode. To avoid this, if the test code is written to run
in real-address mode, the SMSW instruction must be used to read the PE bit from the MSW
(lower half of CR0). If PE flag is set to 1, the Real Mode code is actually being executed in
virtual-8086 mode, and the test sequence cannot be guaranteed to return reliable information.
(Note that the new version of the CPUID application note (AP-485, Intel Processor Identifica-
tion and the CPUID Instruction (Order Number 241618-005)), explains this virtual-8086
problem, but the older versions of the application note do not.)
<<<    Index    >>>