簡體   English   中英

BIOS 是否將 512 字節的引導加載程序復制到 0x7c00

[英]Does the BIOS copy the 512-byte bootloader to 0x7c00

我正在編寫內核; 在寫這么復雜的東西之前,我認為對內核、引導加載程序、寄存器、BIOS 等進行一些理論閱讀不僅有幫助,而且是必不可少的。

這篇文章說(我引用):

The boot sector loader. 
This loads the first 512-byte sector from the boot disk into RAM and jumps to it.

然后接着說:

The first sector of a diskette can be loaded at address 0000:7C00. 

因此,引導扇區加載程序將位於內存地址 0x7C00(如果我是對的)的軟盤數據的 512 字節加載到 RAM 中; 現在,我的問題是:

  • 由於機器正在啟動,RAM必須是空的,所以它加載在 RAM 的 0x0000 處的引導加載程序?
  • (與此上下文並不真正相關)有沒有辦法獲得 GRUB Legacy (v .9x) 引導加載程序的源代碼解釋?
  • 最后,我應該閱讀哪些文章/書籍來熟悉內核等?

我有 6 年的編程經驗,但他們都在系統上使用高級語言,這是由內核實現的。

任何幫助表示贊賞。 謝謝! :)

...引導扇區加載程序將位於內存地址 0x7C00(如果我是對的)的軟盤數據的 512 字節加載到 RAM 中

...

由於機器正在啟動,RAM 必須是空的,所以它加載在 RAM 的 0x0000 處的引導加載程序?

No. 0000:7C00指的是RAM 地址 RAM 的意思是“隨機存取存儲器”,意思是可以直接訪問存儲器中的每個位置。 沒有什么像“空 RAM”這樣的東西。 也可以參考INT13中斷函數“Read Sectors From Drive” :其中一個參數(傳入ES:BX )需要指向存儲扇區內容的目的地址。 因此,BIOS 所做的是從驅動器加載 512 字節並將其存儲到0000:7C000000:7DFF ,然后跳轉到0000:7C00以執行主引導加載程序代碼。

我應該閱讀任何文章/書籍以熟悉內核等?

這個 Wiki 非常有用: http : //wiki.osdev.org/Main_Page 對於引導過程,請查看http://wiki.osdev.org/Boot_Sequence

由於機器正在啟動,RAM 必須是空的,所以它加載在 RAM 的 0x0000 處的引導加載程序?

即使是開始,RAM也不會為空。 因此它將無法使用 0x00000。 因為在 O/S 執行 BIOS 之前,也會在 RAM 中創建中斷表。 (這就是為什么您可以按 f2、f10 或刪除等鍵並進入 BIOS 設置。如果沒有中斷處理程序,您將無法這樣做。)。 這就是為什么 RAM 不為空的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM