本文目錄一覽:
如何用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為低耗。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/158149.html