फ़्रेम पॉइंटर स्पष्टीकरण


28

में विधानसभा MIPS , वहाँ ढेर सूचक के लिए एक रजिस्टर, और फ्रेम सूचक के लिए एक और रजिस्टर है। फ्रेम पॉइंटर क्या है और इसका उद्देश्य क्या है? यह स्टैक पॉइंटर से कैसे भिन्न होता है?


1
आपने पहले से क्या शोध किया है - और शर्तों से आपकी क्या परिचित है? यह किस प्रणाली के लिए है (विभिन्न प्रणालियों में अलग-अलग शब्दावली है)?

मैं सिर्फ फ्रेम पॉइंटर (मिप्स असेंबली) से परिचित होना चाहता हूं। मुझे समझ नहीं आता कि यह कैसे मदद करता है, हमें इसकी आवश्यकता क्यों है? बहुत बहुत धन्यवाद
qwaserdftyghuijkiii

जवाबों:


44

MIPS असेंबली में, स्टैक पॉइंटर स्टैक के शीर्ष पर इंगित करता है। जब आप स्टैक पर जगह आवंटित करते हैं, तो स्टैक पॉइंटर ($ sp) फ्री मेमोरी को इंगित करने के लिए आगे बढ़ता है।

MIPS असेंबली में एक सबरूटीन को कॉल करते समय (रजिस्टर उन दिनों में एक प्रीमियम पर थे - रजिस्टर आधारित पैरामीटर जहां अपरंपरागत हैं), कोई स्टैक को पैरामीटर लिखता है और फिर स्टैक पॉइंटर को आगे बढ़ाता है।

जब विधि शुरू होती है, तो एक पैरामीटर ऑफसेट पर हो सकता है 16($sp)। हालाँकि, जैसा कि चर को स्टैक पर रखा जाता है, स्टैक पॉइंटर चलता है और इसके बजाय एक ही पैरामीटर हो सकता है 24($sp)। इससे कोड थोड़ा भ्रमित हो सकता है।

फ़्रेम पॉइंटर ($ fp) स्टैक फ़्रेम की शुरुआत की ओर इशारा करता है और सबरूटीन कॉल की अवधि के लिए स्थानांतरित नहीं होता है। यह स्टैक फ्रेम के आधार को इंगित करता है, और जो पैरामीटर सबरूटीन में पारित होते हैं, वे फ़्रेम पॉइंटर के सापेक्ष एक स्थिर स्थान पर रहते हैं।

यह महसूस करें कि फ़्रेम पॉइंटर को सबरूटीन कॉल के साथ संग्रहीत और पुनर्स्थापित करना होगा जो इसे संशोधित करते हैं।

आगे की पढाई:


मुझे नहीं पता कि "रजिस्टरों का मतलब उन दिनों में प्रीमियम पर था - रजिस्टर आधारित पैरामीटर जहां अपारंपरिक हैं" लेकिन पैरामीटर को तब भी स्टैक पर रखा जा सकता है जब # रजिस्टर सीमित है। यदि आपके पास उदाहरण के लिए 35 पैरामीटर हैं (मेरा मानना ​​है कि एमआइपी में 32 रेज हैं।) तो आपको स्टैक पर अंतिम 3 मापदंडों को लगाने की आवश्यकता होगी। कार्यान्वयन के लिए और अधिक विशिष्ट, एफपी स्मृति में पते पर होगा जहां रिटर्न पता है।
जोनाथन

1
उन 32 रजिस्टरों के @ जोनाथन एमआइपी, $ 0 0. $ आरक्षित था, $ v0 और $ v1 फ़ंक्शन कॉल के वापसी मूल्य के लिए थे, $ a0 - $ a3 फ़ंक्शन पैरामीटर थे, $ t0 - $ t9 अस्थायी थे (कॉलर संरक्षित) , $ s0 - $ s7 बच गए थे, और $ gp, $ sp, $ fp, और $ ra को सिस्टम द्वारा ही उपयोग किया गया था। सभी में, केवल 24 सामान्य प्रयोजन रजिस्टर थे और यदि आप उपयोग करना चाहते थे, तो कुछ ओवरहेड ओवरहेड। आप आम तौर पर केवल $ t रजिस्टर (10) का उपयोग करते थे। इसकी तुलना इटेनियम से करें जिसमें 128 रजिस्टर हैं। MIPS में 35 मापदंडों के साथ एक फ़ंक्शन कॉल करना, आप संभवतः उन सभी को स्टैक पर रख देंगे।

@ जोनाथन मैं इस टिप्पणी की ओर भी इशारा करता हूं : "एएमडी बुलडोजर: 96 फिजिकल जीपीआर, इंटेल सैंडी ब्रिज: 160 फिजिकल जीपीआर, इंटेल हैवेल: 168 फिजिकल जीपीआर"। कई मुख्य मशीनों के साथ चीजें मज़ेदार होती हैं। स्पार्क में 160 रजिस्टर थे । मैं आपको विंडो रजिस्टर करने के लिए भी कहता हूं जो MIPS के कुछ डिज़ाइन दर्शन में गया है और इसके समकालीन के रूप में कई रजिस्टरों के साथ।

तो, यह %ebpx86 कॉलिंग-कन्वेंशन में 'बेस पॉइंटर' रजिस्टर के पारंपरिक उपयोग के समान है ? (मैं यह सब करने के लिए नया हूँ, लेकिन यह sth की तरह MOV 8(%ebp), %eaxया का उपयोग कर के रूप में एक ही बुनियादी बात की तरह लगता है ?)
ELLIOTTCABLE

यह रेखा Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.बिल्कुल स्पष्ट नहीं है कि इसका क्या अर्थ है
ज़ादेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.