asm volatile(...);
__asm__ __volatile__(...);
मुझे लगता है कि दोनों का उपयोग किया जाता है; कुछ डुप्लिकेट सामान क्यों बनाएं?जीसीसी के साथ इनलाइन असेंबली लिखने के दो तरीके क्यों हैं?
asm volatile(...);
__asm__ __volatile__(...);
मुझे लगता है कि दोनों का उपयोग किया जाता है; कुछ डुप्लिकेट सामान क्यों बनाएं?जीसीसी के साथ इनलाइन असेंबली लिखने के दो तरीके क्यों हैं?
सी मानक किसी भी उद्देश्य के लिए उपयोगकर्ताओं द्वारा उपयोग के लिए 'एएसएम' आरक्षित करता है। इसलिए, जीसीसी उपयोगकर्ता के नाम स्थान में भागने से बचने के लिए __asm__
नोटेशन प्रदान करता है (क्योंकि डबल अंडरस्कोर से शुरू होने वाले पहचानकर्ता कार्यान्वयन के लिए आरक्षित हैं)।
डबल अंडरस्कोर के साथ नोटेशन अनजाने में है, इसलिए जीसीसी डबल अंडरस्कोर के बिना सुखद इंटरफ़ेस प्रदान करता है। लेकिन यदि आप मानक-अनुरूप संकलन मोड चालू करते हैं (जैसे -std=c99
), asm
विकल्प बंद है। डबल अंडरस्कोर नोटेशन के साथ लिखकर, यह हमेशा उपलब्ध है।
तो, asm
पढ़ने के लिए सुखद है, लेकिन __asm__
सी मानक के अनुरूप है।
GCC Inline Assembly HOWTO से "आपने गौर हो सकता है यहाँ है कि मैं asm
और __asm__
का उपयोग किया है। दोनों मान्य हैं। हम अपने कार्यक्रम में कुछ के साथ asm
संघर्ष कीवर्ड अगर __asm__
उपयोग कर सकते हैं।"
क्या मानक रिजर्व 'अस्थिर 'है? –
कीवर्ड 'अस्थिर' मानक, बिना शर्त के हिस्सा है। इसके विपरीत, 'asm' मानक में कोई कीवर्ड नहीं है, और कार्यान्वयन के लिए आरक्षित नामस्थान में नहीं है। मुझे नहीं पता कि '__volatile__' क्यों 'आवश्यक' या 'प्रयुक्त' है; मैंने इसे पहले असेंबलर के साथ इस्तेमाल नहीं किया था। आईपीएपैडॉप द्वारा संदर्भित जीसीसी इनलाइन असेंबली हाउटो दिखाता है कि 'asm' के साथ 'अस्थिर' का उपयोग कैसे किया जाता है। –