Invalid CPUID values?

My processor is Intel Core2Quad Q9300 2.5GHz. CPU-Z gives me the values ​​for Family: 6, Model: 7, and Stepping: 7. When trying to write an x86 assembly using a cpuid instruction with EAX = 1, all I get is the value 0000 0010 in AL (where I suppose it should have been 0111 0111).

Any help guys?

+3


source to share


1 answer


Unfortunately (due to the large amount of suction) the number of Intel "family" computers has grown from 5 (Pentium) to 6 (Pentium Pro, Pentium II, Pentium II) to 15 (Pentium 4), and then down again to 6 (Pentium M , Atom, Core, Core2, Nehalem, Sandy Bridge, etc.).

This basically means that (by itself) the "family" field is useless for defining a processor family. Instead, if "family = 6", you must use the model number to identify the family (and the model numbers are not in normal order or anything else), for example, models 8, 10 and 11 are Pentium III, and in the middle of that model 9 - Pentium M).

Also note that the model number was originally 4 bits (bit 4-7 in EAX) and that wasn't enough to handle Intel's all-in-the-family stupidity, so they extended the model number 4 more bits later (bit 16 -19 in EAX). This means that you need to fold / shift a bit (eg model = ( (EAX >> 4) & 0x0F) | ( (EAX >> 12) & 0xF0);

) to get the full model number .



For example, for model 23, the value in EAX will be 0x ??? 1?? 7 ?, and older software (developed before the model number extension was introduced) might make the mistake of assuming the CPU is "Model 7" if it is not.

I would assume you did the same (forgot to include "extended model" in your model number); and your actual cpu data is "family = 6, model = 23". This would make it Core 2 (Penryn).

+4


source







All Articles