BIOS
以intel8086為例浩淘,8086有20根地址線痘绎。一共可以訪問(wèn)到0x00000 - 0xFFFFF的地址空間泉哈,剛好1MB范圍蛉幸,但并未全部用于訪問(wèn)DRAM。其中大部分用于訪問(wèn)DRAM丛晦,一小部分用于訪問(wèn)只讀存儲(chǔ)器ROM(那里固化了開(kāi)機(jī)時(shí)需要執(zhí)行的指令奕纫。)和外圍的板卡。如圖所示:
8086加電或者復(fù)位時(shí)烫沙,CS = 0XFFFF匹层,IP = 0X0000,所以第一條指令位于物理地址0xFFFF0正好位于ROM中锌蓄,一般是一個(gè)跳轉(zhuǎn)指令升筏,跳轉(zhuǎn)到ROM低端區(qū)域。ROM內(nèi)容包括很多部分煤率,主要進(jìn)行硬件的診斷仰冠,檢測(cè)和初始化。當(dāng)它完成自己工作后蝶糯,最后要做的就是從輔存中讀取指令數(shù)據(jù)(內(nèi)核自舉代碼)洋只,然后轉(zhuǎn)到那里執(zhí)行。
主引導(dǎo)扇區(qū)
接上文昼捍,BIOS要從輔存中加載指令數(shù)據(jù)识虚,然后再跳轉(zhuǎn)到那里加載的地址,執(zhí)行指令妒茬。這里輔存以硬盤(pán)為例担锤,硬盤(pán)的第一個(gè)扇區(qū)稱之為主引導(dǎo)扇區(qū),BIOS將把該扇區(qū)的內(nèi)容加載到0X0000:0X7C00乍钻,即物理地址:0x07C00肛循。然后判斷該扇區(qū)是否有效,有效的主引導(dǎo)扇區(qū)最后的2字節(jié)內(nèi)容是0x55和0xAA银择。如果有效就會(huì)使用jmp指令跳轉(zhuǎn)至0x07C00多糠。主引導(dǎo)扇區(qū)里面應(yīng)該是內(nèi)核自舉的代碼指令。然后內(nèi)核接管一切浩考,完成后續(xù)操作夹孔。
這里也有點(diǎn)意思,想像一下,我們的程序執(zhí)行一定需要操作系統(tǒng)(內(nèi)核)嗎搭伤?不一定只怎,假設(shè)主引導(dǎo)扇區(qū)內(nèi)容不是內(nèi)核,而是一段小程序怜俐。只要最后2字節(jié)數(shù)據(jù)是0x55和0xAA身堡,那么這段程序依然能運(yùn)行。所以程序使能夠脫離操作系統(tǒng)(內(nèi)核)而執(zhí)行的佑菩。這也從另一個(gè)側(cè)面說(shuō)明了為什么操作系統(tǒng)會(huì)被發(fā)明出來(lái)盾沫。
顯卡和顯存
順帶說(shuō)下顯示的東西裁赠。
- 圖形模式
顯卡有自己的存儲(chǔ)即顯存殿漠,顯存里面放的二進(jìn)制數(shù)據(jù),比如第1個(gè)字節(jié)對(duì)應(yīng)屏幕左上角連續(xù)的8個(gè)像素佩捞,第二個(gè)字節(jié)對(duì)應(yīng)后續(xù)的8個(gè)像素绞幌,以此類(lèi)推。(1個(gè)二進(jìn)制位對(duì)應(yīng)像素的亮暗)一忱。- - 文本模式
與之對(duì)應(yīng)的還有中方式是:顯存里第一字節(jié)存放字符編碼(ACISS)莲蜘,第二字節(jié)存放編碼控制字符顯示樣式。以此類(lèi)推帘营。
為了顯示數(shù)據(jù)票渠,CPU需要訪問(wèn)顯存,但顯存位于顯卡上芬迄,訪問(wèn)顯存則需要和顯卡設(shè)備打交道问顷,這樣總會(huì)影響速度和效率。于是后來(lái)就決定把顯存也映射至處理器可以直接訪問(wèn)的地址空間禀梳。傳統(tǒng)上杜窄,0xB8000 ~ 0xBFFFF時(shí)留給顯卡的。這樣就可以直接用mov指令直接寫(xiě)數(shù)據(jù)算途。當(dāng)我們把字符寫(xiě)在這一塊時(shí)塞耕,屏幕上就會(huì)顯示出我們想要的內(nèi)容。