CPUID错误的值?

时间:2013-01-25 04:58:30

标签: assembly x86 cpuid

我的CPU是Intel Core2Quad Q9300 2.5GHz。 CPU-Z给出了Family的值:6,Model:7和Stepping:7。尝试使用带有EAX = 1的cpuid指令编写x86程序集,我得到的值是AL中的值0000 0010(我认为它应该是0111 0111)。

任何帮助人员?

1 个答案:

答案 0 :(得分:4)

可悲的是(由于大量的吮吸)英特尔的“家庭”号码从5(Pentium)到6(Pentium Pro,Pentium II,Pentium II)到15(Pentium 4),然后再回到6 (Pentium M,Atom,Core,Core2,Nehalem,Sandy Bridge等)。

这主要意味着(单独)“family”字段对于确定CPU的系列无用。相反,如果“family = 6”,你必须使用型号来确定系列(并且型号不是合理的顺序或任何东西 - 例如型号8,10和11是奔腾III,并且在中间模型9是奔腾M)。

另请注意,型号最初是4位(EAX中的位4到7),这还不足以处理英特尔的“一切都是家庭6”的愚蠢,因此他们将模型编号扩展到另外4位( EAX中的位16到19)。这意味着要获得完整的型号,您需要进行一些细节/移位(例如model = ( (EAX >> 4) & 0x0F) | ( (EAX >> 12) & 0xF0);)。

例如,对于模型23,EAX中的值将是0x ??? 1 ?? 7?,并且较旧的软件(在引入“型号扩展”之前设计)将错误地认为CPU是“模型7“当它不是。

我会假设您已经做了同样的事情(忘记在您的型号中加入“扩展型号”);并且您的实际CPU的详细信息是“family = 6,model = 23”。这将使它成为Core 2(Penryn)。