计算机的启动过程———《x86汇编语言:从实模式到保护模式》读书笔记补遗01
有的朋友問(wèn)我,為什么讀書(shū)筆記不從第一章開(kāi)始寫(xiě)?這個(gè)問(wèn)題啊…當(dāng)初覺(jué)得前面的內(nèi)容不是很重要,就沒(méi)有寫(xiě)。
我真是高估自己的記憶力了,隨著時(shí)間的推移,發(fā)現(xiàn)前面好多內(nèi)容都生疏了,有的朋友問(wèn)我問(wèn)題我都答不上來(lái)。所以,決定再補(bǔ)充一些筆記。即幫助自己回憶,也能方便初學(xué)者。
下面進(jìn)入正題。
你有沒(méi)有想過(guò)這樣一個(gè)問(wèn)題——計(jì)算機(jī)是怎么開(kāi)始執(zhí)行我們寫(xiě)的指令的?
這就需要了解計(jì)算機(jī)的啟動(dòng)過(guò)程了。
對(duì)于32位的x86處理器,在加電啟動(dòng)時(shí),段寄存器CS的內(nèi)容是0xF000,IP寄存器的內(nèi)容為0xFFF0,按照實(shí)模式地址的合成方法,給出的地址就是0xFFFF0;另外,在剛啟動(dòng)的時(shí)候,處理器會(huì)將地址線A20~A31強(qiáng)制為高電平,所以,初始發(fā)出的物理地址就是0xFFFF_FFF0;這個(gè)地址存放的就是BIOS的第一條指令。
在Bochs上,可以看到第一條指令是
jmpf 0xf000:e05bBIOS需要做的工作有很多,比如
1)初始化各種主板芯片組
2)初始化鍵盤(pán)控制器8042
3)初始化中斷向量 ,中斷服務(wù)例程.
4)初始化 VGA BIOS 控制器
5)顯示BIOS的版本和公司名稱
6)掃描軟驅(qū)和各種介質(zhì)容量
7)讀取CMOS的啟動(dòng)順序配置,并檢測(cè)啟動(dòng)裝置是否正常
8)調(diào)用INT 19h啟動(dòng)自舉程序
對(duì)于匯編語(yǔ)言的學(xué)習(xí),需要了解最后兩個(gè)步驟,(7)和(8)。
BIOS按照”啟動(dòng)順序”,選擇排在第一位的儲(chǔ)存設(shè)備,讀取該設(shè)備的第一個(gè)扇區(qū)(512B)到內(nèi)存0x7c00(物理地址)處,然后檢查這512個(gè)字節(jié)的最后兩個(gè)字節(jié)是不是0x55和0xAA,如果是則表明這個(gè)設(shè)備可以用于啟動(dòng),這個(gè)扇區(qū)就是主引導(dǎo)扇區(qū);如果不是,則繼續(xù)嘗試”啟動(dòng)順序”中的下一個(gè)設(shè)備。
如果確實(shí)是可以啟動(dòng)的設(shè)備,則用一個(gè)華麗的JMP指令跳到0x0000:0x7c00處執(zhí)行。
jmp 0x0000:0x7c00以后的實(shí)驗(yàn),我們都是從主引導(dǎo)扇區(qū)開(kāi)始寫(xiě)代碼。所以,當(dāng)計(jì)算機(jī)將要執(zhí)行我們寫(xiě)的第一條指令的時(shí)候,請(qǐng)牢記此時(shí)CS=0x0000,IP=0x7c00.
【完】
總結(jié)
以上是生活随笔為你收集整理的计算机的启动过程———《x86汇编语言:从实模式到保护模式》读书笔记补遗01的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 描点链接
- 下一篇: 表达式求值(最详细分析+代码实现+表达式