Question

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

Any help guys?

Was it helpful?

Solution

Sadly (due to large amounts of suckage) Intel's "family" numbers went from 5 (Pentium) to 6 (Pentium Pro, Pentium II, Pentium II) to 15 (Pentium 4), and then back to down to 6 again (Pentium M, Atom, Core, Core2, Nehalem, Sandy Bridge, etc).

This mostly means that (on its own) the "family" field is useless for determining the CPU's family. Instead, if "family = 6", you have to use the model number to determine family (and the model numbers are not in a sane order or anything - e.g. models 8, 10 and 11 are Pentium III, and in the middle of that model 9 is Pentium M).

Also note that the model number was originally 4 bits (bits 4 to 7 in EAX), and this wasn't enough to handle Intel's "everything is family 6" silliness so they extended the model number with another 4 bits later (bits 16 to 19 in EAX). This means that to get the full model number you need to do some bit twiddling/shifting (e.g. model = ( (EAX >> 4) & 0x0F) | ( (EAX >> 12) & 0xF0);).

For example, for model 23 the value in EAX would be 0x???1??7?, and older software (designed before the "model number extension" was introduced) would make the mistake of thinking the CPU is "model 7" when it's not.

I would assume that you have done the same (forgotten to include the "extended model" in your model number); and your actual CPU's details are "family = 6, model = 23". This would make it a Core 2 (Penryn).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top