में विधानसभा MIPS , वहाँ ढेर सूचक के लिए एक रजिस्टर, और फ्रेम सूचक के लिए एक और रजिस्टर है। फ्रेम पॉइंटर क्या है और इसका उद्देश्य क्या है? यह स्टैक पॉइंटर से कैसे भिन्न होता है?
में विधानसभा MIPS , वहाँ ढेर सूचक के लिए एक रजिस्टर, और फ्रेम सूचक के लिए एक और रजिस्टर है। फ्रेम पॉइंटर क्या है और इसका उद्देश्य क्या है? यह स्टैक पॉइंटर से कैसे भिन्न होता है?
जवाबों:
MIPS असेंबली में, स्टैक पॉइंटर स्टैक के शीर्ष पर इंगित करता है। जब आप स्टैक पर जगह आवंटित करते हैं, तो स्टैक पॉइंटर ($ sp) फ्री मेमोरी को इंगित करने के लिए आगे बढ़ता है।
MIPS असेंबली में एक सबरूटीन को कॉल करते समय (रजिस्टर उन दिनों में एक प्रीमियम पर थे - रजिस्टर आधारित पैरामीटर जहां अपरंपरागत हैं), कोई स्टैक को पैरामीटर लिखता है और फिर स्टैक पॉइंटर को आगे बढ़ाता है।
जब विधि शुरू होती है, तो एक पैरामीटर ऑफसेट पर हो सकता है 16($sp)
। हालाँकि, जैसा कि चर को स्टैक पर रखा जाता है, स्टैक पॉइंटर चलता है और इसके बजाय एक ही पैरामीटर हो सकता है 24($sp)
। इससे कोड थोड़ा भ्रमित हो सकता है।
फ़्रेम पॉइंटर ($ fp) स्टैक फ़्रेम की शुरुआत की ओर इशारा करता है और सबरूटीन कॉल की अवधि के लिए स्थानांतरित नहीं होता है। यह स्टैक फ्रेम के आधार को इंगित करता है, और जो पैरामीटर सबरूटीन में पारित होते हैं, वे फ़्रेम पॉइंटर के सापेक्ष एक स्थिर स्थान पर रहते हैं।
यह महसूस करें कि फ़्रेम पॉइंटर को सबरूटीन कॉल के साथ संग्रहीत और पुनर्स्थापित करना होगा जो इसे संशोधित करते हैं।
आगे की पढाई:
%ebp
x86 कॉलिंग-कन्वेंशन में 'बेस पॉइंटर' रजिस्टर के पारंपरिक उपयोग के समान है ? (मैं यह सब करने के लिए नया हूँ, लेकिन यह sth की तरह MOV 8(%ebp), %eax
या का उपयोग कर के रूप में एक ही बुनियादी बात की तरह लगता है ?)
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
बिल्कुल स्पष्ट नहीं है कि इसका क्या अर्थ है