gpt4 book ai didi

c++ - x88 架构中的 CPUID

转载 作者:太空狗 更新时间:2023-10-29 23:07:19 26 4
gpt4 key购买 nike

我正在尝试使用 C++ 中的 CPUID 访问信息。到目前为止,我已经制作了这段代码,不能再继续了。我在这里和网上找到了一些有用的文章,但它们似乎对我没有帮助。

我应该只使用 x88 的指令和寄存器。这是代码。

int b[5] = {0} ;

for (int a = 0; a < 5 ; a++)
{
__cpuid (b,a) ;
std::cout << "The code " << a << " gives " << b[0] << std::endl;
}

我无法继续下去,因为我无法理解如何从这个数组中按位获取信息。我有这个 wikimsdn解释该计划的文章。我的问题不是很好,但我将不胜感激在这方面的任何帮助或指导。

最佳答案

我想你的问题不在于通过索引访问数组数据,正如你已经完成的 b[0]b[1] 等等.您需要一点点 (!) 操作。您必须屏蔽掉您不感兴趣的部分并解释剩下的部分;例如

    (b[0] & 0xF0) >> 4

将为您提供 4 位 (4-7),这是根据 MSDN 的模型。等等。考虑以下内容

    3            2            1
1098 7654 3210 9876 5432 1098 7654 3210
0000 0000 0000 0000 0000 0000 0000 0000
\R_/ \ext_Fam/ \eM/ RRpp \fm/ \md/ \sd/

R = reserved
ext_Fam = extended family
eM = extended model
pp = processor type
fm = family
md = model
sd = stepping id

(int 假定为 32 位 int — 或更宽)

如果你想要,例如处理器类型,您需要:

    0000 0000 0000 0000 0011 0000 0000 0000 
\R_/ \ext_Fam/ \eM/ RRpp \fm/ \md/ \sd/

然后向右移动(逻辑移位)3 个“半字节”(12)。所以

   (b[0] >> 12) & 3

会给你一个代表处理器类型的数字。 (数字 3 在基数 2 中是 11,因此只选择最右边的两位是正确的掩码)。

关于c++ - x88 架构中的 CPUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13212087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com