सीपीयू के लिए स्टैक का समर्थन करने का क्या मतलब है?


11

सीपीयू एक स्टैक का समर्थन कैसे नहीं कर सकता है? क्या कोई आर्किटेक्चर नहीं है जो सबरूटीन्स का उपयोग करता है (मुझे पूरा यकीन है कि सभी आर्किटेक्चर हैं) को स्टैक पर रिटर्न एड्रेस को पुश करना होगा ताकि यह वापस आ सके जहां इसे सबरूटीन कहा जाता है? स्टैक का मतलब सिर्फ एक पॉइंटर के साथ मेमोरी का एक सेक्शन है जो एक निश्चित दिशा में बढ़ता है और स्टैक डेटा संरचना के रूप में कार्य करता है? मुझे अभी समझ नहीं आया कि कैसे एक आर्किटेक्चर एक स्टैक का समर्थन नहीं कर सकता है।

कंपाइलर बनाम हार्डवेयर आर्किटेक्चर द्वारा निर्धारित स्वचालित मेमोरी स्टोरेज (स्वचालित चर बनाम स्थिर चर) किस सीमा तक है?

जवाबों:


8

कई निम्न-स्तरीय माइक्रोकंट्रोलर हैं जो सबरूटीन कॉल / रिटर्न और इंटरप्ट हैंडलिंग के लिए हार्डवेयर स्टैक हैं, लेकिन अगर डेटा (चर) को स्टोर करना असंभव नहीं है, और विशुद्ध रूप से सॉफ्टवेयर डेटा स्टैक को लागू करना बहुत अक्षम होगा। 8051 एक क्लासिक उदाहरण है, और निम्न-अंत PIC (PIC12 / PIC16) एक और हैं। इन मशीनों पर, कम्पाइलर के परिष्कार पर निर्भर होने वाले इन स्थानों के पुन: उपयोग की मात्रा के साथ, स्वचालित चर के लिए स्थिर भंडारण स्थानों को निर्दिष्ट करके डेटा स्टैक का अनुकरण किया जाता है।

ध्यान दें कि यदि स्टैक इम्यूलेशन इस तरह से किया जा रहा है, तो इसका मतलब है कि पुनरावृत्ति - एक फ़ंक्शन जो खुद को कॉल करता है, प्रत्यक्ष या अप्रत्यक्ष रूप से - काम नहीं करता है, क्योंकि फ़ंक्शन के प्रत्येक उदाहरण अपने माना "निजी" चर के लिए एक ही स्थिर स्थानों का पुन: उपयोग करता है। कुछ संकलक पुनरावृत्ति के सीमित उपयोग की अनुमति देते हैं (आमतौर पर #pragmaकुछ प्रकार के साधनों द्वारा कार्यान्वित ), जिसके कारण यह सही डेटा स्टैक बनाने में कोई फर्क नहीं पड़ता कि यह चीजों को कितना धीमा करता है।

एक तरफ के रूप में, सीपीयू आर्किटेक्चर रहे हैं जिनके पास हार्डवेयर स्टैक बिल्कुल नहीं था, यहां तक ​​कि डीईसी पीडीपी -8 और आईबीएम सिस्टम / 360 सहित सबरूटीन / इंटरप्ट हैंडलिंग के लिए भी नहीं। इन मशीनों पर, पीसी (रिटर्न एड्रेस) और स्टेटस रजिस्टर (इंटरप्ट के लिए) रजिस्टर या मेमोरी लोकेशन में सेव किए गए थे, लेकिन हर उदाहरण में, मैं सोच सकता हूं, मशीन में पर्याप्त लचीले एड्रेस मोड भी थे, जिससे स्टैक बनाना आसान हो गया था सॉफ्टवेयर के साथ।


1
कुछ पहले के कंप्यूटर कोड में एक जंप इंस्ट्रक्शन लिखेंगे, जो रिटर्न का कारण बनेगा - अप्रत्यक्ष कूद न होना - रीक्रिएंट फ़ंक्शंस को अव्यावहारिक बनाना (सैद्धांतिक रूप से एक जंप पर शाखा सकता है लेकिन जटिलता जोड़ता है, विशेष रूप से कुछ मामलों में जब डेटा पते पूरी तरह से एन्कोडेड होते हैं निर्देश में)।
पॉल ए। क्लेटन

4

"एक स्टैक का समर्थन" का अर्थ है

  1. एक स्पष्ट स्टैक पॉइंटर रजिस्टर, और
  2. स्टैक पॉइंटर रजिस्टर (रेटी की तरह, जो किसी फ़ंक्शन कॉल से वापस आने के लिए स्टैक पॉइंटर पर आधारित प्रोग्राम काउंटर को बदलता है) का उपयोग / हेरफेर करने के लिए आदिम मशीन कोड निर्देश होने।

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

प्रोग्रामिंग भाषाओं में वेरिएबल के शब्दार्थों का लक्ष्य हार्डवेयर आर्किटेक्चर से कोई लेना-देना नहीं है, किसी भी भाषा के लिए सीधे असेंबली से अधिक। संकलक का काम मशीन कोड उत्पन्न करना है जो प्रोग्रामिंग भाषा के शब्दार्थ अनुबंध के अनुरूप है।


1
अधिकांश RISC ISAs (जैसे, MIPS [MIPS16 और microMIPS को छोड़कर]], अल्फा, SPARC, PA-RISC, पॉवर, सुपरह) का एक स्पष्ट स्टैक पॉइंटर रजिस्टर नहीं है, इसके बजाय ABB में परिभाषित करता है। एआरएम एक अपवाद है (आंशिक रूप से क्योंकि यह कई ऑपरेटिंग मोड के लिए एसपी को छाया करता है) जैसा कि एमआईपी 16 और माइक्रोएमआईपीएस (कोड घनत्व के लिए) हैं।
पॉल ए। क्लेटन

2

कुछ आर्किटेक्चर (जैसे PIC) में एक हार्डवेयर स्टैक होता है जो क्षमता में सीमित होता है (इसका उपयोग केवल रिटर्न एड्रेस के लिए किया जा सकता है, न कि वेरिएबल्स में)। कुछ बेहद छोटे आर्किटेक्चर में स्टोर-इन-इन्क्रीमेंट या PUSH इंस्ट्रक्शन नहीं होता है, इसलिए स्टैक करना ज्यादा फिजूल है।

C में 'ऑटो' वैरिएबल को हमेशा 'ऑटो' इनिशियलाइज़ेशन बिहेवियर के साथ और स्टैटिक बिहेवियर के साथ 'स्टैटिक' के लिए संकलित किया जाना चाहिए; कुछ आर्किटेक्चर पर आपको पुनरावृत्ति करने की अनुमति नहीं है, इस मामले में संकलक सभी चर को सांख्यिकीय रूप से आवंटित कर सकता है।

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