社区
C++ Builder
帖子详情
在C语言中怎样取得CPU的ID
hongxin125
2002-09-29 08:25:47
在C语言中怎样取得CPU的ID?
...全文
51
3
打赏
收藏
在C语言中怎样取得CPU的ID
在C语言中怎样取得CPU的ID?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
NowCan
2002-09-30
打赏
举报
回复
http://vip.6to23.com/NowCan1/tech/cpuid.htm
好好看吧。
xuby5228
2002-09-29
打赏
举报
回复
主要可利用利用CPUID汇编指令
(机器码:0FH A2H,如果你的编译器不支持CPUID指 令,只有emit机器码了)
该指令可以被如下CPU识别
Intel 486以上的CPU,
Cyrix M1以上的CPU,
AMD Am486以上的CPU
(1)取CPU OEM字符串,判断CPU厂商
先让EAX=0,再调用CPUID
Inel的CPU将返回:
EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX将连成“GenuineIntel”,真正的Intel。
Cyrix的CPU将返回:
EBX:43797269H
EDX:78496E73H
ECX:74656164H
“CyrixInstead”,“Cyrix来代替”。
AMD的CPU将返回:
EBX:41757468H
EDX:656E7469H
ECX:63414D44H
“AuthenticAMD",可信的AMD。
在Windows98中,用右键单击“我的电脑”,选择“属性-常规”在计算机描述处
就可看见CPU OEM字符串。
(2)CPU到底是几86,是否支持MMX
先让EAX=1,再调用CPUID
EAX的 8到11位就表明是几86
3 - 386
4 - i486
5 - Pentium
6 - Pentium Pro Pentium II
2 - Dual Processors
EDX的第0位:有无FPU
EDX的第23位:CPU 是否支持IA MMX,很重要啊!如果你想用那57条新增的指令,先
检查这一位吧,否则就等着看Windows的“该程序执行了非法指令,将被关闭”吧
。
(3)专门检测是否P6架构
先让EAX=1,再调用CPUID
如果AL=1,就是Pentium Pro或Pentium II
(4)专门检测AMD的CPU信息
先让EAX=80000001H,再调用CPUID
如果EAX=51H,是AMD K5
如果EAX=66H,是K6
K7是什么标志,只有等大家拿到K7的芯再说了。
EDX第0位:是否有FPU(多余的!谁用过没FPU的K5,K6?)
EDX第23位,CPU 是否支持MMX,
程序如下:是一个控制台程序,可以给出你的“心”的信息。如果把这个技术用于
DLL中,便可以使VB程序也知道“心”的信息。
//------CPUID Instruction Demo Program------------
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
//------------------------------------------------
#pragma inline
#pragma argsused
int main(int argc, char **argv)
{
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm {
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}
cout<<"This CPU 's OEM String is:"<<OEMString<<endl;
_asm {
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
if(iEDXValue&0x800000)
cout <<"This is MMX CPU"<<endl;
else
cout <<"None MMX Support."<<endl;
int iCPUFamily=(0xf00 & iEAXValue)>>8;
cout <<"CPU Family is:"<<iCPUFamily<<endl;
_asm{
mov eax,2
CPUID
}
if(_AL==1)
cout <<"Pentium Pro or Pentium II Found";
getch();
return 0;
}你可以很快的改成c了/。
playguy
2002-09-29
打赏
举报
回复
用汇编语言指令: CPUID
欢迎访问小弟的网站:
http://www.aslike.net
C语言
获取
CPU
的
ID
号
本程序是用
C语言
实现获取
CPU
信息的程序。嵌套汇编完成。我在VC6.0上试过了。
C语言
获取硬件信息(
CPU
序列号,硬盘序列号,网卡IP、MAC地址、是否插入网线).zip
Linux和Windows下使用
C语言
获取各种硬件信息,包括
CPU
序列号、硬盘序列号、网卡信息(包括网卡名字、IP地址、MAC地址、网卡是否插入网线等)。
c语言
获取
CPU
序列号(
CPU
ID
) 硬盘序列号 (vs2010工程)支持64位编译
获取
CPU
序列号 硬盘序列号 vs2010工程 支持64位
c语言
模拟进程
内容:设计一个简单的进程调度算法,模拟OS
中
的进程调度过程 2.要求: ① 进程数不少于5个; ② 进程调度算法任选; 最好选用动态优先数法,每运行一个时间片优先数减3 ③ 用C++(或C)语言编程; ④ 程序运行时显示进程调度过程。 3.步骤: ① 设计PCB及其数据结构: 进程标识数:
ID
进程优先数:PRIORITY(优先数越大,优先级越高) 进程已占用时间片:
CPU
TIME 进程尚需时间片:ALLTIME(一旦运行完毕,ALLTIME为0) 进程队列指针:NEXT,用来将PCB排成队列 进程状态:STATE(一般为就绪,不用) ② 设计进程就绪队列及数据结构; ③ 设计进程调度算法,并画出程序流程图; ④ 设计输入数据和输出格式; 结构格式:当前正运行的进程:0 当前就绪队列:2,1,3,4 ⑤ 编程上机,验证结果。
使用动态优先权的进程调度算法的模拟
1、实验目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。 2、实验内容 (1)用
C语言
来实现对N个进程采用动态优先算法的进程调度; (2)每个用来标识进程的进程控制块 PCB用结构来描述,包括以下字段: 进程标识符
id
进程优先数priority,并规定优先数越大的进程,其优先权越高; 进程已占用的
CPU
时间
cpu
time ; 进程还需占用的
CPU
时间alltime,当进程运行完毕时,alltime变为0; 进程的阻塞时间startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态; 进程被阻塞的时间blocktime,表示已阻塞的进程再等待blocktime个时间片后,将转换成就绪态 进程状态state; 队列指针next,用来将PCB排成队列 (3)优先数改变的原则: 进程在就绪队列
中
呆一个时间片,优先数增加1 进程每运行一个时间片,优先数减3。 (4)假设在调度前,系统
中
有5个进程,它们的初始状态如下:
ID
0 1 2 3 4 PRIORITY 9 38 30 29 0
CPU
TIME 0 0 0 0 0 ALLTIME 3 3 6 3 4 STARTBLOCK 2 -1 -1 -1 -1 BLOCKTIME 3 0 0 0 0 STATE READY READY READY READY READY (5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章