首页
社区
课程
招聘
未解决 [求助]内联汇编,获取CPU制造商信息,频率出错
发表于: 2019-3-18 13:21 1696

未解决 [求助]内联汇编,获取CPU制造商信息,频率出错

2019-3-18 13:21
1696
#include <iostream>
#include <Windows.h>
#include <string>

using namespace std;

DWORD deax;
DWORD debx;
DWORD decx;
DWORD dedx;

void GetCpuID(DWORD veax)
{
    __asm
    {
        mov eax,veax
        cpuid
        mov deax,eax
        mov debx,ebx
        mov decx,ecx
        mov dedx,edx
    }
}

long GetCpuFreq()
{
    //RDTSC - 读取时间标签计数器

    int str1,str2;
    __asm rdtsc
        __asm mov str1,eax;

    Sleep(50);

    __asm rdtsc
        _asm mov str2,eax

        return (str2 - str1)/50000;
}

//获取CPU制造商信息

string GetManIDInfo()
{
    char ID[25];
    memset(ID,0,sizeof(ID)); //清空数组ID中的数据信息
    GetCpuID(0);             //初始化
    memcpy(ID+0,&debx,4);    //制造商信息的前四个字符复制到数组中
    memcpy(ID+4,&dedx,4);    //制造商信息的中间四个字符复制到数组中
    memcpy(ID+8,&decx,4);    //制造商信息的最后四个字符复制到数组中

    return string(ID);
}

//获取CPU的型号
string GetCpuType()
{
    const DWORD id = 0x80000002;       //开始地址
    char  CPUType[49];                 //用来存储CPU型号信息
    memset(CPUType,0,sizeof(CPUType)); //初始化

    for(DWORD t = 0; t < 3; t++)
    {
        GetCpuID(id+t);
        memcpy(CPUType+16*t+0,&deax,4);
        memcpy(CPUType+16*t+4,&debx,4);
        memcpy(CPUType+16*t+8,&decx,4);
        memcpy(CPUType+16*t+12,&dedx,4);
    }
    return string(CPUType);
}

int main()
{
    cout<<"本地计算机CPU结构信息如下:"<<endl;
    cout<<"CPU 主  频:"<<GetCpuFreq()<<"MHZ"<<endl;   //频率为什么还会变动?
    cout<<"CPU 制作商:"<<GetManIDInfo<<endl;             //制作商信息也成了数字?
    cout<<"CPU 型  号:"<<GetCpuType()<<endl;
    system("pause");

    return 0;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
CPU频率虽显示出来了,可是每次执行都在变动,制作商信息获取失败,一些整数值
2019-3-18 18:49
0
游客
登录 | 注册 方可回帖
返回
//