2009-10-24 13 views
6

सी-जैसी भाषा में फ़ंक्शन में इनलाइन असेंबलर डालने पर, इस बारे में सम्मेलन क्या है कि आपको किस रजिस्टरों को स्क्रैच के लिए उपयोग करने की अनुमति है? क्या यह asm ब्लॉक दर्ज करने से पहले सहेजे जाने वाले सभी रजिस्टरों के मूल्यों को सहेजने के लिए संकलक की ज़िम्मेदारी है? क्या यह प्रोग्रामर की ज़िम्मेदारी कहीं भी इन रजिस्टरों में मूल्यों को स्टोर करने और asm ब्लॉक से बाहर निकलने से पहले उन्हें बहाल करने की ज़िम्मेदारी है? क्या कोई आम सम्मेलन है, या यह बहुत ही कार्यान्वयन-विशिष्ट है?इनलाइन असेंबलर: किस स्क्रैच रजिस्टरों का उपयोग किया जा सकता है?

उत्तर

9

इनलाइन असेंबली परिभाषा के अनुसार, संकलक-विशिष्ट है।

सबसे compilers कि समर्थन इनलाइन विधानसभा में एक वाक्य विन्यास है कि आप से संकेत मिलता है जो पंजीकृत करता विधानसभा द्वारा संशोधित कर रहे हैं अनुमति देता है। संकलक तब आवश्यकतानुसार उन रजिस्टरों को सहेज और पुनर्स्थापित कर सकता है।

2

आप कुछ बुला सम्मेलनों here में रजिस्टर के उपयोग पर पढ़ सकते हैं।

7

यह बहुत ही संकलक विशिष्ट है। हालांकि, एक यथार्थवादी उदाहरण के लिए x86 पर gcc लेते हैं। प्रारूप है:

asm (assembler template 
    : output operands    (optional) 
    : input operands    (optional) 
    : list of clobbered registers  (optional) 
    ); 

जहां "क्लॉबर्ड रजिस्टरों की सूची" आप संकलक को बता रहे हैं जो आपके कोड का उपयोग कर रहा है।

यहाँ एक सरल स्मृति प्रतिलिपि कोड है:

asm ("movl $count, %%ecx; 
     up: lodsl;  
     stosl; 
     loop up;" 
    :   /* no output */ 
    :"S"(src), "D"(dst) /* input */ 
    :"%ecx", "%eax"); /* clobbered list */  

इन निर्देशों को देखते हुए, जीसीसी ब्लॉक में अन्य बातों के लिए eax और ECX का उपयोग कर नहीं किया जाएगा।

अधिक जानकारी here

संबंधित मुद्दे

 संबंधित मुद्दे