ऑब्जेक्ट कोड, मशीन कोड और असेंबली कोड में क्या अंतर है?
क्या आप उनके अंतर का एक दृश्य उदाहरण दे सकते हैं?
ऑब्जेक्ट कोड, मशीन कोड और असेंबली कोड में क्या अंतर है?
क्या आप उनके अंतर का एक दृश्य उदाहरण दे सकते हैं?
जवाबों:
मशीन कोड बाइनरी (1 और 0) कोड है जिसे सीधे सीपीयू द्वारा निष्पादित किया जा सकता है। यदि आप एक टेक्स्ट एडिटर में मशीन कोड फ़ाइल खोलने के लिए थे, तो आपको कचरा दिखाई देगा, जिसमें अनपेक्षित वर्ण (नहीं, उन अप्रमाणित वर्ण नहीं;)) शामिल हैं।
ऑब्जेक्ट कोड मशीन कोड का एक हिस्सा है जिसे अभी तक एक पूर्ण कार्यक्रम में जोड़ा नहीं गया है। यह एक विशेष पुस्तकालय या मॉड्यूल के लिए मशीन कोड है जो पूर्ण उत्पाद बनाएगा। इसमें प्लेसहोल्डर या ऑफ़सेट भी हो सकते हैं जो किसी पूर्ण प्रोग्राम के मशीन कोड में नहीं पाए जाते हैं। लिंकर कनेक्ट सब कुछ एक साथ करने के लिए इन प्लेसहोल्डर और ऑफसेट का उपयोग करेगा।
असेंबली कोड सादा-पाठ है और (कुछ हद तक) मानव पढ़ने में सक्षम स्रोत कोड, जिसमें अधिकतर मशीन निर्देशों के साथ 1: 1 एनालॉग है। यह वास्तविक निर्देशों, रजिस्टरों या अन्य संसाधनों के लिए mnemonics का उपयोग करके पूरा किया जाता है। उदाहरणों में शामिल हैं JMP
और MULT
CPU के कूद और गुणा निर्देश के लिए। मशीन कोड के विपरीत, CPU असेंबली कोड को नहीं समझता है। असेंबलर या कंपाइलर के उपयोग से आप असेंबली कोड को मशीन में बदल देते हैं, हालांकि हम आमतौर पर उच्च स्तरीय प्रोग्रामिंग भाषा के साथ कंपाइलर के बारे में सोचते हैं जो सीपीयू निर्देशों से आगे अमूर्त होते हैं।
एक संपूर्ण कार्यक्रम के निर्माण में या तो असेंबली या C ++ जैसी उच्च स्तरीय भाषा में प्रोग्राम के लिए सोर्स कोड लिखना शामिल है । स्रोत कोड को असेंबली कोड के लिए (असेंबली कोड के लिए) या संकलित (उच्च स्तरीय भाषाओं के लिए) किया जाता है, और अंतिम कार्यक्रम के लिए मशीन कोड बनने के लिए व्यक्तिगत मॉड्यूल को एक साथ जोड़ा जाता है। बहुत सरल कार्यक्रमों के मामले में लिंकिंग चरण की आवश्यकता नहीं हो सकती है। अन्य मामलों में, जैसे कि IDE (एकीकृत विकास परिवेश) के साथ लिंकर और कंपाइलर को एक साथ मंगाया जा सकता है। अन्य मामलों में, एक जटिल मेक स्क्रिप्ट या समाधान फ़ाइल का उपयोग पर्यावरण को यह बताने के लिए किया जा सकता है कि अंतिम आवेदन कैसे बनाया जाए।
ऐसी व्याख्या करने वाली भाषाएं भी हैं जो अलग तरह से व्यवहार करती हैं। व्याख्या की गई भाषाएं एक विशेष दुभाषिया कार्यक्रम के मशीन कोड पर निर्भर करती हैं। बुनियादी स्तर पर, एक दुभाषिया स्रोत कोड को पार्स करता है और तुरंत कमांडों को नए मशीन कोड में परिवर्तित करता है और उन्हें निष्पादित करता है। आधुनिक दुभाषियों, जिसे कभी-कभी एक रनटाइम-पर्यावरण या वर्चुअल मशीन भी कहा जाता है , बहुत अधिक जटिल होते हैं: एक समय में स्रोत कोड के पूरे वर्गों का मूल्यांकन करना, जहां संभव हो, कैशिंग और अनुकूलन करना और जटिल स्मृति प्रबंधन कार्यों को संभालना। एक व्याख्या की गई भाषा असेंबली कोड के समान निचले स्तर की मध्यवर्ती भाषा या बायटेकोड पर भी पूर्व संकलित की जा सकती है।
अन्य उत्तरों ने अंतर का अच्छा विवरण दिया, लेकिन आपने एक दृश्य के लिए भी कहा। यहाँ एक आरेख है जो वे सी कोड से एक निष्पादन योग्य तक की यात्रा दिखा रहे हैं।
विधानसभा कोड मशीन कोड का एक मानव पठनीय प्रतिनिधित्व है:
mov eax, 77
jmp anywhere
मशीन कोड शुद्ध हेक्साडेसिमल कोड है:
5F 3A E3 F1
मुझे लगता है कि आप ऑब्जेक्ट फ़ाइल के रूप में ऑब्जेक्ट कोड का मतलब है। यह मशीन कोड का एक प्रकार है, इस अंतर के साथ कि जंपर्स को ऐसे मानकीकृत किया जाता है कि एक लिंकर उन्हें भर सकता है।
असेंबलर का उपयोग असेंबली कोड को मशीन कोड (ऑब्जेक्ट कोड) में बदलने के लिए किया जाता है। एक लिंकर एक निष्पादन योग्य बनाने के लिए कई ऑब्जेक्ट (और लाइब्रेरी) फ़ाइलों को लिंक करता है।
मैंने एक बार शुद्ध हेक्स (कोई कोडांतरक उपलब्ध नहीं) में एक कोडांतरक कार्यक्रम लिखा है सौभाग्य से यह पुराने (प्राचीन) 6502 पर वापस आ गया था। लेकिन मुझे खुशी है कि पेंटियम ओपकोड के लिए कोडांतरक हैं।
एक बिंदु का अभी तक उल्लेख नहीं किया गया है कि विधानसभा कोड के कुछ अलग प्रकार हैं। सबसे बुनियादी रूप में, निर्देशों में प्रयुक्त सभी संख्याओं को स्थिरांक के रूप में निर्दिष्ट किया जाना चाहिए। उदाहरण के लिए:
$ 1902: बीडी 37 14: एलडीए $ 1437, एक्स $ 1905: 85 03: एसटीए $ 03 $ 1907: 85 09: एसटीए $ 09 $ 1909: सीए: डीईएक्स $ 190A: 10: BPL $ 1902
उपरोक्त कोड, यदि अटारी 2600 कारतूस में पता $ 1900 पर संग्रहीत है, तो एक तालिका से प्राप्त विभिन्न रंगों में कई पंक्तियों को प्रदर्शित किया जाएगा, जो पता $ 1437 से शुरू होता है। कुछ टूल्स पर, किसी एड्रेस में टाइप करने पर, ऊपर की लाइन के सबसे दाहिने हिस्से के साथ, बीच कॉलम में दिखाए गए मानों को मेमोरी में स्टोर करना होगा, और अगली लाइन को निम्नलिखित एड्रेस के साथ शुरू करना होगा। उस रूप में टाइपिंग कोड हेक्स में टाइप करने की तुलना में बहुत अधिक सुविधाजनक था, लेकिन किसी को हर चीज के सटीक पते को जानना था।
अधिकांश असेंबलर एक को प्रतीकात्मक पते का उपयोग करने की अनुमति देते हैं। उपरोक्त कोड को और अधिक लिखा जाएगा:
rainbow_lp: lda ColorTbl, x sta WSYNC Sta COLUBK डेक्स bpl इंद्रधनुष_lp
कोडांतरक एलडीए निर्देश को स्वचालित रूप से समायोजित करेगा, इसलिए यह लेबल कलरटब्ले को जो भी पते पर मैप किया गया था, उसे संदर्भित करेगा। कोडांतरक की इस शैली का उपयोग करने से कोड लिखना और संपादित करना बहुत आसान हो जाता है, अगर किसी को सभी कुंजी को हाथ से रखना और संभालना संभव होता।
स्रोत कोड, असेंबली कोड, मशीन कोड, ऑब्जेक्ट कोड, बाइट कोड, निष्पादन योग्य फ़ाइल और लाइब्रेरी फ़ाइल।
इन सभी शब्दों को अक्सर अधिकांश लोगों के लिए इस तथ्य के लिए भ्रमित किया जाता है कि उन्हें लगता है कि वे पारस्परिक रूप से अनन्य हैं । उनके संबंधों को समझने के लिए आरेख देखें। प्रत्येक पद का विवरण नीचे दिया गया है।
मानव पठनीय (प्रोग्रामिंग) भाषा में निर्देश
उच्च स्तरीय (प्रोग्रामिंग) भाषा में लिखे गए निर्देश
जैसे, C, C ++ और Java प्रोग्राम
एक विधानसभा भाषा में लिखे गए निर्देश (एक निम्न-स्तरीय प्रोग्रामिंग भाषा की तरह)। संकलन प्रक्रिया के पहले चरण के रूप में, उच्च-स्तरीय कोड को इस रूप में परिवर्तित किया जाता है। यह असेंबली कोड है जिसे बाद में वास्तविक मशीन कोड में परिवर्तित किया जा रहा है। अधिकांश प्रणालियों पर, इन दो चरणों को संकलन प्रक्रिया के एक भाग के रूप में स्वचालित रूप से किया जाता है।
उदाहरण के लिए, प्रोग्राम
एक संकलन प्रक्रिया का उत्पाद। यह मशीन कोड या बाइट कोड के रूप में हो सकता है।
उदाहरण के लिए, file.o
मशीन भाषा में निर्देश।
जैसे, a.out
एक मध्यवर्ती रूप में निर्देश जिसे जेवीएम जैसे दुभाषिया द्वारा निष्पादित किया जा सकता है।
जैसे, जावा क्लास फाइल
लिंकिंग का उत्पाद सफल हुआ। वे मशीन कोड हैं जो सीपीयू द्वारा सीधे निष्पादित किए जा सकते हैं।
उदाहरण के लिए, .exe फ़ाइल।
ध्यान दें कि कुछ संदर्भों में बाइट-कोड या स्क्रिप्टिंग भाषा निर्देशों वाली फ़ाइल को निष्पादन योग्य भी माना जा सकता है।
कुछ कोड अलग-अलग कारणों से इस रूप में संकलित किए जाते हैं जैसे कि पुन: प्रयोज्य और बाद में निष्पादन योग्य फ़ाइलों द्वारा उपयोग किया जाता है।
cc1
निष्पादन के अंदर एक अंतर्निहित कोडांतरक होता है )। मुझे लगता है कि एएसएम सर्कल को "स्रोत" सर्कल के बाईं ओर से बाहर निकलना चाहिए, क्योंकि कुछ एएसएम केवल एएसएम है, स्रोत नहीं। यह कभी भी ऑब्जेक्ट कोड नहीं है , लेकिन कुछ एएसएम स्रोत से ऑब्जेक्ट फ़ाइलों के रास्ते पर एक कदम है।
असेंबली कोड की यहां चर्चा की गई है ।
"असेंबली लैंग्वेज प्रोग्रामिंग कंप्यूटरों के लिए एक निम्न-स्तरीय भाषा है। यह एक विशेष सीपीयू आर्किटेक्चर को प्रोग्राम करने के लिए आवश्यक संख्यात्मक मशीन कोड और अन्य स्थिरांक के प्रतीकात्मक प्रतिनिधित्व को लागू करता है।"
मशीन कोड की यहां चर्चा की गई है ।
"मशीन कोड या मशीन भाषा एक निर्देश और डेटा की एक प्रणाली है जिसे सीधे कंप्यूटर की केंद्रीय प्रसंस्करण इकाई द्वारा निष्पादित किया जाता है।"
असल में, कोडांतरक कोड भाषा है और यह कोड (ऑब्जेक्ट एक संकलक के अनुरूप) द्वारा (सीपीयू चलाता है कि मूल कोड) ऑब्जेक्ट कोड के लिए अनुवादित है।
मुझे लगता है कि ये मुख्य अंतर हैं
पठनीयता के साथ बनाए जाने के 6 महीने बाद पठनीयता कोड में सुधार कर सकती है या प्रतिस्थापित कर सकती है, दूसरी ओर, यदि प्रदर्शन महत्वपूर्ण है, तो आप उत्पादन में आपके पास मौजूद विशिष्ट हार्डवेयर को लक्षित करने के लिए निम्न स्तर की भाषा का उपयोग करना चाह सकते हैं, इसलिए तेजी से निष्पादन।
आईएमओ आज कंप्यूटर तेजी से पर्याप्त हैं ताकि एक प्रोग्रामर को ओओपी के साथ तेजी से निष्पादन मिल सके।
असेंबली कम वर्णनात्मक शब्द है जो मनुष्य समझ सकते हैं कि मशीन कोड में सीधे अनुवाद किया जा सकता है जो कि सीपीयू वास्तव में उपयोग करता है।
जबकि मनुष्यों द्वारा कुछ हद तक समझ में आता है, असेंबलर अभी भी निम्न स्तर का है। कुछ भी उपयोगी करने के लिए बहुत सारे कोड लगते हैं।
इसलिए इसके बजाय हम C, BASIC, FORTAN (मुझे पता है कि मैंने खुद को डेट किया है) जैसी उच्च स्तरीय भाषाओं का उपयोग करते हैं। जब इन उत्पादन ऑब्जेक्ट कोड संकलित किया। प्रारंभिक भाषाओं में मशीन भाषा उनके ऑब्जेक्ट कोड के रूप में थी।
आज कई भाषाएँ ऐसी JAVA और C # आमतौर पर एक बाईटेकोड में संकलित होती हैं जो मशीन कोड नहीं है, लेकिन एक जिसे आसानी से मशीन कोड का उत्पादन करने के लिए रन टाइम पर व्याख्या की जाती है।
आपके कार्यक्रमों की स्रोत फाइलें ऑब्जेक्ट फ़ाइलों में संकलित की जाती हैं, और फिर लिंकर उन ऑब्जेक्ट फाइलों को एक साथ जोड़ता है, जो आपके आर्किटेक्चर के मशीन कोड सहित एक निष्पादन योग्य फ़ाइल का निर्माण करते हैं।
ऑब्जेक्ट संपादक और निष्पादन योग्य फ़ाइल दोनों में टेक्स्ट एडिटर द्वारा खोले जाने पर मुद्रण योग्य और गैर-मुद्रण योग्य वर्णों के रूप में आर्किटेक्चर का मशीन कोड शामिल होता है।
फिर भी, फ़ाइलों के बीच द्विभाजन यह है कि ऑब्जेक्ट फ़ाइल (ओं) में अनसुलझे बाहरी संदर्भ (जैसे printf
, उदाहरण के लिए) हो सकते हैं। इसलिए, इसे अन्य ऑब्जेक्ट फ़ाइलों के खिलाफ लिंक करने की आवश्यकता हो सकती है .. यह कहना है, सी / सी ++ रनटाइम लाइब्रेरी जैसी अन्य ऑब्जेक्ट फ़ाइलों के साथ जोड़कर सभ्य रन करने योग्य निष्पादन योग्य फ़ाइल प्राप्त करने के लिए अनसुलझे बाहरी संदर्भों को हल करने की आवश्यकता है। ।