RAM:隨機存取存儲器,常見的內存條就是一類RAM,其特點是加電狀態下可任意讀、寫,斷電后信息消失。
在RAM中什么程序也沒有的時候,誰來完成加載軟盤中操作系統的任務呢?
答案是:BIOS。
BIOS的啟動原理
在了解BIOS是如何將操作系統程序加載到內存中之前,我們先來了解一下BIOS程序自身是如何啟動的。從我們使用計算機的經驗得知:要想執行一個程序,必須在窗口中雙擊它,或者在命令行界面中輸入相應的執行命令。從計算機底層機制上講,其實是在一個已經運行起來的操作系統的可視化界面或命令行界面中執行一個程序。但是,在開機加電的一瞬間,內存中什么程序也沒有,沒有任何程序在運行,不可能有操作系統,更不可能有操作系統的用戶界面。我們無法人為地執行BIOS程序,那么BIOS程序又是由誰來執行的呢?
秘訣是:0xFFFF0 !!!
從體系的角度看,不難得出這樣的結論:既然用軟件方法不可能執行BIOS,就只能靠硬件方法完成了。從硬件角度看,Intel 80x86系列的CPU可以分別在16位實模式和32位保護模式下運行。為了兼容,也為了解決最開始的啟動問題,Intel將所有80x86系列的CPU,包括最新型號的CPU的硬件都設計為加電即進入16位實模式狀態運行。同時,還有一點非常關鍵的是,將CPU硬件邏輯設計為加電瞬間強行將CS的值置為0xF000、IP的值置為0xFFF0,這樣CS:IP就指向0xFFFF0這個地址位置,如 1-1所示。從圖1-1中可以清楚地看到,0xFFFF0指向了BIOS的地址范圍。

圖1-1 啟動時BIOS在內存的狀態及初始執行位置
小貼士
IP/EIP(Instruction Pointer):指令指針寄存器,存在于CPU中,記錄將要執行的指令在代碼段內的偏移地址,和CS組合即為將要執行的指令的內存地址。實模式為絕對地址,指令指針為16位,即IP;保護模式下為線性地址,指令指針為32位,即EIP。
CS(Code Segment Register):代碼段寄存器,存在于CPU中,指向CPU當前執行代碼在內存中的區域(定義了存放代碼的存儲器的起始地址)。
注意,這是一個純硬件完成的動作!如果此時這個位置沒有可執行代碼,那么就什么也不用說了,計算機就此死機。反之,如果這個位置有可執行代碼,計算機將從這里的代碼開始,沿著后續程序一直執行下去。
BIOS程序的入口地址恰恰就是0xFFFF0 ! 也就是說,BIOS程序的第一條指令就設計在這個位置。