2012-06-24 31 views
6

我在互聯網上的某處讀到,在跳到0x7c00之前,BIOS將引導設備的「驅動器號」加載到%dl中。但是這個「驅動器號碼」是什麼?連接到計算機的每個設備都由BIOS分配一個編號?如果是這樣,我怎麼知道給定設備分配了哪個號碼?PC引導:dl寄存器和驅動器號

讀取GRUB的源代碼當%dl設置了位0x80和0x70時,它發現它覆蓋整個寄存器0x80。這是爲什麼?這裏是代碼:

jmp 3f  /* grub-setup may overwrite this jump */ 
testb $0x80, %dl 
jz 2f 
3: 
/* Ignore %dl different from 0-0x0f and 0x80-0x8f. */ 
testb $0x70, %dl 
jz 1f 
2:  
movb $0x80, %dl 
1: 

順便說一句。有沒有關於網絡上電腦啓動過程的詳細資料?特別是在將控制權交給引導加載程序之前,BIOS以及用於與之通信的標準代碼(如「驅動器編號」)所做的工作。我希望能寫自己的引導程序,而且我發現的所有內容都有點太模糊,而且技術性不夠,無法通知我的引導加載程序開始運行時計算機的確切狀態。

回答

3

BIOS int 13h函數接受驅動器號。它應該是DL中的那種驅動器號,一個BIOS可以理解,因爲它本身使用int 13h來加載啓動扇區。

+0

好的。我知道BIOS知道它,但我也想明白。 :)我想知道的是這些代碼是如何分配的。就像,如果它們是靜態的(對於給定的設備是0,對另一個設備是1等),如果是的話,我在哪裏可以得到這個列表;如果他們不是,那麼bios如何分配它們。 – Kei

+1

AFAIK,0x80是啓動硬盤驅動器的唯一有效驅動器號,與啓動軟盤驅動器的0x00類似。在代碼中有這樣的評論:'這是一個解決buggy BIOS的方法,它不能正確傳遞啓動驅動。如果將GRUB安裝到HDD中,請檢查DL是否被正確屏蔽。如果不是,則假定BIOS傳遞了一個虛假值並將DL設置爲0x80,因爲這是唯一可能的引導驅動器。如果將GRUB安裝到軟盤中,則不會執行任何操作(僅跳轉)。「這就是傳統上的做法。非引導驅動器號碼較高。 –

+0

我明白了。對於閃存和CD-ROM驅動器,它會是相同的數字(0x80)嗎? – Kei