第15章 cmos 記憶體和實時時鐘 筆記
簡介
系統帶有乙個小型的cmos記憶體,其中儲存著系統斷電時的資料。該記憶體用來記錄軟盤的型別和數目、硬碟大小資訊、記憶體大小以及其他重要的系統資料。cmos晶元還含有乙個實時時鐘(rtc),用來保持當前時間。關掉電源時,rtc由計算機內部的電池供電。電池保持時鐘處於活動狀態,以及保留cmos記憶體內容。如果在斷電時電池無法正常供電,將丟失cmos內容。在bios系統上電自檢(post)期間,大多數bios會識別出這一點。
實時時鐘(rtc)的常用資訊有十個暫存器用來訪問rtc時間和資料。所有的時鐘暫存器採用bcd (二進位制編碼的十進位制)格式。
另外四個暫存器用來儲存時鐘、鬧鐘和cmos記憶體的狀態和控制資訊。狀態和控制暫存器稱作暫存器a、b、c和d 。rtc有許多古怪之處,要求專門的程式設計來保證訪問可靠。使用下面描述的rtc bios來避免這些令人頭疼的問題,我極力推薦這樣做.通過i/o埠70h裝入任何資料或時間暫存器時,必須停止時鐘。這一點可以防止在設定新的日期或時間期間更新暫存器。要停止時鐘,可以將暫存器b的第7位設定為1。更新完成時,將暫存器b的第7位設定為0來啟用時鐘。
警告
中斷在訪問cmos暫存器時必須禁止所有的中斷。訪問乙個cmos暫存器時,埠70h用於選擇使用哪個暫存器。然後通過埠71h讀或寫這個暫存器。如果在兩個i/o埠訪問之間出現了中斷,並且中斷處理程式會訪問cmos,你的**將會讀或寫錯誤的暫存器。
除了禁止中斷之外,還要禁止不可遮蔽中斷(nmi)。nmi主要用於陷入ram奇偶錯誤和數字協處理錯誤。在訪問cmos時很可能出現這些情況。不幸的是,nmi禁止是乙個只寫標誌,所以前面的狀態無法知道。每個人常用的方法是假定nmi是開放的,這就意味著在訪問cmos後總會開放nmi。
在觀察訪問乙個cmos暫存器的步驟時,你必須首先使用cli指令禁止中斷。選擇cmos暫存器時應禁止了nmi,恰巧由埠70h的位7控制nmi,這個埠和指定cmos暫存器的埠相同。cmos訪問完成時,再次寫埠70h,並清除位7,來重新開放nmi。
然後使用sti指令來開放一般的中斷。在下面的程式read_cmos 和 write_cmos 中考慮了以上這些問題。
(有些chipset支援256 bytes的cmos ram,訪問128bytes以後的空間需要開啟chipset的始能register,有些chipset使用72h,73h訪問擴充套件的空間如intel chipset,有些仍然使用70h,71h如sis chipset)
**例15-1 讀cmos
;----------------------------------
;read_cmos
;讀取指定cmos暫存器的內容
;;呼叫:al=要讀取的cmos位址
;;返回:ah=暫存器的內容
; 開放nmi,如果禁止
read_cmos proc near
or al, 80h ;禁止nmi
cli ;禁止中斷
out 70h,al ;要讀取的暫存器
iodelay
in al, 71h ;返回暫存器的內容
mov ah,al
mov al,0
iodelay
out 70h,al ;開放nmi
sti ;開放中斷
retread_cmos endp
**例 15-2 寫cmos
;-------------------------------
; write_cmos
;; 呼叫:al=要寫入的cmos暫存器
; ah=要寫入的值
;; 返回:nmi開放,如果禁止
write_cmos proc near
cli ;禁止中斷
or al,80h ;禁止nmi
out 70h,al ;al=要寫的暫存器
mov al,ah
iodelay
out 71h,al ;寫暫存器
mov al,0
iodelay
out 70h,al ;開放nmi
sti ;開放中斷
retwrite_cmos endp
cmos 求和校驗
許多bios**商,例如ami和phoenix,將從10h到2dh的cmos暫存器加起來,並將這個和值字儲存在暫存器2eh和2fh中。暫存器2eh儲存著高位校驗位元組,而暫存器2fh儲存著低位校驗位元組。
網上有很多盛傳的用debug 命令破解cmos密碼的方法,正是基於此原理,利用破壞cmos的校驗值來達到清除cmos密碼的目的。
RTC實時時鐘
rtc的英文全稱是real time clock,翻譯過來是實時時鐘晶元.rtc是pc主機板上的晶振及相關電路組成的時鐘電路的生成脈衝,rtc經過8254電路的變頻產生乙個頻率較低一點的os 系統 時鐘tsc,系統時鐘每乙個cpu週期加一,每次系統時鐘在系統初起時通過rtc初始化。8254本身工作也...
RTC實時時鐘
系統在斷電後 需要rtc電池計時間並在系統啟動後 將這個時間給到系統時間。以此維護系統斷電後與現實時間同步 一般rtc電池需要3v的電壓 若經過擴充套件板連線 需要測量此電壓是否給到主控晶元 然後date命令可以檢視系統時間 date s 2008 08 08 12 00 00 可以通過這個命令修改...
實時時鐘RTC
1.簡述 外圍裝置控制器晶元 ich 內部,整合了實時時鐘電路 rtc 以及兩個cmos組成的靜態儲存器 cmos ram 通常為128b rtc負責計時,由1個32.768khz的石英晶體振盪器驅動,經分頻後用於cmos ram進行每秒一次的時間重新整理 cmos ram中時間資訊如下表所示,前1...