मैंने हाल ही में असेंबली सीखना शुरू किया और लिंकर स्क्रिप्ट और हार्डवेयर प्रोग्रामिंग के अन्य निम्न-स्तरीय विवरणों के बारे में पता चला। मैं खुद को कंप्यूटर आर्किटेक्चर भी सिखा रहा हूं और कहीं न कहीं लाइन के साथ मुझे यह डर भी था कि मेमोरी मॉडल की मेरी तस्वीर भी गलत हो सकती है।
वर्तमान में मुझे जो समझ में आता है उसके अनुसार, सभी कोड और डेटा नॉन-वाष्पशील मेमोरी पर रहते हैं, जब हम प्रोसेसर पर बाइनरी को 'बर्न' करते हैं - रैम के अस्थिर होने पर रीसेट पर कुछ भी नहीं होता है। जब प्रोग्राम 'निष्पादित' शुरू होता है, तो यह 0x0000 पते से होता है जो लगभग हमेशा (AFAIK) फ्लैश में सबसे कम पता होता है। इसलिए, फ्लैश को सीपीयू कोर से जोड़ने वाली बस पर निर्देश दिए गए हैं और यही वह जगह है जहां वास्तविक निष्पादन होता है। हालाँकि, जब हम मेमोरी से डेटा को पुनः प्राप्त करने या स्टोर करने के लिए सीपीयू के बारे में बात करते हैं, तो हम आमतौर पर रैम के बारे में बात करते हैं - मुझे पता है कि हम प्रोग्राम मेमोरी से डेटा भी पढ़ / लिख सकते हैं (मैंने इसे AVR पर देखा है) लेकिन क्या यह उतना सामान्य नहीं है? क्या ऐसा इसलिए है क्योंकि RAM ROM से तेज है जिसे हम वहां डेटा स्टोर करना पसंद करते हैं?
इस प्रश्न का स्वीकृत उत्तर कहता है कि अधिकांश कोड रैम से बाहर हैं।
क्या इसका मतलब यह है कि स्टार्ट-अप रनटाइम कोड (जो स्वयं फ्लैश से निष्पादित होता है) को फ्लैश से रैम तक सभी प्रोग्राम ऑपकोड की प्रतिलिपि बनाना होगा और किसी भी तरह से फ्लैश में पते को मैप करने के लिए रैम को इंगित करना होगा ताकि सीपीयू वहां से ऑपकोड प्राप्त करे? क्या यह उस प्रक्रिया के समान है जिसमें हम ROM पर RAM से स्टार्टअप पर .data सेक्शन को स्थानांतरित करते हैं?
मैं वॉन न्यूमैन आर्किटेक्चर में सरल होने की कल्पना कर सकता हूं जहां कार्यक्रम और डेटा यादें बस साझा करती हैं लेकिन हार्वर्ड आर्किटेक्चर में इसका मतलब यह नहीं होगा कि सभी कोड और डेटा को पहले सीपीयू रजिस्टरों से गुजरना होगा?
जैसा कि आप शायद अनुमान लगा सकते हैं, मैं इस पूरे व्यवसाय से थोड़ा भ्रमित हूं। हमेशा एक उच्च अमूर्त स्तर पर क्रमादेशित होने के बाद मैं आसानी से इस तरह के विवरण से परेशान हूं। किसी भी मदद की सराहना की है।