मैंने इंटरनेट पर कहीं कहीं पढ़ा है, 0x7c00 पर कूदने से पहले, BIOS बूट किए गए डिवाइस के "ड्राइव नंबर"% dl में लोड होता है। लेकिन यह "ड्राइव नंबर" क्या है? कंप्यूटर से जुड़े प्रत्येक डिवाइस को BIOS द्वारा एक संख्या असाइन की जाती है? यदि हां, तो मुझे कैसे पता चलेगा कि कौन सा नंबर दिया गया डिवाइस दिया गया है?पीसी बूट: डीएल रजिस्टर और ड्राइव नंबर
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 क्या करता है और इसके साथ संवाद करने के लिए उपयोग किए जाने वाले मानक कोड (जैसे "ड्राइव नंबर") के बारे में विशेष रूप से। मैं अपने खुद के बूटलोडर को लिखने की उम्मीद कर रहा था और जो कुछ भी मैंने पाया वह थोड़ा अस्पष्ट है, कंप्यूटर के सटीक स्थिति को सूचित करने के बिंदु पर पर्याप्त तकनीकी नहीं है जब मेरा बूटलोडर चलाना शुरू होता है।
ठीक है। मुझे पता है कि बायोस इसे समझता है, लेकिन मैं भी समझना चाहता हूं। :) मैं क्या जानना चाहता हूं कि ये कोड कैसे असाइन किए जाते हैं। जैसे, यदि वे स्थैतिक हैं (किसी दिए गए डिवाइस के लिए 0, 1 के लिए 1 ... आदि) और यदि हां, तो मुझे यह सूची कहां मिल सकती है; और यदि वे नहीं हैं, तो बायोस उन्हें कैसे असाइन करता है। – Kei
AFAIK, 0x80 बूट हार्ड ड्राइव के लिए एकमात्र वैध ड्राइव नंबर है, बूट फ्लॉपी ड्राइव के लिए 0x00 समान है। कोड में यह टिप्पणी है: 'यह बग्गी BIOSes के लिए एक कामकाज है जो बूट ड्राइव को सही तरीके से पास नहीं करता है। यदि GRUB को HDD में स्थापित किया गया है, तो जांचें कि क्या डीएल सही ढंग से मास्क किया गया है या नहीं। यदि नहीं, तो मान लें कि BIOS ने एक फर्जी मान पास किया है और DL को 0x80 पर सेट किया है, क्योंकि यह एकमात्र संभावित बूट ड्राइव है। यदि GRUB फ्लॉपी में स्थापित है, तो यह कुछ भी नहीं करता है (केवल कूदें)। इस तरह पारंपरिक रूप से यह किया गया है। गैर बूट ड्राइव संख्या अधिक हैं। –
मैं देखता हूं। फ्लैश और सीडी-रोम ड्राइव के लिए यह वही संख्या (0x80) होगी? – Kei