本文作者:趙江波
大家都知道,在286以上的計(jì)算機(jī)中,一般都有一個(gè)CMOS RAM電路,它用于關(guān)機(jī)以后繼續(xù)存放日期、時(shí)間、內(nèi)存設(shè)置、軟硬盤類型及其他許多有用的設(shè)置信息。CMOS即互補(bǔ)金屬氧化物半導(dǎo)體,它的設(shè)置、應(yīng)用和管理是保證系統(tǒng)正常工作的關(guān)鍵,下面就介紹一些有關(guān)CMOS的基本概念和應(yīng)用。
ROM BIOS和CMOS RAM芯片
ROM BIOS是固化在ROM中的BIOS(Basic
Input/Output
System,簡稱基本輸入/輸出系統(tǒng)),他控制著系統(tǒng)全部硬件的運(yùn)行,又為高層軟件提供基層調(diào)用,BIOS芯片是插在主板上的一個(gè)長方形芯片。其比較著名的生產(chǎn)廠家有:American
Megatrends INC.的AMI BIOS和Award Software INC.的AWARD BIOS。
存放在ROM BIOS中的內(nèi)容是不能被用戶修改的,它主要用于存放:自診斷測試程序、系統(tǒng)自舉裝入程序、系統(tǒng)設(shè)置程序和主要I/O設(shè)備的I/O驅(qū)動(dòng)程序及中斷服務(wù)程序。自診斷測試程序:它通過讀取系統(tǒng)主板上CMOS RAM中的內(nèi)容來識(shí)別系統(tǒng)硬件的配置,并根據(jù)這些配置信息對(duì)系統(tǒng)中的各個(gè)部件進(jìn)行自檢和初始化。在POST(Power―On Self加電自檢)過程中,如果CMOS RAM中的設(shè)置參數(shù)與系統(tǒng)實(shí)際配置的硬件不符,就會(huì)導(dǎo)致系統(tǒng)不能啟動(dòng)或不能正常工作。系統(tǒng)自舉裝入程序:該程序在系統(tǒng)自檢正確后將操作系統(tǒng)盤的引導(dǎo)記錄讀入內(nèi)存,然后由引導(dǎo)程序安裝操作系統(tǒng)的核心程序。系統(tǒng)設(shè)置程序:在系統(tǒng)引導(dǎo)后,適時(shí)用熱鍵(如Del)啟動(dòng)設(shè)置程序(SETUP),在這個(gè)設(shè)置程序中可對(duì)軟硬件參數(shù)進(jìn)行設(shè)置,然后由其存入CMOS RAM中。一般地,當(dāng)系統(tǒng)第一次加電;系統(tǒng)增加、減少或更換硬件;CMOS RAM因掉電、病毒、放電等原因造成內(nèi)容丟失;系統(tǒng)因需要而調(diào)整某些設(shè)置參數(shù)等原因時(shí)需要運(yùn)行SETUP程序。常見的SETUP程序有AMI BIOS SETUP、AWARD BIOS SETUP、AMI WINBIOS SETUP、QUADTEL BIOS SETUP等。主要I/O設(shè)備的I/O驅(qū)動(dòng)程序及中斷服務(wù)程序:主要為計(jì)算機(jī)的低端輸入/輸出和各種中斷提供服務(wù)。
CMOS RAM是一種互補(bǔ)金屬氧化物半導(dǎo)體隨即存儲(chǔ)器,它主要具有功耗低(每位約10毫微瓦)、可隨機(jī)讀取或?qū)懭霐?shù)據(jù)、斷電后用外加電池來保持存儲(chǔ)器的內(nèi)容不丟失、工作速度比動(dòng)態(tài)隨機(jī)存儲(chǔ)器(DRAM)高等特點(diǎn)。ROM BIOS對(duì)系統(tǒng)自檢初始化后,將系統(tǒng)自檢到的配置與CMOS RAM中的參數(shù)進(jìn)行比較,在早期的PC中,用主板上的一組DIP開關(guān)(以不同組合來代表系統(tǒng)硬件資源的配置情況)來完成現(xiàn)在的CMOS RAM功能,在286以后則基本全都采用了CMOS RAM來保存系統(tǒng)設(shè)置的參數(shù)。CMOS RAM一般為64字節(jié)或128字節(jié),用可充電的電池或外接電池(286機(jī)器用干電池較多,386以上的機(jī)器基本上都用充電電池了)對(duì)CMOS RAM芯片供電。
CMOS基本應(yīng)用
CMOS數(shù)據(jù)的備份:由于CMOS的數(shù)據(jù)是否正確關(guān)系到系統(tǒng)是否能正常啟動(dòng),所以對(duì)CMOS數(shù)據(jù)進(jìn)行定期備份是非常重要的。備份的最簡單方法是在SETUP程序中,用筆把各個(gè)參數(shù)記下來或者用屏幕硬拷貝(按Print
Screen鍵)的方法把各個(gè)設(shè)置界面打印出來。這里介紹一種用程序把數(shù)據(jù)備份下來的方法(以AMI BIOS為例,這些方法對(duì)其他的CMOS也適用;用Turbo C
2.0,下同):
/*把CMOS中的數(shù)據(jù)讀到A盤的CMOS.DAT文件中*/
#include "stdio.h"
main()
{ char cmos[64];FILE *fp;int i;
for (i=0;i<64;i++)
{ outportb(0x70,i);
cmos[i]=inportb(0x71);
}
fp=fopen("A:\CMOS.DAT","wb");
fwrite(&cmos[0],1,64,fp);
fclose(fp);
}
CMOS數(shù)據(jù)的恢復(fù):文件CMOS.DAT的內(nèi)容可以在GEBUG(或PCTOOLS等工具軟件)中顯示和編輯,也可將其再寫回CMOS,這里給出自動(dòng)寫回?cái)?shù)據(jù)的程序:
/*把A盤CMOS.DAT文件的數(shù)據(jù)寫回CMOS中*/
#include "stdio.h"
main()
{ char cmos[64];FILE *fp;int i;
fp=fopen("A:\CMOS.DAT","rb");
fread(&cmos[0],1,64,fp);
for (i=0;i<64;i++)
{ outportb(0x70,i);
outportb(0x71,cmos[i]);
}
fclose(fp);
}
破譯或摧毀CMOS口令:由于各種原因,有時(shí)需要破譯或者摧毀CMOS的口令,此時(shí)可以根據(jù)具體情況采取各種不同的方法。如果能啟動(dòng)系統(tǒng),但由于忘記或不知CMOS口令而無法進(jìn)入CMOS設(shè)置狀態(tài),此時(shí)可采用程序法來破譯CMOS的口令(由于程序較長,這里省略,如那位朋友有興趣請(qǐng)Mail to:zuiyue@263.net)。用程序摧毀CMOS密碼的設(shè)置:
/*摧毀CMOS密碼*/
#include <dos.h>
void far (*p)()=MK_FP(0xffff,0x0000);
main()
{ int i;
for (i=0x34;i<0x40;i++) outp(0x70,i);
out(0x71,0);
(*p)();
}
用DEBUG向端口發(fā)送數(shù)據(jù)的O命令向端口70h和71h發(fā)送一個(gè)數(shù)據(jù),也可以清除CMOS的設(shè)置,具體操作如下:
C:\>DEBUG
―O 70 10
―O 71 01
―Q
另外,也可以把上述操作用DEBUG寫成一個(gè)程序放在一個(gè)文件(如DELCMOS.COM)中,具體操作如下:
C:\>DEBUG
―A 100
XXXX:0100 MOV DX,70
XXXX:0103 MOV AL,10
XXXX:0105 OUT DX,AL
XXXX:0106 MOV DX,71
XXXX:0109 MOV AL,01
XXXX:010B OUT DX,AL
XXXX:010C
―R CX
CX 0000
: 0C
―N DELCMOS.COM
―W
Writing 000C bytes
―Q
以后,只要能用軟盤啟動(dòng)系統(tǒng),運(yùn)行DELCMOS.COM就能取消CMOS的設(shè)置。CMOS放電。如果由于人為原因或由于機(jī)器故障使CMOS被破壞,而又不能用軟盤啟動(dòng)系統(tǒng),即系統(tǒng)引導(dǎo)順序?yàn)椤癈:,A:”,或者Floppy Drive A:設(shè)置為Not Installed(或Disabled),系統(tǒng)不認(rèn)A驅(qū),這是便只有放電一途了。放電的方法有電池短接法、跳線短接法和芯片放電法。
更多建議: