2010-10-23 14 views
5

जब 8086 या 8088 पहले शक्तियां पाता है, प्रोसेसर किस पते पर निष्पादन शुरू करता है? मुझे पता है कि Z80 0 से शुरू होता है, और 680 9 एक पते के लिए एफएफएफएफ को दिखता है, लेकिन मैंने अक्सर सोचा है कि x86 कैसे शुरू होता है।x86 पर कौन सा पता निष्पादित करना शुरू करता है?

संपादित करें:

यह कोई BIOS हस्तक्षेप मानते हुए किया गया है। अर्थात। अगर मेरे पास बूट करने के लिए मेरा स्वयं का ईईपीरोम था, तो मशीन चलाने के लिए रैम में यह कहां स्थित होना चाहिए?

उत्तर

9

यह वास्तव में आपको लगता है कि यह वास्तव में एक बहुत ही जटिल सवाल है। 8086 पर, यह बहुत आसान है - यह एफएफएफएफ: 0000 (स्मृति के अंत से पहले 16-बाइट) पर शुरू होता है।

मुश्किल हिस्सा 286 या उससे ऊपर (यानी, कुछ भी दूरस्थ रूप से आधुनिक) पर है। इन मामलों में, यह अभी भी स्मृति के अंत से पहले 16 बाइट शुरू करता है, लेकिन निश्चित रूप से 24-बिट एड्रेसिंग (286) या 32-बिट एड्रेसिंग (386+) के साथ भौतिक पता अलग होता है। बहुत से जटिल नहीं लगते हैं, लेकिन यह वास्तव में है। जटिलता इस तथ्य से उत्पन्न होती है कि प्रोसेसर वास्तविक मोड में निष्पादन शुरू कर देता है, लेकिन उस पते (और आस-पास के सभी) वास्तविक मोड में प्रोसेसर को दिखाई नहीं दे रहे हैं। इसलिए, यह शुरुआत में एक अजीब मोड में निष्पादित होता है जहां यह वास्तविक दृष्टिकोण में वास्तविक दृष्टिकोण में होता है, लेकिन आपके द्वारा निष्पादित करने वाले पते के कुछ उच्च बिट्स को अनदेखा किया जाता है और इसके बजाय मूल रूप से हार्ड-वायर्ड 1 के होते हैं, इसलिए भौतिक पते का शीर्ष अंतरिक्ष प्रोसेसर के लिए दृश्यमान है। फिर, जब आप एक दूर कूदते हैं, प्रोसेसर चुपचाप "सामान्य" वास्तविक मोड में स्विच करता है।

BIOS वास्तविक मोड में शुरू होता है, लेकिन आमतौर पर एक (न्यूनतम) संरक्षित मोड वातावरण स्थापित करने से पहले, और संरक्षित मोड में स्विच करने से पहले केवल थोड़े समय के लिए निष्पादित करता है। वहां से, BIOS सामान्य पावर-ऑन सेल्फ टेस्ट निष्पादित करता है, BIOS को डीकंप्रेस करता है और इसे पर पर एफएफएफएफ: 0000 पर स्थित प्रतिलिपि बनाता है, वास्तविक मोड पर वापस स्विच करता है और एड-ऑन परिधीय रोम में कोड निष्पादित करता है यदि वे ' स्वचालित रूप से निष्पादित करने के लिए चिह्नित किया जाता है (आमतौर पर प्रक्रिया में संरक्षित मोड पर वापस स्विचिंग, लेकिन समाप्त होने पर वास्तविक मोड पर वापस)। उनमें से एक सामान्य रूप से हार्ड-डिस्क नियंत्रक होगा जिसमें डिस्क से बूट ब्लॉक में स्वचालित रूप से पढ़ने के लिए कोड होगा, और ओएस लोड करने के लिए इसे निष्पादित करें।

+0

बोनस अंक, धन्यवाद! –

-1

8086 रीसेट प्रोग्राम काउंटर को एफएफएफएफ 0 एच पर सेट करता है।

+0

यह कहीं भी BIOS क्षेत्र में है। बीआईओएस फिर कुछ प्रारंभिक कार्य करता है और बूट सेक्टर (512 बाइट्स) को 0x7C00 पर पढ़ता है और वहां कूदता है। – ruslik

+0

@ruslik: सवाल 8086 आर्किटेक्चर के बारे में था, आईबीएम पीसी नहीं। इसलिए बीआईओएस के पास इसके साथ कुछ लेना देना नहीं है - बीआईओएस का उपयोग किये बिना 8086 के आसपास मशीन बनाने के लिए पूरी तरह से संभव है (जैसा कि इसे आमतौर पर समझा जाता है)। विस्तृत स्पष्टीकरण के लिए – Schedler

0

cs (कोड चयनकर्ता) रजिस्टर 0xffff और ip (अनुदेश सूचक) पर सेट है 0x0000 को तैयार है।

इस भौतिक स्मृति स्थान 0xffff0 से मेल खाती है, लेकिन cs/ip की सामग्री महत्वपूर्ण है क्योंकि वे प्रभावित करते हैं कितना स्मृति आप एक दूर कूद के बिना उपयोग कर सकते हैं, और यह भी कि कैसे कोड अगर यह स्थिति स्वतंत्र नहीं है उत्पन्न किए जाने की आवश्यकता है।

असल में, यह पुराने 8080 दिनों की तरह है जहां आपके पास 64K हिस्सा है, आप अपने कोड को संबोधित कर सकते हैं। एक बार जब आप cs बदलते हैं, तो निश्चित रूप से सभी परिवर्तन।

संबंधित मुद्दे