2015-11-05 6 views
7

यदि मैं .NET कंपाइलर चलाता हूं तो यह एक फ़ाइल उत्पन्न करता है जिसमें इंटरमीडिएट भाषा कोड (आईएल) होता है और इसे एक .exe फ़ाइल (उदाहरण के लिए) में डाल दिया जाता है।आईएल कोड बनाम आईएल असेंबली: क्या कोई अंतर है?

यदि मैं ildasm जैसे टूल का उपयोग करता हूं तो यह मुझे फिर से आईएल कोड दिखाता है।

हालांकि अगर मैं सीधे एक फ़ाइल आईएल कोड में लिखता हूं तो मैं एक .exe फ़ाइल बनाने के लिए ilasm का उपयोग कर सकता हूं।

इसमें क्या शामिल है? आईएल कोड फिर से? आईएल कोड आईएल असेंबली कोड के लिए अलग है?

आईएल कोड और आईएल असेंबली के बीच कोई अंतर है?

+0

आईएल कोड instrunctions का एक सेट है, जबकि एस्सेबल में आईएल, मैनिफेस्ट, मेटाडाटा और संसाधन शामिल हैं http://i.stack.imgur.com/naTeg.png –

+0

जेफरी रिचटर पुस्तक आपके प्रश्न का उत्तर देगी (सी # सी के माध्यम से सीएलआर) –

उत्तर

2

एक .NET असेंबली में एमएसआईएल नहीं है, इसमें मेटाडेटा और बाइट्स हैं जो आईएल ऑपकोड का प्रतिनिधित्व करते हैं। शुद्ध बाइनरी डेटा, पाठ नहीं। किसी भी .NET डिकंपेलर, जैसे ildasm.exe, बाइट्स को वापस पाठ में परिवर्तित करने के बारे में जानें। यह बहुत सीधे आगे है।

सी # कंपाइलर सीधे बाइनरी डेटा उत्पन्न करता है, कोई मध्यवर्ती पाठ प्रारूप नहीं है। जब आप टेक्स्ट एडिटर के साथ अपना खुद का आईएल कोड लिखते हैं तो आपको इसे बाइनरी में बदलने के लिए ilasm.exe की आवश्यकता होती है। यह बहुत सीधे आगे है।

द्विआधारी डेटा उत्पन्न करने का सबसे कठिन काम मेटाडाटा बीटीडब्ल्यू है। यह जितना संभव हो उतना छोटा बनाने के लिए अत्यधिक सूक्ष्म अनुकूलित है, इसकी संरचना काफी पतली है। कोई कंपाइलर सीधे बाइट उत्पन्न करता है, वे उस काम को पाने के लिए pre-built component का उपयोग करेंगे। उल्लेखनीय है कि रोज़लिन को इसे स्क्रैच, बड़ी नौकरी से फिर से लिखना पड़ा।

+0

तो हम कह सकते हैं कि आईएल असल में असेंबली भाषा है। वास्तव में हम इसके साथ कोड लिख सकते हैं। इलज्म तब असेंबलर है जो इस मानव-पठनीय कोड को आईएल बाइनरी कोड में परिवर्तित करता है जो अंत में जेआईटी द्वारा सीएलआर में संसाधित होता है। क्या यह सब सही है? – xdevel2000

+0

निश्चित रूप से, यह वर्चुअल मशीन की भाषा है।एक जिसे वास्तव में कभी बनाया नहीं गया है, इसे हमेशा एक समय-समय पर संकलक द्वारा मशीन कोड में अनुवादित करने के लिए डिज़ाइन किया गया था। –

7

हाँ, वहाँ उन दोनों के बीच एक बड़ा अंतर है, क्योंकि है:

  • (आईएल) जो भी रूप में माइक्रोसॉफ्ट मध्यवर्ती भाषा या आम मध्यवर्ती भाषा में जाना जाता है बहुत द्वारा उत्पन्न बाइट कोड के समान माना जा सकता है जावा भाषा, और मुझे लगता है कि आप अपने प्रश्न में आईएल कोड के रूप में संदर्भित कर रहे हैं।

  • (आईएलएएसएम) में मूल असेंबली भाषा के समान निर्देश है। आप आईएलएएसएम के लिए कोड को किसी भी टेक्स्ट एडिटर जैसे नोटपैड में लिख सकते हैं और उसके बाद संकलित करने के लिए .NET फ्रेमवर्क द्वारा प्रदान की गई कमांड लाइन कंपाइलर (ILAsm.exe) का उपयोग कर सकते हैं।

मुझे लगता है कि आईएल विधानसभा एक पूरी तरह से विकसित .NET भाषा (शायद एक मध्यवर्ती भाषा) माना जा सकता है, इसलिए जब आप ILAsm.exe साथ आप (काफी उसी तरह से आईएल उत्पादन कर रहे हैं कम से ILAsm संकलन कदम) कि आपका सी # कंपाइलर सी # कोड के साथ करता है ...

जैसा कोई टिप्पणी में कहा गया है आईएल असेंबली मूल रूप से .NET बाइट कोड का मानव पठनीय संस्करण है।

+0

एक समानता: आईएल बाइनरी धारावाहिक ILAsm की तरह है। यह मानव-पठनीय नहीं है लेकिन इसका मतलब है * बिल्कुल * वही बात। –

+0

तो, यह असेंबलर के साथ मशीन कोड की तुलना करना है। –

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