मुझे कॉलर और कैली सहेजे गए रजिस्टरों और किस का उपयोग करने के बीच अंतर को समझने में कुछ परेशानी हो रही है।कैली और कॉलर सहेजे गए रजिस्टरों क्या हैं?
मैं MSP430 उपयोग कर रहा हूँ:
प्रक्रिया:
mov.w #0,R7
mov.w #0,R6
add.w R6,R7
inc.w R6
cmp.w R12,R6
jl l$loop
mov.w R7,R12
ret
ऊपर कोड एक कॉल प्राप्त करने वाला है और इसलिए यह सम्मेलन इस प्रकार एक पाठ्यपुस्तक उदाहरण में इस्तेमाल किया गया था। आर 6 और आर 7 कैली बचाए गए हैं और आर 12 कॉलर बचाया गया है। मेरी समझ यह है कि कैली सेव किए गए regs इस अर्थ में "वैश्विक" नहीं हैं कि प्रक्रिया में अपना मूल्य बदलना प्रक्रिया के बाहर इसके मूल्य को प्रभावित नहीं करेगा। यही कारण है कि आपको शुरुआत में कैली रे में एक नया मूल्य बचाना होगा।
आर 12, बेहतर शब्दों की कमी के लिए सहेजा गया कॉलर "वैश्विक" है। कॉल के बाद आर 12 पर प्रक्रिया का स्थायी प्रभाव क्या है।
क्या मेरी समझ सही है? क्या मुझे अन्य चीजें याद आ रही हैं?
एक और शब्द जिसे मैं उपयोग करना चाहता हूं वह "कॉल-क्लॉब्बेड" बनाम "कॉल-संरक्षित" है। कॉलर बनाम कैली केवल एक अक्षर से भिन्न होता है, और कंपाइलर्स वास्तव में कॉल में कॉल-क्लॉबर्ड रेग को सहेजते/पुनर्स्थापित नहीं करते हैं (वे केवल कॉल-संरक्षित regs में मान डालते हैं।) अस्थिर बनाम गैर-अस्थिरता सी के ' अस्थिर 'कीवर्ड। इसलिए "कॉल-क्लॉब्बेड" सटीक रूप से वर्णन करता है कि कॉलिंग कन्वेंशन/एबीआई को कैसे कार्यान्वित किया जा सकता है, इसके बजाए * फ़ंक्शन * अन्य * कार्यों के बारे में क्या कार्य करने की आवश्यकता है। –