本文目录一览:
如何用C语言编写探测cpu的程序
参考下面的文章:
利用利用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
EDX第0 位: 是否有FPU( 多余的 !谁用过没FPU的K5,K6?)
EDX 第23 位,CPU是否支持MMX,
程序如下:
//------CPUID Instruction Demo Program------------
#include
#include
#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(iEDXValue0x800000)
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语言 CPU 信息”
c语言怎么做?
int a = b[0][0];
for(int i = 0;i3;i++)
for(int j=0;j4;j++)
{
if(a b[i][j])
a = b[i][j];
}
芯片解密后可以得到C语言程序么?
不可能得到。
就算解密,得到的也是编译后的二进制文件。
源代码是不可能得到的,也是没法修改的。
C语言进阶04-预防、检测及消除bug
01
开发软件不等于编码
写程序时会有"编码--测试--调试"的习惯.很不幸,这是开发软件的错误方法.专业的程序员会使用策略来预防、检测及消除软件bug.编码不是在开发软件.编码的意思是在文本编辑器中输入语句.编码只是开发软件的小部分.开发软件需要编程前、编程中、编程后的许多步骤.下面分着讲解.
02
编程前
1、了解需求.
2、考虑可能的输入和期望的输出.
3、识别出有效但非期望的输入和正确的输出.这是对于开发可靠的软件而言是一个关键点.
4、识别出无效输入并找到检测它们的方法.要注意即使输入无效的数据时,程序也不能奔溃.
5、想出解决办法,并记录.
6、设计程序,可以节省大量的时间.
03
编程中
1、若想正确且更快的完成程序, 就写更多的代码.为了满足一个要求而把代码放到一个更大的程序之前,写一个小程序来测试你的解决方案.即单元测试.
2、使用自动缩进的文本编辑器可以帮你检查代码是否对齐,可以节省宝贵的时间.
3、在运行之前一行一行的读代码.可以帮你找到通过测试很难发现的问题.
4、自己想一些测试例子. 若自己不知道自己写的代码,则计算机也不知道.
5、尽量使用函数来重构代码,避免复制代码.
6、要用版本控制系统(这不是废话吗).
7、编译时,警告信息也不要放过.
04
编程后
不要依赖测试,测试只会告诉你程序没有正常工作,不会告诉你程序真的在正常运行.很可能测试用例没有涵盖所有可能的方案.通过测试用例涵盖所有可能的方案是很困难的.
05
常见错误
未初始化变量: 一些人认为所有的变量都会自动初始化为0,C语言中不会初始化.通过测试很难测试出来.
错误数据类型: 需要理解并正确地使用类型,编程语言的趋势是让数据类型更有限制性,防止犯意外的错误.
06
后执行式和交互式调试
调试一个程序分为几个阶段, 举个列子:
1、从一个文件中读取一些整数;
2、把整数排序;
3、把排好序的整数存到另一个文件中;
单元测试: 在上面三部整合之前测试每一部分叫作单元测试.
对于单元测试,经常需要写一些额外的代码,作为单独部分的"驱动".调试可能是交互式或后执行式的.若程序会花费几个小时,你就不会想要用交互式来调试这个程序了.相反,你会想要程序打印出调试信息,即日志.
对交互式调试而言打印调试信息存在多个问题:
1、需要插入代码来打印调试信息.多数情况下,调试信息必须在随后被移除,因为此信息不应该出现在最终的代码和它的输出中.
2、如果有很少的信息,那么就会缺少足够的信息帮助你判断哪里错了.
3、如果信息太多,可以忽略不相关的信息,获得好信息是很困难的.
4、最糟糕的是,问题可能会出现在意想不到的地方,而那里却并未插入调试信息.结果就是添加越来越多的调试信息.这是很耗时的.
07
生产代码与测试代码分离
自己应该能检测出自身bug的程序.编写程序之前就应该考虑编写测试代码.这是普遍的做法,这个称为 测试驱动的开发. 开发的时候需要将测试代码和开发代码分开,这样可以随意删除测试代码.
内存的颗粒识别,详解
您好,现在内存颗粒主要有以下厂家的产品:
samsung(三星),elpida(尔必达),hynix,(现代)nanya,(蓝牙)infineon,(英飞凌)
在内存颗粒上都会有用激光蚀刻上去的相应的logo,您可以看得到,具体各个厂家的产品编码序列号的意思可以参考下面的内容:
DDR SDRAM:
HYNIX DDR SDRAM颗粒编号:
HY XX X XX XX X X X X X X X - XX X
1 2 3 4 5 6 7 8 9 10 11 12 - 13 14
整个DDR
SDRAM颗粒的编号,一共是由14组数字或字母组成,他们分别代表内存的一个重要
参数,了解了他们,就等于了解了现代内存。
颗粒编号解释如下:
1. HY是HYNIX的简称,代表着该颗粒是现代制造的产品。
2. 内存芯片类型:(5D=DDR SDRAM)
3. 处理工艺及供电:(V:VDD=3.3V VDDQ=2.5V;U:VDD=2.5V
VDDQ=2.5V;W:VDD=2.5V VDDQ=1.8V;S:VDD=1.8V VDDQ=1.8V)
4. 芯片容量密度和刷新速度:(64:64M 4K刷新;66:64M 2K刷新;28:128M
4K刷新;56:256M
8K刷新;57:256M 4K刷新;12:512M 8K刷新;1G:1G 8K刷新)
5. 内存条芯片结构:(4=4颗芯片;8=8颗芯片;16=16颗芯片;32=32颗芯
片)
6. 内存bank(储蓄位):(1=2 bank;2=4 bank;3=8 bank)
7. 接口类型:(1=SSTL_3;2=SSTL_2;3=SSTL_18)
8. 内核代号:(空白=第1代;A=第2代;B=第3代;C=第4代)
9. 能源消耗:(空白=普通;L=低功耗型)
10.封装类型:(T=TSOP;Q=LOFP;F=FBGA;FC=FBGA(UTC:8x13mm))
11.封装堆栈:(空白=普通;S=Hynix;K=MT;J=其它;M=MCP(Hynix);MU
=MCP(UTC))
12.封装原料:(空白=普通;P=铅;H=卤素;R=铅+卤素)
13.速度:(D43=DDR400 3-3-3;D4=DDR400 3-4-4;J=DDR333;M=DDR333 2
-2-2;K=DDR266A;H=DDR266B;L=DDR200)
14.工作温度:(I=工业常温(-40 - 85度);E=扩展温度(-25 - 85度))
由上面14条注解,我们不难发现,其实最终我们只需要记住2、3、6、13等几处数
字的实际含义,就能轻松实现对使用现代DDR SDRAM内存颗粒的产品进行辨别。尤
其是第13位数字,它将明确的告诉消费者,这款内存实际的最高工作状态是多少
。假如,消费者买到一款这里显示为L的产品(也就是说,它只支持DDR200)
注:有的编码没有那么长,但几个根本的数字还是有的
LGS的内存可以说是目前市场上见到的最多,也是最广泛的内存了,所以LGS应该
首先排第一位。
LGS的内存编码规则:
GM 72 X XX XX X X X X X XXX
1 2 3 4 5 6 7 8 9 10 11
定义:
1、GM代表LGS公司。
2、72代表SDRAM。
3、V代表3V电压。
4、内存单位容量和刷新单位:其中:16:16M,4K刷新;17:16M,2K刷新;28:
128M,4K刷新;64: 64M,16K刷新。65:64M,8K刷新;66:64M,4K刷新。
5、数据带宽:4:4位,8:8位,16:16位,32:32位。
6、芯片组成:1:1BAND,2:2BANK,4:4BANK,8:8BANK
7、I/O界面:一般为1
8、产品系列:从A至F。
9、功耗:空白则是普通,L是低功
10、封装模式:一般为T(TSOP)
11、速度:其中:8:8NS,7K:10NS(CL2),7J(10NS,CL23),10K(10NS[
一说15NS],PC66), 12(12NS,83HZ),15(15NS,66HZ)
二、HY(现代HYUNDAI)
现代是韩国著名的内存生产厂,其产品在国内的占用量也很大。
HY的编码规则:
HY 5X X XXX XX X X X X- XX XX
1 2 3 4 5 6 7 8 9 10 11
定义:
1、HY代表现代。
2、一般是57,代表SDRAM。
3、工艺:空白则是5V,V是3V。
4、内存单位容量和刷新单位:16:16M4K刷新;64:64M,8K刷新;65:64M,4K
刷新;128:128M, 8K刷新;129:128M,4K刷新。
5、数据带宽:40:4位,80:8位,16:16位,32:32位。
6、芯片组成:1:2BANK,2:4BANK;3:8BANK;
7、I/O界面:一般为0
8、产品线:从A-D系列
9、功率:空白则为普通,L为低功耗。
10、封装:一般为TC(TSOP)
11、速度:7:7NS,8:8NS,10P:10NS(CL23),10S:10NS,(PC100,CL3)
,10:10NS,12: 12NS,15:15NS
三、SEC(三星SAMSUNG)
做为韩国著名的电器厂商,三星的重要性不必多说,在内存方面,三星的产量虽
然不及上两者大,但是三星一直专注于高品质、高性能的产品。三星的标识不是
很容易的就可以读出来,而且三星的产品线较全,所以品种非常多,此处仅供普
通SDRAM参考。
SEC编码规则:
KM4 XX S XX 0 X X XT-XX
1 2 3 4 5 6 7 89 10 11
1、KM代表SEC三星,此处编码一般均为4。
2、数据带宽:4:4位,8:8位,16:16位,32:32位。
3、一般均为S
4、这个数乘以S前边的位数就是内存的容量。
5、一般均为0
6、芯片组成:2:2BANK,3:4BANK
7、I/O界面:一般为0
8、版本号
9、封装模式:一般为T:TSOP
10、功耗:F低耗,G普通
11、速度:7:7NS,8:8NS,H:10NS(CL23),L:10NS(CL3),10:10NS。
四、MT(MICRON美凯龙)
美凯龙是美国著名的计算机生产商,同时也是一家计算机设备制造商,其内存的
产品闻名全美国,被广泛的机器所采用。美凯龙内存的品质优异,但价格较韩国
的产品略高。
MT48 XX XX M XX AX TG-XX X
1 2 3 4 5 6 7 8 9 10
1、MT代表美凯龙MICRON
2、48代表SDRAM。
3、一般为LC:普通SDRAM
4、此数与M后位数相乘即为容量。
5、一般为M
6、位宽:4:4位,8:8位,16:16位,32:32位
7、AX代表write Recovery(twr),A2则代表twr=2clk
8、TG代表TSOP封装模式。
9、速度:7:7NS,75:7.5NS,8X:8NS(其中X为从A到E:读取的周期分别是:
333,323,322, 222,222,所以D和E较好),10:10NS
10、如有L则为低功耗,空白则为普通。
五、HITACHI(日立HITACHI)
日立是日本的著名的微电子生产厂,其内存虽然在市场上占有量不大,但品质还
是不错的!
HM 52 XX XX 5 X X TT- XX
1 2 3 4 5 6 7 8 9
1、HM代表日立。
2、52代表SDRAM,51则为EDO
3、容量
4、位宽:40:4位,80:8位,16:16位
5、一般为5
6、产品系列:A-F
7、功耗:L为低耗,空白则为普通
8、TT为TSOP封装模式
9、速度:75:7.5NS,80:8NS,A60:10NS(CL23),B60:10NS(CL3)
六、SIEMENS(西门子)
西门子是德国最大的产业公司,其产品包罗万向,西门子的电子产品也是欧洲最
大的品牌之一(另一是PHILIPS)。西门子的内存产品多为台湾的OEM厂商制造的
,产品品质还算不错。
HYB39S XX XX 0 X T X -X
1 2 3 4 5 6 7 8 9
1、HYB代表西门子
2、39S代表SDRAM
3、容量
4、位宽:40:4位,80:8位,16:16位
5、一般为0
6、产品系列
7、一般为T
8、L为低耗,空白为普通
9、速度:
6:6NS,7:7NS,7.5:7.5NS,8:8NS(CL2),8B:10NS(CL3),10:10NS
七、FUJITSU(富士通FUJITSU)
富士通是日本专业的计算机及外部设备制造商,他的内存产品主要是供应OEM商,
市场上仅有少量零售产品。
MB81 X XX XX X2 X-XXX X FN
1 2 3 4 5 6 7 8 9
1、MB81代表富士通的SDRAM
2、PC100标准的多为F,普通的内存为1
3、容量
4、位宽:4:位,8:8位,16:16位,32:32位
5、芯片组成:22:2BANK,42:4BANK
6、产品系列
7、速度:60:6NS,70:7NS,80:8NS,102:10NS(CL23),103:10NS(CL3
),100:10NS,84: 12NS,67:15NS
八、TOSHIBA(东芝)
东芝是日本著名的电器制造商,其在高端领域也有产品,例如计算机产品及通讯
卫星等等。TOSHIBA的内存产品在市场上见到的不多。
TC59S XX XX X FT X-XX
1 2 3 4 5 6 7 8
1、TC代表东芝
2、59S代表普通SDRAM
3、容量:64:64MBIT,128:128MBIT
4、位宽:04:4位,08:8位,16:16位,32:32位
5、产品系列:A-B
6、FT为TSOP封装模式
7、空白为普通,L为低功耗
8、速度;75:7.5NS,80:8NS,10:10NS(CL3)
九、MITSUBISHI(三菱)
三菱是日本的一家汽车制造公司,因其多元化发展,所以在IT业和家电业也有产
品,三菱的微集成电路技术不同一般,所以其在内存领域也占有一席之地,因为
速度、品质优异,而成为INTEL的PII/PIIICPU的缓存供应商。普通SDRAM方面,
因为较贵,所以市场上少见。
M2 V XX S X 0 X TP-XX X
1 2 3 4 5 6 7 8 9 10
1、M2代表三菱产品
2、I/O界面。一般为V
3、容量
4、一般为S,说明是SDRAM
5、位宽:2:4位,3:8位,4:16位
6、一般为0
7、产品系列
8、TP代表TSOP封装
9、速度:
8A:8NS,7:10NS(CL23),8:10NS(CL3),10:10NS。
10、空白为普通,L为低耗。