पहला BIOS निर्देश 0xFFFFFFF0 ("शीर्ष" RAM) पर क्यों स्थित है?


51

मुझे पता है कि BIOS 0xFFFFFFF0 से अपना पहला निर्देश लोड करता है, लेकिन यह विशिष्ट पता क्यों है? मेरे पास सवालों का एक गुच्छा है और आशा है कि आप मेरी मदद कर सकते हैं उनमें से कुछ के साथ, कम से कम।

मेरे सवाल:

  • 4 जीबी रैम के "शीर्ष" पर स्थित पहला BIOS निर्देश क्यों है?
  • यदि मेरे कंप्यूटर में केवल 1 जीबी रैम है तो क्या होगा?
  • 4 जीबी से अधिक रैम वाले सिस्टम के बारे में क्या है (उदाहरण के लिए, 8 जीबी, 16 जीबी, आदि)?
  • स्टैक को कुछ मूल्य (इस स्थिति में, 0xFFFFFFF0 पर स्थित मान) से आरंभ क्यों किया जाता है?

मैंने इस दोपहर के बारे में पढ़ा है, और मुझे अभी भी नहीं मिला है।


28
कृपया प्रति प्रश्न एक प्रश्न।
मोनिका

4
मुझे पसंद है कि कैसे स्वीकार किए गए उत्तर में खंडित मेमोरी या एड्रेसिंग मोड का भी उल्लेख नहीं किया गया है, और ए 20 लाइन को भी छुआ गया है।
imallett

Atmel AVRs एड्रेस 0 से निष्पादन शुरू करते हैं, जबकि Freescale HCS08 की शुरुआत 0xFFFE से होती है, iirc। प्रत्येक प्रोसेसर परिवार की अपनी विशेषताएं हैं।
निक टी

2
@ हिमाल्ट मुझे पसंद है कि कैसे आप इसके बारे में शिकायत करने के बजाय पोस्टर से पूछें कि वे आगे की जानकारी के साथ अपने उत्तर को अपडेट करें। मुझे यह भी पसंद है कि आप यह कैसे सोचते हैं कि यह ज्ञान ओपी को हाजिर करने में सक्षम होगा, हालांकि सवाल पूछने का उद्देश्य सामान के बारे में ज्ञान प्राप्त करना है जो अब पूरी तरह से समझ सकता है।
बंदरजियस

2
@MonkeyZeus को, 9 अन्य टिप्पणीकारों ने पहले ही कर दिया है, और यह अभी भी नहीं बदला है। मेरी टिप्पणी, जबकि व्यंग्यात्मक, खाली नहीं थी; यह भविष्य के नेटिज़न्स के साथ-साथ ओपी के लिए एक चेतावनी है।
imallett

जवाबों:


57

0xFFFFFFF0वह जगह है जहाँ एक x86- संगत CPU निर्देश चलाना शुरू करता है जब वह चालू होता है। यह CPU का एक हार्डवेअर, अनचाहे (अतिरिक्त हार्डवेयर के बिना) पहलू है और विभिन्न प्रकार के CPU अलग-अलग व्यवहार करते हैं।

4 जीबी रैम के "शीर्ष" पर पहला BIOS निर्देश क्यों स्थित है?

यह 4 जीबी एड्रेस स्पेस के "टॉप" पर स्थित है - और पॉवर-ऑन BIOS या UEFI ROM उन एड्रेस के रीड्स पर प्रतिक्रिया देने के लिए सेट है।

मेरा सिद्धांत इस पर क्यों है:

बस प्रोग्रामिंग में सब कुछ सन्निहित पतों के साथ बेहतर काम करता है। सीपीयू डिजाइनर को यह नहीं पता होता है कि सिस्टम बिल्डर सीपीयू के साथ क्या करना चाहता है, इस प्रकार सीपीयू के लिए यह एक बुरा विचार है कि विभिन्न प्रयोजनों के लिए अंतरिक्ष के बीच में स्मैक के पते की आवश्यकता होती है। पता स्थान के ऊपर या नीचे "उस रास्ते से बाहर" रखना बेहतर है। बेशक, ध्यान रखें यह निर्णय 8086 के नए होने पर किया गया था, जिसमें एमएमयू नहीं था ।

8086 में, बाधित वैक्टर 0 और इसके बाद के मेमोरी स्थान पर मौजूद थे। इंटरप्ट वैक्टर को ज्ञात पते पर होना चाहिए और लचीलेपन के लिए रैम में होना चाहिए - फिर भी सीपीयू डिजाइनर के लिए यह जानना संभव नहीं था कि एक सिस्टम में कितनी रैम होने वाली थी। इसलिए 0 से शुरू करना और काम करना उन लोगों के लिए समझ में आता है (क्योंकि 1978 में कोई प्रणाली नहीं थी जब 8086 का आविष्कार किया गया था, 4 गीबाइट्स रैम होगा - इसलिए रैम की उम्मीद 0xFFFFFFF0 पर होना एक अच्छा विचार नहीं था), और ROM को होना ही होगा। ऊपरी सीमा पर।

बेशक, कम से कम 80286 से शुरू होकर, इंटरप्ट वैक्टर को 0 के अलावा किसी अन्य शुरुआती स्थान पर ले जाया जा सकता है, लेकिन आधुनिक 64-बिट x86 CPU अभी भी 8086 मोड में बूट है, इसलिए सब कुछ अभी भी संगतता के लिए पुराने तरीके से काम करता है (जैसा कि हास्यास्पद है जैसा कि 2015 में लगता है कि अभी भी आपके x86 CPU को DOS चलाने में सक्षम होने की आवश्यकता है)।

इसलिए चूंकि इंटरप्ट वैक्टर 0 से शुरू होते हैं और ऊपर की ओर काम करते हैं, इसलिए रॉम को ऊपर से शुरू करना होगा और नीचे की ओर काम करना होगा।

यदि मेरे कंप्यूटर में केवल 1 जीबी रैम है तो क्या होगा?

एक 32-बिट सीपीयू में 4,294,967,296 पते, 0 (0x00000000) से 4294967295 (0xFFFFFFFF) नंबर हैं। ROM कुछ पतों में रह सकता है और RAM दूसरों में रह सकता है। सीपीयू के एमएमयू के साथ इसे फ्लाई पर भी स्विच किया जा सकता है। RAM को सभी पते पर नहीं रहना है।

केवल 1 जीबी रैम के साथ, कुछ पतों में कुछ भी प्रतिक्रिया नहीं होगी जब वे पढ़े जाते हैं या लिखे जाते हैं। इस तरह के पतों के एक्सेस या सिस्टम लॉकअप होने पर यह अमान्य डेटा को पढ़ने का कारण बन सकता है।

4 जीबी से अधिक रैम वाले सिस्टम के बारे में क्या है (जैसे: 8 जीबी, 16 जीबी, आदि)?

इसे कुछ सरल रखना: 64-बिट सीपीयू में अधिक पते होते हैं (जो उन चीजों में से एक है जो उन्हें 64-बिट बनाता है - उदाहरण के लिए 0xFFFFFFFFFFFFFFFF के माध्यम से 0x0000000000000000) उदाहरण के लिए, इसलिए अतिरिक्त रैम "फिट" होता है। मान लें कि सीपीयू लंबे मोड में है । तब तक RAM वहाँ है, बस पता करने योग्य नहीं है।

कुछ मूल्य (इस मामले में, 0xFFFFFFF0 पर स्थित मान) के साथ स्टैक को क्यों आरंभ किया गया है?

मैं तुरंत कुछ भी नहीं पा सकता कि x86 पावर-ऑन पर स्टैक पॉइंटर को क्या बताता है, लेकिन इसे अंततः एक आरंभीकरण दिनचर्या द्वारा फिर से असाइन करना होगा, क्योंकि एक बार यह पता चलता है कि सिस्टम में कितनी रैम है। (@ टिप्पणी नीचे दी गई टिप्पणियों में टावर्स है कि यह बिजली अप करने के लिए शून्य पर सेट है।)


7
पता स्थान को एक बड़े स्थान के रूप में सोचना सबसे अच्छा है जिसमें हार्डवेयर द्वारा चीजें सौंपी जा सकती हैं। जब सीपीयू मेमोरी को पढ़ता / लिखता है, तो यह वास्तव में एक बस पर एक संचार करता है, और हार्डवेयर यह सुनिश्चित कर सकता है कि रैम या रोम जैसी चीजें विशिष्ट एड्रेस रेंज पर प्रतिक्रिया कर रही हैं। इसलिए इस तरह के हार्डवेयर को सीपीयू के रीसेट होने पर 0xFFFFFFF0 पर ROM जवाब देना होगा। कोई अंतर्निहित बाध्यता नहीं है कि RAM के ठीक बाद ROM दिखाई देता है। यह ऐसे हार्डवेयर की क्षमताओं के आधार पर, हार्डवेयर जहां भी बताता है, वहां दिखाई दे सकता है।
लॉरेंस

4
"छेद" या अनसाइनड रिक्त स्थान होना संभव है जो कि ROM, RAM या किसी भी चीज द्वारा उपयोग नहीं किए जाते हैं - आमतौर पर उन तक पहुंचने से सिस्टम लॉकअप हो जाएगा।
लॉरेंस

16
यह उत्तर मानता है कि CPU 16 बिट मोड में रहते हुए 32 पता बिट्स का उपयोग कर सकता है। लेकिन 16 बिट मोड में यह केवल 20 एड्रेस बिट्स का उपयोग कर सकता है। 0xFFFFFFF0सीपीयू को 32 बिट मोड पर स्विच करने के बाद पता तब तक पहुंच योग्य नहीं है। पिछली बार जब मैंने BIOS कोड को करीब से देखा था, तो प्रवेश बिंदु पर था 0xFFFF0
कास्परड

6
@ माइकलकॉर्जलिंग आपकी गणना गलत है। शिफ्ट किए गए सेगमेंट और ऑफसेट ओआरईडी नहीं हैं, उन्हें जोड़ा जाता है। इस प्रकार तार्किक FFFF: FFF0 भौतिक है (1) 0FFE0 (जहां A20 सक्षम होने पर अग्रणी 1 मौजूद है)।
रुस्लान

9
@kasperd जगह में एक हैक है - पहली लंबी छलांग लगने तक मेमोरी मैनेजर में उच्च 12 बिट्स 1 पर सेट होते हैं। तो हां, तार्किक रूप से, आप साथ काम कर रहे हैं 0xFFFF0, लेकिन वास्तव में, यह मैप करता है 0xFFFFFFF0। मुझे उम्मीद है कि यह 8086 के साथ संगतता के लिए किया गया था - यह और अधिक आधुनिक सीपीयू दोनों उपयोग करने के लिए दिखाई देते हैं 0xFFFF0, लेकिन 32-बिट सीपीयू वास्तव में एक्सेस करते हैं 0xFFFFFFF0(BIOS रोम में मैप किए गए)।
लुआं

26

यह RAM के शीर्ष पर स्थित नहीं है; यह ROM में स्थित है, जिसका पता मेमोरी एड्रेस स्पेस के शीर्ष पर है, साथ ही ईथरनेट कार्डर्स जैसे विस्तार कार्ड पर कोई मेमोरी। यह वहाँ है कि यह रैम के साथ संघर्ष नहीं करेगा, कम से कम जब तक आप 4 जीबी स्थापित नहीं करते हैं। जिन प्रणालियों में 4 जीबी या अधिक रैम है, वे संघर्ष को हल करने के लिए दो चीजें कर सकते हैं। सस्ते मदरबोर्ड बस RAM के उन हिस्सों को अनदेखा करते हैं, जहां ROM स्थित है। निर्णय लेने वाले लोग उस रैम को हटा देते हैं, जिसमें 4 जीबी मार्क के ऊपर एक पता होता है।

मुझे यकीन नहीं है कि आप स्टैक के बारे में क्या पूछ रहे हैं। यह निश्चित रूप से ROM में होने के लिए आरंभिक नहीं है। जब सीपीयू रीसेट करता है, तो यह शुरू में "वास्तविक मोड" में होता है, जहां यह मूल 8086 की तरह काम करता है और 16-बिट सेगमेंटिंग एड्रेसिंग का उपयोग करता है, जिससे यह केवल 1 एमबी मेमोरी तक ही पहुंच पाता है। BIOS कोड उस 1 MB के ऊपर स्थित है। BIOS स्टैक को सेट करने और लोड करने के लिए रैम में कहीं से उठाता है और पहले बूट करने योग्य ड्राइव के पहले सेक्टर को निष्पादित करता है। एक बार 32 या 64-बिट मोड में स्विच करने के लिए यह ओएस पर निर्भर है और यह अपने स्वयं के स्टैक (प्रति कार्य या थ्रेड) सेट करता है।


1
जवाब के लिए बहुत बहुत धन्यवाद, लेकिन @LrenceC ने उनके जवाब पर अधिक जानकारी दी और मुझे इस बात पर मदद की कि पूरी चीज कैसे काम करती है। आपका धन्यावाद! मैं आपको एक
उत्थान देता हूं

13

सबसे पहले, यह वास्तव में रैम के साथ कुछ नहीं करना है। हम यहां पते की जगह के बारे में बात कर रहे हैं - भले ही आपके पास केवल 16 MiB मेमोरी हो, आपके पास अभी भी 32-बिट CPU पर पता स्थान के पूर्ण 32 बिट्स हैं।

यह पहले से ही आपके पहले प्रश्न का उत्तर देता है, वास्तव में - जिस समय यह डिज़ाइन किया गया था, वास्तविक दुनिया पीसी में मेमोरी के पूर्ण 4 GiB के पास कहीं नहीं था; वे स्मृति के 1-16 MiB की सीमा में अधिक थे। पता स्थान सभी इरादों और उद्देश्यों के लिए, मुफ्त था।

अब, 0xFFFFFFF0 वास्तव में क्यों? सीपीयू को पता नहीं है कि वहां कितना BIOS है। कुछ BIOS केवल कुछ किलोबाइट ले सकते हैं, जबकि अन्य पूरी मेगाबाइट मेमोरी ले सकते हैं - और मैं विभिन्न वैकल्पिक रैम में भी नहीं आ रहा हूं। सीपीयू को शुरू करने के लिए कुछ पते पर हार्डवेयर्ड होना चाहिए - सीपीयू को कॉन्फ़िगर करने के लिए कोई नोट नहीं है। लेकिन यह केवल पते की जगह का एक मानचित्रण है - पते को सीधे BIOS ROM चिप में मैप किया जाता है (हां, इसका मतलब है कि आपको इस बिंदु पर पूर्ण 4 GiB RAM तक पहुंच नहीं मिलती है यदि आपके पास ऐसा बहुत है - लेकिन यह कुछ खास नहीं है, कई उपकरणों को पता स्थान में अपनी सीमा की आवश्यकता होती है)। 32-बिट सीपीयू पर, यह पता आपको बहुत ही बुनियादी आरंभीकरण करने के लिए पूर्ण 16 बाइट देता है - जो आपके सेगमेंट को सेटअप करने के लिए पर्याप्त है और यदि आवश्यक हो, तो पता मोड (याद रखें,)असली बूट "प्रक्रिया"। इस बिंदु पर, आप रैम का उपयोग बिल्कुल नहीं करते हैं - यह सब सिर्फ मैप किया गया ROM है। वास्तव में, RAM इस बिंदु पर उपयोग करने के लिए तैयार नहीं है - यह BIOS POST की नौकरियों में से एक है! अब, आप सोच रहे होंगे - 0xFFFFFFF0 पते पर 16-बिट वास्तविक मोड कैसे पहुंचता है? ज़रूर, वहाँ सेगमेंट हैं, इसलिए आपके पास 20-बिट एड्रेस स्पेस है, लेकिन यह अभी भी पर्याप्त नहीं है। खैर, इसके लिए एक चाल है - पते के 12 उच्च बिट्स तब तक सेट होते हैं जब तक आप अपनी पहली लंबी कूद निष्पादित नहीं करते हैं, आपको उच्च पता स्थान तक पहुंच प्रदान करते हैं (0xFFF00000 से कम कुछ तक पहुंच को अस्वीकार करते हुए - जब तक आप एक लंबी कूद निष्पादित नहीं करते हैं ।

यह सभी चीजें हैं जो आधुनिक ऑपरेटिंग सिस्टम पर प्रोग्रामर (उपयोगकर्ताओं का उल्लेख नहीं करने के लिए) से छिपी हुई हैं। आपके पास आमतौर पर किसी भी चीज़ के इतने निचले स्तर तक पहुंच नहीं है - कुछ चीजें पहले से ही निस्तारण से परे हैं (आप सीपीयू मोड को विली-नीली स्विच नहीं कर सकते हैं), कुछ विशेष रूप से ओएस कर्नेल द्वारा नियंत्रित किए जाते हैं।

तो एक अच्छा विचार एमएस डॉस पर पुराने स्कूल कोडिंग से आता है। डिवाइस मेमोरी का एक और विशिष्ट उदाहरण सीधे अंतरिक्ष को संबोधित करने के लिए मैप किया जा रहा है जो वीडियो मेमोरी तक सीधी पहुंच है। उदाहरण के लिए, यदि आप डिस्प्ले फास्ट पर टेक्स्ट लिखना चाहते हैं, तो आपने सीधे एड्रेस B800:0000(प्लस ऑफसेट - 80x25 टेक्स्ट मोड में लिखा है, इसका मतलब है कि (y * 80 + x) * 2अगर मेरी मेमोरी मुझे राइट - टू बाइट्स प्रति कैरेक्टर, लाइन बाय लाइन)। यदि आप पिक्सेल-दर-पिक्सेल खींचना चाहते हैं, तो आपने ग्राफिक्स मोड और A000:0000(आमतौर पर पिक्सेल के 8 बिट्स पर 320x200) के प्रारंभ पते का उपयोग किया । कुछ भी उच्च-प्रदर्शन करने का मतलब आमतौर पर डिवाइस मैनुअल में डाइविंग करना होता है, यह पता लगाने के लिए कि उन्हें सीधे कैसे एक्सेस किया जाए।

यह आज तक जीवित है - यह सिर्फ छिपा हुआ है। विंडोज पर, आप डिवाइस मैनेजर में डिवाइसों को मैप किए गए मेमोरी एड्रेस देख सकते हैं - सिर्फ आपके नेटवर्क कार्ड जैसी किसी चीज़ के खुले गुण, संसाधन टैब पर जाएं - सभी मेमोरी रेंज आइटम डिवाइस मेमोरी से आपके मुख्य एड्रेस स्पेस में मैपिंग होते हैं। और 32-बिट पर, आप देखेंगे कि उन उपकरणों में से अधिकांश 2 GiB (बाद में 3 GiB) चिह्न के ऊपर मैप किए गए हैं - फिर से, उपयोगकर्ता-उपयोग करने योग्य मेमोरी के साथ संघर्ष को कम करने के लिए, हालांकि यह वास्तव में वर्चुअल मेमोरी के साथ कोई समस्या नहीं है ( अनुप्रयोगों को वास्तविक, हार्डवेयर पता स्थान के पास कहीं भी नहीं मिलता है - उनके पास स्मृति का अपना वर्चुअलाइज्ड हिस्सा है, जिसे RAM, ROM, डिवाइस या पेज फ़ाइल में मैप किया जा सकता है, उदाहरण के लिए)।

स्टैक के लिए, ठीक है, यह समझने में मदद करनी चाहिए कि डिफ़ॉल्ट रूप से, स्टैक ऊपर से बढ़ता है। इसलिए यदि आप एक करते हैं push, तो नया स्टैक पॉइंटर होगा 0xFFFFFEC- दूसरे शब्दों में, आप BIOS इनिट एड्रेस पर लिखने की कोशिश नहीं कर रहे हैं :) जो निश्चित रूप से इसका मतलब है कि BIOS इनइट रूटीन स्टैक का सुरक्षित रूप से उपयोग कर सकता है, इसे रीमैप करने से पहले कहीं अधिक उपयोगी है। पुराने स्कूल प्रोग्रामिंग में, पेजिंग वास्तविक रूप से डिफ़ॉल्ट होने से पहले, आमतौर पर स्टैक रैम के अंत में शुरू होता था, और जब आप अपनी एप्लिकेशन मेमोरी को ओवरराइट करना शुरू करते हैं, तो "स्टैक ओवरफ्लो" होता है। मेमोरी सुरक्षा ने इसे बहुत बदल दिया, लेकिन सामान्य तौर पर, यह यथासंभव पीछे की संगतता बनाए रखता है - ध्यान दें कि कैसे सबसे आधुनिक x86-64 सीपीयू अभी भी एमएस डॉस 5 को बूट कर सकता है। - या कैसे Windows अभी भी कई डॉस एप्लिकेशन चला सकता है जिनके पास पेजिंग के बारे में कोई विचार नहीं है।


3
उत्कृष्ट उत्तर, बस विस्तार करने और कहने के लिए कि आधुनिक प्रोसेसर ए 20 लाइन मास्किंग जैसे हैक को छोड़ना शुरू कर रहे हैं , इसलिए पुराने किनारे के मामलों के लिए समर्थन मर रहा है।
बेसिक

2
अंतिम पैराग्राफ तक: BIOS "स्वतंत्र रूप से" स्टैक का उपयोग नहीं कर सकता है: यह रोम को नहीं लिख सकता है (जिससे 0xFFFFFFECमैप किया जाएगा)। इसका मतलब न केवल है, pushबल्कि उदाहरण के लिए भी callनहीं है। रैम के तैयार होने तक इन्‍हें इंतजार करना चाहिए।
Vee

7

उल्लिखित अन्य बिंदुओं के अलावा, यह समझने में मददगार हो सकता है कि पता क्या है । जबकि नए आर्किटेक्चर चीजों को जटिल करते हैं, ऐतिहासिक रूप से प्रत्येक मेमोरी चक्र पर एक मशीन 20 से 32 तारों पर वांछित पते का उत्पादन करती है (वास्तुकला पर निर्भर करते हुए, कुछ विशेष चाल के साथ यह ध्यान देने के लिए कि क्या एक जोड़ी या बाइट्स के चारसोम की आवश्यकता है); मेमोरी सिस्टम के विभिन्न भाग उन तारों की स्थिति की जांच करेंगे और उच्च और निम्न मूल्यों के कुछ संयोजनों को देखने पर खुद को सक्रिय करेंगे।

यदि 32 पता तारों वाली एक मशीन को केवल 1MB RAM और 64KB ROM का उपयोग करने की आवश्यकता है [कुछ एम्बेडेड नियंत्रकों के लिए काफी प्रशंसनीय] यह उन सभी पते के लिए RAM को सक्रिय कर सकता है जहां शीर्ष पता तार कम था और सभी पते के लिए ROM जहां यह था उच्च। नीचे के 20 पते के तारों को 1,048,576 बाइट्स में से एक का चयन करने के लिए रैम से बांधा जाएगा और नीचे के 16 को ROM में वायर किया जाएगा, 65,536 बाइट्स में से एक को चुनने के लिए। शेष 11 पता तारों को बस किसी भी चीज़ से नहीं जोड़ा जाएगा।

ऐसी मशीन पर, 0x00100000-0x001FFFFF के पते तक पहुंच 0x00000000-0-0000000FFFFF के राम के पते तक पहुंच के बराबर होगी। इसी तरह 0x000200000-0x0002FFFFF, या 0x7FF00000-0x7FFFFFFFF पतों के साथ। 0x80000000 से ऊपर के पते सभी ROM को पढ़ेंगे, जिसमें 64K पैटर्न पूरे अंतरिक्ष में दोहराया जाएगा।

भले ही प्रोसेसर में 4,294,967,296-बाइट एड्रेस स्पेस है, लेकिन हार्डवेयर को कई अलग-अलग पते की पहचान करने की आवश्यकता नहीं है। पता स्थान के शीर्ष के पास रीसेट वेक्टर डालना एक ऐसा डिज़ाइन है जो सिस्टम की कितनी रैम या रोम है, इसकी परवाह किए बिना अच्छी तरह से काम करेगा और पता स्थान को पूरी तरह से डीकोड करने की आवश्यकता से बचा जाता है।


अच्छा बिंदु - आपको कोई भी 64-बिट हार्डवेयर नहीं मिलेगा जो पता करने योग्य 64-बिट मेमोरी स्पेस (या यहां तक ​​कि 1x10 ^ -12) के करीब कुछ भी समर्थन करेगा।
बेसिक

3

मेरी टेरी इसलिए है क्योंकि हम नकारात्मक तर्क का उपयोग कर रहे हैं डिजिटल वन (1) कोई तनाव नहीं है (ओ वोल्ट्स) हमें केवल अंतिम 4 बिट्स पर आरंभीकरण पर तनाव डालना होगा इसलिए प्रोग्राम काउंटर (या इंस्ट्रक्शन पॉइंटर) लैकेट 1111-211 पर 1111 1111 1111 1111 1111 0000. हमें ऊपरी 28 बिट्स को संबोधित करने की आवश्यकता नहीं है, क्योंकि अधिकांश (पुराने) सीपीयू के 16 बिट्स थे और निचले निबल्स को पुराने दिनों में एकल एड्रेस चिप द्वारा संबोधित किया जा सकता है। अब चूंकि हमारे पास 32 बिट्स और 32 बिट्स से 16 बिट्स की संगतता के लिए 64 बिट्स हैं, इसलिए हार्डवेयर कपिल में सुधार किया गया है, लेकिन विधि बनी हुई है। इसके अलावा बायोस में हमेशा 64 बिट्स या 32 बिट्स प्रोग्राम नहीं होते हैं। मेरी राय यह भी है कि यादें हमेशा एक जैसी नहीं होतीं, बायोस को पहले खंड में ही स्थित होना चाहिए। जिस तरह से हम बायोस को संबोधित करते हैं वह वास्तविक पता हर समय नहीं होता है। बस मुझे सिखाया ...


2

RESET पर 8088/8086 संगत सीपीयू 0FFFF0 पर निर्देशों को निष्पादित करता है, जो कि 1 मेगाबाइट सीमा से नीचे 16 बाइट्स है। आम तौर पर इस स्थान पर रोम (पीसी कार्यान्वयन में) BIOS होगा, इसलिए BIOS ROM के अंत में, BIOS रोम की शुरुआत में एक कूद है।

यहां दिखाया गया है: इसके पीछे वेक्टर और 'तारीख' हस्ताक्षर शुरू करें, आईबीएम 5150 पीसी 8 केबी एप्रोम डंप बायोस तारीख: 10/5/81

00001FEE  FF                db 0xff
00001FEF  FF                db 0xff
00001FF0  EA5BE000F0        jmp word 0xf000:0xe05b
00001FF5  3130              xor [bx+si],si
00001FF7  2F                das
00001FF8  3139              xor [bx+di],di

ध्यान दें कि संबोधन 8KB $ 2000 के रोम का होता है, जो 8KB रोम के भीतर इस मामले में, स्टार्ट एड्रेस (निरपेक्ष दूर JMP को, जो भी अन्य स्थान पर, अपने आप में होता है, हालांकि $ FFFF में उस रोम के भीतर संभव सबसे कम पता नहीं): $ 0 खंडित या $ FFFF0 रैखिक।

अनुकूलता के लिए: यदि कुछ 'भविष्य' या वर्तमान प्रोसेसर 'उम्मीद' करता है कि यह पते के सामने बहुत अधिक एफ है, तो इससे कोई फर्क नहीं पड़ता। पुराने सिस्टम में नए cpus की अनुकूलता के लिए अतिरिक्त पता लाइनें असंबद्ध रहती हैं और इसलिए डेटाबेस पर डेटा बिल्कुल वैसा ही होता है। जब तक कम से कम महत्वपूर्ण बिट्स FFFF0 रहते हैं।

(सिर्फ़ 1mb ram वाले सिस्टम में और रोम उस राम के अंत में तैनात है, और कुछ नहीं, यह खुशी से सोचेंगे 'यह' उच्च पते पर बात कर रहा है, फिर भी ठीक उसी डेटा को प्राप्त करें, क्योंकि उन कार्यान्वयनों के बारे में कभी नहीं सुना है पता लाइनों A19 से अधिक)

ध्यान दें कि दुनिया सिर्फ 'पीसी' नहीं है ... ibm पीसी एक 'दुर्घटना' थी, ये प्रोसेसर कभी भी विशेष रूप से 'पीसी' के लिए डिज़ाइन नहीं किए गए थे और सिर्फ पीसी (जैसे उपग्रहों) की तुलना में बहुत अधिक चीजों में जाते हैं हथियार sytems, आदि)। 32 और 64 बिट संरक्षित मोड आमतौर पर-वांछित नहीं हैं। (आभासी 8086 मोड उदाहरण के लिए एक नया (386+) संस्करण लेने के लिए एक कारण के रूप में बहुत अधिक दिलचस्प है)। इसलिए 'पीछे चला जाएगा' की तुलना में 'बैकवर्ड संगतता' के लिए बहुत कुछ है।


1

मदरबोर्ड यह सुनिश्चित करता है कि रीसेट वेक्टर पर निर्देश BIOS प्रविष्टि बिंदु पर मैप की गई मेमोरी लोकेशन पर जंप हो। यह कूद स्पष्ट रूप से बिजली के ऊपर मौजूद छिपे हुए आधार पते को साफ करता है। इन सभी मेमोरी स्थानों में सीपीयू द्वारा चिपसेट द्वारा रखे गए स्मृति मानचित्र के लिए आवश्यक सामग्री है। वे सभी फ्लैश मेमोरी को मैप करने के लिए मैप किए जाते हैं क्योंकि इस बिंदु पर रैम मॉड्यूल में बेतरतीब बकवास है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.