BIOS 淺談CMOS

2018-08-03 11:34 更新

淺談CMOS


本文作者:趙江波

大家都知道,在286以上的計算機中,一般都有一個CMOS RAM電路,它用于關(guān)機以后繼續(xù)存放日期、時間、內(nèi)存設(shè)置、軟硬盤類型及其他許多有用的設(shè)置信息。CMOS即互補金屬氧化物半導體,它的設(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)全部硬件的運行,又為高層軟件提供基層調(diào)用,BIOS芯片是插在主板上的一個長方形芯片。其比較著名的生產(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ū)動程序及中斷服務(wù)程序。自診斷測試程序:它通過讀取系統(tǒng)主板上CMOS RAM中的內(nèi)容來識別系統(tǒng)硬件的配置,并根據(jù)這些配置信息對系統(tǒng)中的各個部件進行自檢和初始化。在POST(Power―On Self加電自檢)過程中,如果CMOS RAM中的設(shè)置參數(shù)與系統(tǒng)實際配置的硬件不符,就會導致系統(tǒng)不能啟動或不能正常工作。系統(tǒng)自舉裝入程序:該程序在系統(tǒng)自檢正確后將操作系統(tǒng)盤的引導記錄讀入內(nèi)存,然后由引導程序安裝操作系統(tǒng)的核心程序。系統(tǒng)設(shè)置程序:在系統(tǒng)引導后,適時用熱鍵(如Del)啟動設(shè)置程序(SETUP),在這個設(shè)置程序中可對軟硬件參數(shù)進行設(shè)置,然后由其存入CMOS RAM中。一般地,當系統(tǒng)第一次加電;系統(tǒng)增加、減少或更換硬件;CMOS RAM因掉電、病毒、放電等原因造成內(nèi)容丟失;系統(tǒng)因需要而調(diào)整某些設(shè)置參數(shù)等原因時需要運行SETUP程序。常見的SETUP程序有AMI BIOS SETUP、AWARD BIOS SETUP、AMI WINBIOS SETUP、QUADTEL BIOS SETUP等。主要I/O設(shè)備的I/O驅(qū)動程序及中斷服務(wù)程序:主要為計算機的低端輸入/輸出和各種中斷提供服務(wù)。 

CMOS RAM是一種互補金屬氧化物半導體隨即存儲器,它主要具有功耗低(每位約10毫微瓦)、可隨機讀取或?qū)懭霐?shù)據(jù)、斷電后用外加電池來保持存儲器的內(nèi)容不丟失、工作速度比動態(tài)隨機存儲器(DRAM)高等特點。ROM BIOS對系統(tǒng)自檢初始化后,將系統(tǒng)自檢到的配置與CMOS RAM中的參數(shù)進行比較,在早期的PC中,用主板上的一組DIP開關(guān)(以不同組合來代表系統(tǒng)硬件資源的配置情況)來完成現(xiàn)在的CMOS RAM功能,在286以后則基本全都采用了CMOS RAM來保存系統(tǒng)設(shè)置的參數(shù)。CMOS RAM一般為64字節(jié)或128字節(jié),用可充電的電池或外接電池(286機器用干電池較多,386以上的機器基本上都用充電電池了)對CMOS RAM芯片供電。

 
CMOS基本應(yīng)用
CMOS數(shù)據(jù)的備份:由于CMOS的數(shù)據(jù)是否正確關(guān)系到系統(tǒng)是否能正常啟動,所以對CMOS數(shù)據(jù)進行定期備份是非常重要的。備份的最簡單方法是在SETUP程序中,用筆把各個參數(shù)記下來或者用屏幕硬拷貝(按Print Screen鍵)的方法把各個設(shè)置界面打印出來。這里介紹一種用程序把數(shù)據(jù)備份下來的方法(以AMI BIOS為例,這些方法對其他的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ù)的恢復:文件CMOS.DAT的內(nèi)容可以在GEBUG(或PCTOOLS等工具軟件)中顯示和編輯,也可將其再寫回CMOS,這里給出自動寫回數(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口令:由于各種原因,有時需要破譯或者摧毀CMOS的口令,此時可以根據(jù)具體情況采取各種不同的方法。如果能啟動系統(tǒng),但由于忘記或不知CMOS口令而無法進入CMOS設(shè)置狀態(tài),此時可采用程序法來破譯CMOS的口令(由于程序較長,這里省略,如那位朋友有興趣請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ā)送一個數(shù)據(jù),也可以清除CMOS的設(shè)置,具體操作如下:

C:\>DEBUG
―O 70 10
―O 71 01
―Q

另外,也可以把上述操作用DEBUG寫成一個程序放在一個文件(如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

以后,只要能用軟盤啟動系統(tǒng),運行DELCMOS.COM就能取消CMOS的設(shè)置。CMOS放電。如果由于人為原因或由于機器故障使CMOS被破壞,而又不能用軟盤啟動系統(tǒng),即系統(tǒng)引導順序為“C:,A:”,或者Floppy Drive A:設(shè)置為Not Installed(或Disabled),系統(tǒng)不認A驅(qū),這是便只有放電一途了。放電的方法有電池短接法、跳線短接法和芯片放電法。

  • 電池短接法:如果利用可拆卸電池供電,可以把電池拔下,用一根導線將電池插座兩端短路,對電路中的電容放電,使CMOS RAM中的信息被清除;如果電池被焊死在主板上,就必須用電烙鐵和吸錫器拔開電池的一個管腳來放電。需說明的是,電池短接法必須在短電的情況下進行,此法對一般用戶是不可取的,因為拆卸和焊接電池時可能造成主板的損壞、短路、斷路等問題,建議用下面的跳線短接法給CMOS放電。
  • 跳線短接法:在電池附近有一個跳線開關(guān),跳線旁邊注有RESET CMOS、CLEAN CMOS、CMOS CLOSE或CMOS RAM RESET等字樣,跳線開關(guān)一般為四腳,有的在1、2兩腳上有一個跳接器,此時將其拔下接到2、4腳上即可放電;有的所有腳上都沒有跳接器,此時將2腳于充電電容短接即可放電。
  • 芯片短接法:開機后運行CMOS的SETUP命令全是由于機內(nèi)一塊芯片的作用,此芯片一般位于主板的左上方,很容易找到。找到后,用一段裸露的銅絲線,在管腳上快速劃過,可多劃幾次,這樣CMOS所設(shè)置的參數(shù)便以丟失,開機后重新設(shè)置各參數(shù)即可。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號