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

悲しいことに(大量の吸引のために)Intelの「ファミリ」数は5(Pentium)から6(Pentium Pro、Pentium II、Pentium II)、15(Pentium 4)になり、その後再び6(Pentium M)に戻りました。 、Atom、Core、Core2、Nehalem、Sandy Bridgeなど)。

これは主に、(それ自体で)「ファミリ」フィールドがCPUのファミリを決定するのに役に立たないことを意味します。代わりに、「family = 6」の場合、モデル番号を使用してファミリを決定する必要があります(モデル番号は正しい順序ではありません。たとえば、モデル8、10、11はPentium IIIであり、その途中です。モデル9はPentiumM)です。

また、モデル番号は元々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」です。これにより、コア2(ペンリン)になります。

于 2013-01-25T06:21:21.240 に答える