2009年3月30日 星期一

●瞭解幾個資料結構


瞭解幾個資料結構
一、BIOS的簡短介紹。
1、IBM推出個人電腦,簡稱:IBM PC。定義了BIOS規範。最初的BIOS由IBM工程師獨立完成。後來為了普及IBM PC,IBM 公開了PC內部結構以及BIOS的程式設計規範,介面並鼓勵協助各廠商開發BIOS
2、各BIOS廠商迅速崛起,代表廠商有:AMI、Award、Phoenix等。逐漸發展成為一個小廠商被大廠商吞併的時代。
3、BIOS的基於工作任務:
● POST:開機自檢
● 初始化階段:對DRAM、晶片組,週邊設備等設置
● 保存相應資料:在COMS RAM 及 BIOS 資料區保存相應的資料
● 駐入服務常式:寫入中斷向量表及BIOS的插斷服務常式等

二、 中斷向量表
1、BIOS啟動初期的一個重要工作就是在記憶體最低端設置相應的BIOS中斷向量表,若啟動了DOS系統,DOS的系統還負責設置相應的DOS中斷向量表,典型的代表是INT 21h服務。
2、中斷服務程式獲取的演算法:
● Interrupt Handler = IDTR.base + vector × vector size
● X86 支持 256(FF)中斷。
● 處理器RESET 後處於 16 位real mode,IDTR.base 初化為 0,因此:整個BIOS 及 DOS 系統的中斷向量表位於:0 + 0 × 4 ~ 0 + FF × 16,也就是 0 ~ 3FFh 的物理位址。

3、BIOS及DOS的整個中斷向量表佈局如下(0 ~ 3FF):
中斷號 位址 說明
00 0000 除0錯
01 0004 單步執行
02 0008 不可遮罩中斷
03 000C 中斷點調試
04 0010 溢出中斷
05 0014 BIOS列印螢幕中斷
06 0018 無效指令錯
07 001C 無效浮點指令
08 0020 IRQ0 計時器中斷
09 0024 IRQ1 鍵盤中斷
0A 0028 IRQ2 串聯次中斷控制器
0B 002C IRQ3 COM2
0C 0030 IRQ4 COM1
0D 0034 IRQ5 LPT2
0E 0038 IRQ6 軟碟控制卡
0F 003C IRQ7 LPT1
10 0040 BIOS 視頻服務常式
11 0044 BIOS 週邊設備檢查
12 0048 BIOS 檢測記憶體大小
13 004C BIOS 磁片常式
14 0050 BIOS 通信服務常式
15 0054 BIOS 擴展系統常式
16 0058 BIOS 鍵盤服務常式
17 005C BIOS 列印服務常式
18 0060 ROM BASIC 常式
19 0064 引導系統
1A 0068 BIOS 時間/RTC
1B 006C BIOS Ctrl-Break處理常式
1C 0070 Int 8h調用的計時子常式
1D 0074 視頻參數表
1E 0078 軟碟機參數表
1F 007C 字元點陣表
20 0080 DOS 程式終止
21 0084 DOS 系統服務常式
22 0088 DOS 程式結束位址
23 008C DOS Ctrl-Break處理常式
24 0090 DOS 程式嚴重錯誤處理
25 0094 DOS 讀磁片常式
26 0098 DOS 寫磁片常式
27 009C DOS TSR
28 00A0 DOS 空閒中斷
29 00A4 DOS 字元輸出
2A 00A8 網路介面
2B ~ 2D 00AC ~ 00B4 保留
2E 00B8 DOS Shell傳遞參數
2F 00BC DOS 多重功能中斷
30 00C0 保留
31 00C4 DOS 保護模式介面
32 00C8 保留
33 00CC 滑鼠服務常式
34 ~ 3E 00D0 ~ 00F8 浮點模擬運算攔截碼入口
3F 00FC 覆蓋管理
40 0100 軟碟中斷服務
41 0104 硬碟1參數表
42 0108 視頻中斷(用於EGA)
43 010C EGA 參數表
44 0110 EGA 點陣字元表
45 0114 保留
46 0118 硬碟2參數表
47 ~ 49 011C ~ 0124 保留
4A 0128 CMOS/RTC 報警中斷
4B ~ 66 012C ~ 0198 保留
67 019C 擴充記憶體管理員
68 ~ 6F 01A0 ~ 01BC 保留
70 01C0 IRQ8 CMOS/RTC 中斷
71 01C4 IRQ9 重定向到 Int 0A
72 01C8 IRQ10 PnP設備
73 01CC IRQ11 PnP 設備
74 01D0 IRQ12 PS/2、USB 設備使用
75 01D4 IRQ13 數字輔助處理器
76 01D8 IRQ14 IDE設備
77 01DC IRQ15 IDE 設備
78 ~ FF 01E0 ~ 03FC 保留

4、關於中斷向量表的後續話題
1)中斷向量表的重定位:Interrupt Vector Table 的基底位址存儲在 IDTR寄存器。Processor 復位後,IDTR.base = 0。也即中斷向量表在物理位置0位址上。中斷向量表的基底位址可以通過 LIDT 指令更改。但真實模式的DOS系統不作出任何改變。
2)中斷向量表的變遷:保護模式的現代作業系統重新對中斷向量表進行了定位。Interrupt Vector Table 被 Interrupt Descriptor Table 取代了。前者是存放真實的中斷服務程式的入口位址。後者是存放的稱為門符的描述符結構。描述符定義了相應的屬性及許可權。真實的中斷服務程式被門符間接索引。
3)中斷向表的變遷:時至今日,中斷體系的變遷,保護模式下的中斷向量的含義大部分發生了改變。如:13號向量是 #GP(General Protection)異常。發生了如系統資料結構產生違例訪問或越權訪問等就產生保護異常。
4)中斷向量表結構:中斷向量表以及中斷服務程式依然位於記憶體的低位元。這份由BIOS維護的中斷向量表結構只在系統啟動初期產生一些作用。成功引導作業系統後,將被作業系統所拋棄,作業系統將建立屬於自己的一套中斷向量表以及中斷服務程式。典型的是Linux 系統定義了 80h 號向量作為system call 門符。

三、CMOS 資料區域
CMOS 資料區存放一些基本系統資料,如RTC(真實的時間戳記),它是一個主機板上的一個RAM,為了使CMOS RAM裡面的資料不丟失,主機板上提供了一個電池供電。

1、CMOS RAM 的訪問方式
訪問 CMOS RAM 是過I/O 埠在IO Space進行的,CMOS RAM 大小為128 位元組,位址範圍從0 ~ 7Fh。
● 70h 埠:這個埠是個索引位址埠,通過向這個埠輸送一個位址值,這個位址值位於 CMOS RAM裡。
位址索引值的結構如下:
Bit7:最高位為 NMI Disable 位。置1則 Disable NMI
Bit6 ~ 0:CMOS RAM 位址索引,範圍從 0 ~ 7Fh
● 71h 埠:這個埠是資料埠。從這個埠獲取71h埠輸送索引位址的內容。
● 72h 埠:這個埠如同71h埠一樣,但這個埠可以訪問整個256位元組空間。也就是它的Bit7是有效索引值。
● 73h 埠:這個埠如同72h 埠一樣,獲取從72埠輸送索引位址的內容。

錯誤:此處有誤,謝謝 zx_wing 指出.
正確為:
● 72h 埠:這個埠如同70h埠一樣,但這個埠可以訪問整個256位元組空間。也就是它的Bit7是有效索引值。
● 73h 埠:這個埠如同71h 埠一樣,獲取從72埠輸送索引位址的內容。

2、CMOS RAM 資料內容
位址索引 含義
00 ~ 09h 相應的系統時間域

0A Bit7:0-時間可讀 1-等待更新再讀
Bit6 ~ 4:除法器頻率
Bit3 ~ 0:時間中斷頻率

0B Bit7:0-設定時間,但仍在計時狀態 1-設定時間,但在停止計時狀態
Bit6:同期性中斷,0-Disable 1- Enable
Bit5:時間警報中斷,0 – Disable 1-Enable
Bit4:1-允許中斷在更新時間時 0-Disable
Bit3:方波設定 0 – Disable 1-Enable
Bit2:日期/時間格式 0 – BCD格式 1- Binary格式
Bit1:時間制式 0- 12時制 1- 24時制
Bit0:日光節約時間 0-Disable 1-Enable

0C Bit7:IRQ標誌
Bit6:週期性中斷標誌
Bit5:警報中斷標誌
Bit4:更新中斷標誌
Bit3~0:保留

0D Bit7:CMOS RAM內容正常性,0正常 1-異常
Bit6~0:保留,為0

0E Bit7:CMOS/RTC 晶片電源,0正常 1異常
Bit6:CMOS RAM CheckSum 0 正常 1 異常
Bit5:CMOS RAM 配置狀態,0配置與檢測的一致 1不一致
Bit4:CMOS RAM 記憶體狀態,0記錄的記憶體與檢測一致 1不一致
Bit3:硬碟C啟動狀態 0啟動通過可Boot 1失敗,無法Boot
Bit2:時間記錄 0 正常無誤 1記錄異常
Bit1~0:保留,為0

0F 00: 軟體重定
01:真實模式/保護模式下發生RESET或實模下晶片組初始化時發生RESET
02:真實模式/保護模式下記憶體檢查通過後RESET
03:真實模式/保護模式下記憶體檢查失敗後RESET
04:通過INT 19h 重新開機(Boot)
05:清除鍵盤中斷(EOI),跳到40:67記錄的位置
06:保護模式下測試成功後RESET跳到40:67記錄的位置
07:保護模式下測試失敗後RESET
08:由POST切到保護模式下進行記憶體檢測
09:BIOS INT1使用
0A:返回跳到40:67記錄的程式入口
0B:IRET回到40:67 記錄的程式入口
0C:RET回到40:67記錄的程式入口

0D~FF: 上電時初始復位

10h ~ 2Fh ISA系統組態

30h ~ 3Fh BIOS設置

40h ~ 7Fh 晶片組配置


四、BIOS 記錄資料區域
1、如下圖所示,緊接著中斷向量表結構的是BIOS用來記錄資料的區域,位址範圍:400h ~ 600h 共 512 位元組。這個區域被 BIOS 用來檢測系統狀態而記錄使用的區域,以及 BIOS 定義的某些資料結構(例如:鍵盤緩衝區)。
2、在 BIOS 執行初期 BIOS 將檢測 BIOS 資料區域的某些資料確定當前機器狀態。例如:BIOS 通過檢查 [0472] 的內容是否是 1234H 從而確定機器是暖開機還是冷開機。
3、BIOS 定義了鍵盤緩衝區在 01Eh 開始的 32 個位元組的。

沒有留言:

張貼留言