मेरी समझ यह है कि एक कंपाइलर उच्च स्तरीय भाषा को मशीन कोड में परिवर्तित करता है। मेरे पास एक सवाल है कि एक कंपाइलर (वीसी ++ कहें) इन-टर्न में एक असेंबलर का भी उपयोग करता है? मुझे असेंबली कोड देखना याद है, जब भी कोई दुर्घटना हो या ऐसा कुछ हो।क्या एक कंपाइलर में एक असेंबलर भी है?
उत्तर
यह संकलक पर निर्भर करता है; कई कंपाइलर्स असेंबली के लिए संकलित कर सकते हैं। उदाहरण के लिए, आप की तरह, जीसीसी के लिए 'एस' ध्वज पारित करता है, तो:
gcc -S -o test.S test.c
कि फ़ाइल test.S जो आप देख सकते हैं में अपने test.c फ़ाइल के लिए आउटपुट विधानसभा। (यदि आप असेंबली को पढ़ने की कोशिश कर रहे हैं, तो मैं -O0 का उपयोग करने की अनुशंसा करता हूं, क्योंकि इसमें कंपाइलर ऑप्टिमाइज़ेशन संभवतः आपके द्वारा बिल्ली को भ्रमित कर देगा)।
चूंकि आपने अपने प्रश्न में विजुअल सी ++ का उल्लेख किया है, इसलिए पॉल डिक्सन नीचे बताते हैं कि विज़ुअल सी ++ एक ही चीज़ को पूरा करने के लिए the /FA flag का उपयोग करता है।
उत्पन्न करने के लिए एमएएसएम को कॉल करता है, वास्तव में, मुख्य रूप से मुख्य रूप से जीसीसी ऐसा करता है :-) अधिकांश वाणिज्यिक लोगों को धीमी उत्पन्न करने/यदि आवश्यक हो तो असेंबलर उत्पन्न करने के लिए केवल एक विकल्प के साथ पाठ चरण को दोबारा पोस्ट करना। –
एक कंपाइलर सीधे मशीन कोड पर जाता है।
डीबगर मशीन कोड निर्देशों को असेंबलर के रूप में दिखाएगा, लेकिन डीबगर अन्य कोड भी दिखा सकता है जो संकलक द्वारा संकलित नहीं किया गया था।
कंपाइलर में एक असेंबलर भी शामिल हो सकता है ताकि आप उच्च स्तर की भाषा के साथ इनलाइन असेंबलर कोड शामिल कर सकें या असेंबलर आउटपुट उत्पन्न कर सकें।
सही नहीं है .... मैं एक कंपाइलर प्रोग्राम कर सकता हूं जो एक असेंबलर के साथ इकट्ठा होने के लिए केवल असेंबली स्रोत आउटपुट करता है ... इसके अलावा, कंपाइलर शायद ही _Directly_ मशीन कोड पर जाता है ... आंतरिक प्रतिनिधित्व (लक्ष्य मशीन कोड से अलग) कोड (!) अनुकूलन करने के लिए बहुत उपयोगी हो सकता है और इसी तरह ... ठीक है, सबकुछ संभवतः छुपा हुआ है, लेकिन "_directly_" बहुत अधिक है! : डी – ShinTakezou
आप ओपी के प्रश्न का उत्तर देने के लिए कर सकते हैं विजुअल स्टूडियो एंबेबलर आउटपुट नहीं करता है और फिर एक्सई –
सबसे compilers एक विधानसभा लिस्टिंग देखने का विकल्प भी होगा
- कुलपति उत्पादन के लिए एक कोडांतरक /FA जीसीसी के साथ
- साथ लिस्टिंग, का उपयोग -S स्विच
एक बताया जा सकती है कंपाइलर कुछ निम्न स्तर की प्रोग्रामिंग भाषा को कुछ निम्न स्तर की भाषा में अनुवाद करता है (जैसे मशीन कोड, असेंबली या यहां तक कि एक और उच्च स्तरीय भाषा, उदाहरण के लिए वैला से सी, या यूसी ++ से सी ++ तक)।
मैं कुलपति ++, लेकिन सबसे compilers, जीएनयू जीसीसी doensn't एक असेंबलर शामिल के रूप में के बारे में पता नहीं है, लेकिन एक बाहरी असेंबलर कार्यक्रम आह्वान (एनएएसएम, या ग्नू के रूप में के रूप में)।
चीयर्स
सामान्य तौर पर, एक संकलक दूसरे में एक भाषा अनुवाद करता है। अधिकांश कंपाइलर्स लक्ष्य मशीन कोड; निम्नतम स्तर से लेकर उच्चतम स्तर तक:
- प्रत्येक निर्देश सेट के लिए बैक-एंड समेत सीधे मशीन कोड का निर्माण करें।
- उत्पादन विधानसभा भाषा है, जो एक बाहरी कोडांतरक में भेजा जाता है। यह जीसीसी करता है। आखिरकार, मौजूदा असेंबलरों का उपयोग क्यों नहीं करें? सीधे ओपोड उत्पन्न करना एक दर्द है।
- कोड का एक निम्न स्तर के मध्यवर्ती फार्म, जैसे LLVM bytecode है, जो मशीन कोड के रूप में तब्दील हो जाता है उत्पन्न करें। एलएलवीएम संकलक-लेखकों के लिए एक देवता है, क्योंकि यह बड़ी संख्या में अनुकूलन को संभालता है और कई बैक-एंड का समर्थन करता है, जबकि आपको असेंबली की तुलना में उच्च स्तर पर लिखने देता है।
- सी की तरह एक भाषा में कोड रूपांतरण, और फिर इसे एक और संकलक के लिए गुजरती हैं। Facebook does this to PHP: वे इसे C++ पर संकलित करते हैं, और उसके बाद जीएनसी का उपयोग असेंबली को संकलित करने के लिए करते हैं, जिसे जीएनयू द्वारा देशी कोड में इकट्ठा किया जाता है।
यदि आप एक कंपाइलर लिखने की कोशिश करना चाहते हैं, तो मैं सी जैसे बैक एंड के रूप में कुछ शुरू करने की सलाह दूंगा। यदि आप बाद में अधिक विस्तृत करना चाहते हैं, तो एलएलवीएम आज़माएं। यदि आप सीधे असेंबली भाषा या मशीन कोड तैयार करने का प्रयास करते हैं, तो यह शायद सी कंपाइलर या एलएलवीएम का उत्पादन करने से कम कुशल होगा। मैं इस पर शर्मनाक व्यक्तिगत अनुभव से बात करता हूं।
- 1. एक असेंबलर
- 2. सीआईएल एक असेंबली भाषा है और जेआईटी एक असेंबलर
- 3. क्या इंटेल और एएमडी प्रोसेसर में एक ही असेंबलर है?
- 4. एक असेंबलर कैसे काम करता है?
- 5. एक अच्छा सी # कंपाइलर-कंपाइलर/पार्सर जेनरेटर क्या है?
- 6. क्रेन्शॉ की "चलो एक कंपाइलर बनाएं": सी और x86 असेंबलर के लिए ट्रांसक्रिप्शन?
- 7. क्या जेवीएम असेंबलर हैं?
- 8. क्या यह पीएल/एसक्यूएल कंपाइलर में एक बग है?
- 9. एक असेंबलर बनाने के लिए डिजाइन पैटर्न
- 10. एक कार्यात्मक भाषा में एक कंपाइलर लिखना क्यों आसान है?
- 11. आप एक असेंबलर कैसे बनाते हैं?
- 12. क्या लिनक्स के तहत असेंबलर आरपीएल है?
- 13. असेंबली में एक जेआईटी कंपाइलर लिखना
- 14. माइक्रोसॉफ्ट असेंबलर जीएनयू असेंबलर रूपांतरण
- 15. क्या कोई रनटाइम सी ++ असेंबलर लाइब्रेरी है?
- 16. एक अच्छा सी कंपाइलर
- 17. Googles GOLANG एक दुभाषिया या कंपाइलर है?
- 18. क्या किसी के पास एक कामकाजी बी कंपाइलर है?
- 19. टीआई डीएसपी प्रोग्रामिंग - सी तेजी से पर्याप्त है या क्या मुझे एक असेंबलर की आवश्यकता है?
- 20. क्या यह एक वीसी ++ 2010 कंपाइलर बग है?
- 21. क्या यह एक सी # 4.0 कंपाइलर वैकल्पिक पैरामीटर बग है?
- 22. जावा कंपाइलर विषमता: एक ही कक्षा में घोषित फ़ील्ड, फिर भी "दिखाई नहीं दे रहा है"
- 23. 64-बिट विंडोज असेंबलर
- 24. लिनक्स में संकलित/रन असेंबलर?
- 25. क्या कोई डेल्फी के लिए एक मुफ्त कंपाइलर जानता है?
- 26. मैक ओएसएक्स के लिए एक अच्छा बेसिक कंपाइलर क्या है?
- 27. एक बैकएंड कंपाइलर की आवश्यकता है
- 28. स्केल में एक भी एस्ट्रोफ़े का मतलब क्या है?
- 29. कंपाइलर निर्माण में, एक टोकन के समान प्रतीक है?
- 30. जावा कंपाइलर में लगातार फोल्डिंग क्या है?
असेंबलर कुछ निमोनिक कोड (जैसे 'mov ax, bx') के लिए मशीन निर्देशों (कोड के बिट्स) का एक-से-एक मैपिंग है। यही कारण है कि आप बिना किसी बड़े प्रयास के असेंबली कोड मशीन कोड और वापस अनुवाद कर सकते हैं। कंपाइलर अधिक जटिल काम कर रहा है और स्रोत कोड और उत्पादित कोड के बीच कोई एक-एक संबंध नहीं है (इससे कोई फर्क नहीं पड़ता कि यह सीधे मशीन कोड या असेंबली निर्देश है)। यही कारण है कि आप आमतौर पर बाइनरी कोड से स्रोत कोड नहीं देख सकते हैं। – ony
ओनी: यह एक गैर प्रतीकात्मक, गैर मैक्रो बैकएंड असेंबलर के लिए जाता है। लेकिन जीएएस आउटपुट भी प्रतीकात्मक है। –