在x86架構下曾經有用assembly寫bootloader的程式,一定會遇到這樣的經驗.當PC一上電,BIOS會先初始化所有周邊的硬體並檢查周邊設備是否正常,如果周邊硬體有發生問題BIOS會發出警訊(蜂鳴器的聲音),如果沒有錯誤訊息,BIOS就繼續讀取由BIOS所設定的第一讀取的儲存裝置.如果設定第一讀取裝置是硬碟,BIOS就會讀取硬碟上面的第一個磁區第一個sector的程式碼也就是MBR並放到記憶體位址0x7c00上面.接下來CPU就會執行0x7c00上面的程式碼.比如是bootloader的程式或是載入os的程式.
那為什麼要將MBR放到0x7c00位址上呢?為什麼不是在其他記億體其它位址上呢??到底是誰制定此位址呢?而放在這個地方有什麼意義呢 ?
這要從IBM PC 5150 的BIOS說起.IBM PC5150可以說是現代電腦的祖先.因為當時的BIOS ROM就已經製訂到將MBR放置到0x7c00的位置上.也就是說0x7c00是BIOS內部早就規定的.當然這個位址也可以更改成其他的位置上,但是必須要考慮到程式的相容性.
參考網站:
http://www.glamenv-septzen.net/en/view/6
No comments:
Post a Comment