3

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

有帮助吗?

4

1 回答 1

4

可悲的是(由于大量吸吮)英特尔的“家族”数量从 5(奔腾)到 6(奔腾 Pro、奔腾 II、奔腾 II)到 15(奔腾 4),然后又回到 6(奔腾 M) 、Atom、Core、Core2、Nehalem、Sandy Bridge 等)。

这主要意味着(就其本身而言)“family”字段对于确定 CPU 的系列是无用的。相反,如果“family = 6”,您必须使用型号来确定系列(并且型号不是正常顺序或任何东西 - 例如型号 8、10 和 11 是 Pentium III,并且在中间9 型是奔腾 M)。

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

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

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

于 2013-01-25T06:21:21.240 回答