sam*_*ame 3 x86 assembly cpuid
我的 CPU 是 Intel Core2Quad Q9300 2.5GHz。CPU-Z 给我的值是 Family:6、Model:7 和 Stepping:7。尝试使用 EAX=1 的 cpuid 指令编写 x86 程序集,我得到的只是 AL 中的值 0000 0010(我认为它应该是 0111 0111)。
大家有什么帮助吗?
遗憾的是(由于大量的废话)英特尔的“家族”数量从 5(奔腾)到 6(奔腾 Pro、奔腾 II、奔腾 II)再到 15(奔腾 4),然后又回到 6(奔腾 M) 、Atom、Core、Core2、Nehalem、Sandy Bridge 等)。
这主要意味着(就其本身而言)“系列”字段对于确定 CPU 的系列是无用的。相反,如果“family = 6”,则必须使用型号来确定系列(并且型号的顺序不正确或任何其他顺序 - 例如型号 8、10 和 11 是 Pentium III,并且位于其中的中间)型号 9 是 Pentium M)。
另请注意,型号最初是 4 位(EAX 中的位 4 到 7),这不足以处理 Intel 的“一切都是家族 6”的愚蠢行为,因此他们后来用另外 4 位扩展了型号(位 16 到EAX 中为 19)。这意味着要获得完整的型号,您需要进行一些调整/转换(例如model = ( (EAX >> 4) & 0x0F) | ( (EAX >> 12) & 0xF0);
)。
例如,对于型号 23,EAX 中的值将为 0x???1??7?,而较旧的软件(在引入“型号扩展”之前设计)会错误地认为 CPU 是“型号 7”当它不是时。
我假设您也做了同样的事情(忘记在型号中包含“扩展型号”);您的实际 CPU 详细信息是“系列 = 6,型号 = 23”。这将使其成为 Core 2 (Penryn)。