क्या सभी कंप्यूटरों के लिए एक सार्वभौमिक विधानसभा भाषा संभव है?


23

मैं विधानसभा भाषा के बारे में कुछ प्रश्न पूछना चाहता हूं। मेरी समझ यह है कि यह मशीन की भाषा के बहुत करीब है, इसे तेज और अधिक कुशल बनाता है।

चूंकि हमारे पास अलग-अलग कंप्यूटर आर्किटेक्चर मौजूद हैं, इसका मतलब है कि मुझे अलग-अलग आर्किटेक्चर के लिए विधानसभा में अलग-अलग कोड लिखना होगा? यदि हां, तो असेंबली क्यों नहीं है, एक बार लिखें - हर जगह भाषा के प्रकार? बस इसे सार्वभौमिक बनाने के लिए आसान नहीं होगा, ताकि आप इसे केवल एक बार लिखें और इसे विभिन्न विन्यासों के साथ लगभग किसी भी मशीन पर चला सकें? (मुझे लगता है कि यह असंभव होगा, लेकिन मैं कुछ ठोस, गहन उत्तर देना चाहूंगा)

कुछ लोग कह सकते हैं कि C वह भाषा है जिसकी मुझे तलाश है। मैंने पहले C का उपयोग नहीं किया है, लेकिन मुझे लगता है कि यह अभी भी एक उच्च-स्तरीय भाषा है, हालांकि उदाहरण के लिए, शायद जावा से भी तेज। मैं यहां गलत हो सकता हूं।


10
आपने क्या शोध किया है? हम आपसे बेहतर प्रश्न पूछने में मदद करने से पहले आपसे अनुसंधान करने की अपेक्षा करते हैं। विधानसभा भाषा पर बहुत कुछ लिखा गया है।
डीडब्ल्यू

4
हम उम्मीद करते हैं कि आप पूछने से पहले एक महत्वपूर्ण मात्रा में शोध / स्वाध्याय करेंगे, और हमें इस प्रश्न में बताएंगे कि आपने क्या शोध किया है। इस मामले में, अनुसंधान में प्रासंगिक विकिपीडिया लेख (जैसे, असेंबली भाषा और कंप्यूटर आर्किटेक्चर पर) पढ़ना और कंप्यूटर आर्किटेक्चर पाठ्यपुस्तक पढ़ना शामिल हो सकता है। इसे बेहतर प्रश्न बनाने के लिए: उस शोध को करें, यदि आपने पहले से नहीं किया है, और फिर आपके द्वारा किए गए शोध को समझाने के लिए प्रश्न को संपादित करें। अक्सर इस तरह के शोध से आपको एक बेहतर प्रश्न तैयार करने में मदद मिलती है; और किसी भी मामले में यह उत्तरदाताओं को दोहराने से बचने में मदद करता है जो आप पहले से जानते हैं।
डीडब्ल्यू

15
यह समझने के साथ शुरू करें कि / कोई भाषा क्यों नहीं है जिसे विधानसभा कहा जाता है।
राफेल

2
सी पोर्टेबिलिटी के साथ एक "क्लासिक" समस्या विभिन्न हार्डवेयर पर अलग-अलग आदिम (जैसे पूर्णांक) आकार है और कुछ अन्य उद्धृत हैं।
22

3
यह एक तकनीकी समस्या की तुलना में एक सामाजिक समस्या है - आपको सभी सीपीयू निर्माताओं को अपने सीपीयू को एक ही मशीन भाषा को स्वीकार करने के लिए मनाने की आवश्यकता है। (वास्तव में, x86 लगभग यह होने जा रहा था, संयोग से - फिर स्मार्टफोन ने उड़ान भरी)
user253751

जवाबों:


45

असेंबली भाषा कंप्यूटर के इंस्ट्रक्शन सेट के लिए निर्देश लिखने का एक तरीका है , एक तरह से जो मानव प्रोग्रामर के लिए थोड़ा अधिक समझ में आता है।

विभिन्न आर्किटेक्चर के अलग-अलग निर्देश सेट होते हैं: अनुमत निर्देशों का सेट प्रत्येक आर्किटेक्चर पर अलग होता है। इसलिए, आप एक लिखने-एक बार चलने-हर जगह विधानसभा कार्यक्रम होने की उम्मीद नहीं कर सकते। उदाहरण के लिए, x86 प्रोसेसर द्वारा समर्थित निर्देशों का सेट एआरएम प्रोसेसर द्वारा समर्थित निर्देशों के सेट से बहुत अलग दिखता है। यदि आपने x86 प्रोसेसर के लिए असेंबली प्रोग्राम लिखा है, तो इसमें बहुत सारे निर्देश होंगे जो एआरएम प्रोसेसर पर समर्थित नहीं हैं, और इसके विपरीत।

असेंबली लैंग्वेज का उपयोग करने का मुख्य कारण यह है कि यह आपके प्रोग्राम पर बहुत कम-स्तरीय नियंत्रण की अनुमति देता है, और प्रोसेसर के सभी निर्देशों का लाभ उठाने के लिए: प्रोग्राम को कस्टमाइज़ करके उन विशेषताओं का लाभ उठाने के लिए जो विशेष प्रोसेसर के लिए अद्वितीय हैं पर चलेंगे, कभी-कभी आप कार्यक्रम को गति दे सकते हैं। लेखन-एक बार-हर जगह चलने वाला दर्शन मौलिक रूप से इसके साथ है।


1
मुझे लगता है कि प्रश्न पहले से ही मेरे उत्तर के तीसरे पैराग्राफ द्वारा उत्तर दिया गया है। जैसा कि आपने कहा, ऐसी योजना कुशल नहीं होगी, इसलिए यह मूल रूप से असेंबली भाषा का उपयोग करने के मूल कारण के साथ होगा।
डीडब्ल्यू

26
@nTuply जैसे ही आप अपनी विधानसभा भाषा को विभिन्न मशीनों के लिए पूरा करने के लिए संशोधित करते हैं, यह बहुत ही उच्च स्तर की भाषा है जो असेंबली-शैली की वाक्य रचना के साथ है। एक बार उच्च-स्तरीय भाषा का उपयोग करने का निर्णय लेने के बाद, आप मित्रवत वाक्यविन्यास के साथ एक का उपयोग कर सकते हैं और संकलक को कड़ी मेहनत करने दें।
डेविड रिचरबी

15
"असेंबली लैंग्वेज" का पूरी तरह से बेवकूफी भरा विचार नहीं है जो विभिन्न मशीनों के लिए अनुवादित है, क्योंकि मूल रूप से एलएलवीएम की "आईआर" है। हालाँकि, डेविड द्वारा दिए गए कारणों के लिए, आप सामान्यतः LLVM असेंबली नहीं लिखते हैं । इसलिए भी क्योंकि 100 में से 99 बार आप इसे लिखने की तुलना में बदतर काम करेंगे, जो कि आपके सी को एलएलवीएम में अनुवाद करने के लिए है। असेंबली लैंग्वेज उच्च स्तर की भाषाओं की तुलना में संभावित रूप से अधिक कुशल हैं, लेकिन अधिकांश वास्तविक प्रोग्रामर के हाथों में अनुकूलन के लिए उपलब्ध समय की एक विशिष्ट मात्रा के साथ, वैसे भी वे अपनी क्षमता तक नहीं पहुंचते हैं।
स्टीव जेसोप

9
@nuply, जो मौजूद है। उस अतिरिक्त-असेंबली भाषा से मशीन निर्देशों तक जाने की प्रक्रिया को संकलन कहा जाता है।
पॉल ड्रेपर

3
@PJTraill आधुनिक सिस्टम पर कोडांतरक में कंपाइलर लिखने का कोई कारण नहीं है, सिवाय पहले बूटस्ट्रैपिंग कदम के (और अधिकांश समय, तब भी नहीं)। एक उच्च स्तरीय भाषा में लिखा संकलनकर्ता हैं बेहद अधिक वास्तव में पोषणीय होने की संभावना। यह भी तुलना करें कि जिस भाषा का कंपाइलर C में लिखा गया है वह C से तेज कैसे हो सकता है? । एक संकलक का उद्देश्य एक भाषा (स्रोत भाषा) से दूसरे (आमतौर पर विशिष्ट वास्तुकला और ओएस के लिए मशीन भाषा) का अनुवाद करना है; यह किसी भी भाषा में लिखा जा सकता है।
बजे एक CVn

13

असेंबली लैंग्वेज की परिभाषा यह है कि यह एक ऐसी भाषा है जिसका अनुवाद सीधे मशीन कोड में किया जा सकता है। असेंबली भाषा में प्रत्येक ऑपरेशन कोड लक्ष्य कंप्यूटर पर ठीक एक ऑपरेशन में अनुवाद करता है। (ठीक है, यह उससे थोड़ा अधिक जटिल है: कुछ असेंबली एक ऑप-कोड के लिए तर्कों के आधार पर स्वचालित रूप से "एड्रेसिंग मोड" निर्धारित करते हैं। लेकिन फिर भी, सिद्धांत यह है कि असेंबली की एक लाइन एक मशीन-भाषा निर्देश में अनुवाद करती है।)

आप कोई संदेह नहीं कर सकते, एक ऐसी भाषा का आविष्कार करेंगे जो असेंबली भाषा की तरह दिखाई देगी, लेकिन विभिन्न कंप्यूटरों पर अलग-अलग मशीन कोड में अनुवादित की जाएगी। लेकिन परिभाषा के अनुसार, यह विधानसभा भाषा नहीं होगी। यह एक उच्च-स्तरीय भाषा होगी जो असेंबली भाषा से मिलती जुलती है।

आपका सवाल थोड़ा पूछने जैसा है, "क्या ऐसी नाव बनाना संभव है जो तैरती नहीं है या पानी के पार जाने के लिए कोई रास्ता नहीं है, लेकिन पहियों और एक मोटर है और जमीन पर यात्रा कर सकती है?" इसका उत्तर यह होगा कि परिभाषा के अनुसार, ऐसा वाहन नाव नहीं होगा। यह एक कार की तरह लगता है।


1
सी को अक्सर "पोर्टेबल असेंबली भाषा" के रूप में वर्णित किया गया है।
लैरी ग्रिट्ज़

2
@LarryGritz ज़रूर। और जब सी का आविष्कार किया गया था, तो यह भूस्खलन था: यह एक संकलित उपयोग की आसानी के साथ विधानसभा भाषा की शक्ति की बहुत पेशकश करता था। लेकिन परिभाषा के अनुसार, यह अभी भी एक संकलित भाषा है
Jay

8

दुनिया के सभी कंप्यूटर्स के लिए एक असेंबली लैंग्वेज होने के खिलाफ कोई भी वैचारिक (I dareay, no computer science ) कारण नहीं है। वास्तव में, यह कई चीजों को बहुत आसान बना देगा। जहां तक ​​सिद्धांत का संबंध है, वे सभी समान हैं, वैसे भी, कुछ फंकी बायजेक्शन तक।

व्यवहार में, हालांकि, अलग-अलग उद्देश्यों के लिए अलग-अलग चिप्स होते हैं, विभिन्न कार्यों और डिजाइन सिद्धांतों (जैसे आरआईएससी बनाम सीआईएससी) के साथ जो अलग-अलग लक्ष्यों की सेवा करते हैं, और निर्देश सेट जो उन्हें संचालित करते हैं और विधानसभा भाषाओं को अलग करते हैं। अंत में, उत्तर एक ही है कि यह पूछने पर कि विभिन्न प्रोग्रामिंग भाषाएं क्यों हैं : विभिन्न लक्ष्य, विभिन्न डिजाइन निर्णय।

उस ने कहा, आप कुछ साझा इंटरफ़ेस को प्राप्त करने के लिए अमूर्तता के स्तरों का परिचय दे सकते हैं। उदाहरण के लिए, x86 को चिप लेवल पर कुछ समय के लिए दूर किया गया है; हार्डवेयर का एक छोटा सा टुकड़ा है जो आपके प्रोसेसर के साथ वास्तव में काम करने के लिए x86 निर्देशों का अनुवाद करता है। C जैसी भाषाएं हार्डवेयर से एक और कदम दूर होंगी (यदि यकीनन छोटी हो तो), हास्केल, जावा या रूबी जैसी भाषाओं तक। हां, कंपाइलर कंप्यूटर विज्ञान की मुख्य उपलब्धियों में से एक है क्योंकि वे इस फैशन में चिंताओं को अलग करना संभव बनाते हैं।


6
"अगर एक यकीनन छोटा है" - वहाँ आपके प्रोग्रामर के दो प्रकार हैं। जो लोग C को निम्न-स्तरीय भाषा मानते हैं, क्योंकि इसका मूल संचालन बहुत सी चीज़ों की तरह दिखता है जो CPU निर्देश सेट में दिखाई देते हैं, और जो C को उच्च-स्तरीय भाषा मानते हैं क्योंकि यह मशीन के समान निर्देश सेट नहीं है ।
स्टीव जेसप

अगर असेंबली लैंग्वेज से आपका मतलब है कि हार्डवेयर के एक विशिष्ट प्रकार (या परिवार) के लिए बनाए गए मशीन कोड पर पूर्ण नियंत्रण देना, तो एक पल में हमारी दुनिया में "सभी कंप्यूटरों के लिए" एक भाषा को परिभाषित करना संभव होगा, लेकिन यह हो सकता है बदलते रहना है। यह निश्चित रूप से (यदि अच्छी तरह से डिजाइन किया गया है) एक नई वास्तुकला के लिए कोडिंग के लिए सीखने की अवस्था को छोटा कर देगा, लेकिन मुझे उम्मीद है कि एक संकलक के बजाय आप इसके साथ क्या करना चाहते हैं किसी भी नौकरी केवल आर्किटेक्चर के एक छोटे से अंश पर लागू होगी। यह कंप्यूटर एक सार स्तर पर समान है एक लाल हेरिंग है, यह मशीन कोड के बारे में है।
PJTraill

7

आप इसके महत्व पर ध्यान दिए बिना "लिखो एक बार कहीं भी लिखो" वाक्यांश का उल्लेख करें। यह सन माइक्रोसिस्टम्स के लिए मार्केटिंग का नारा है, जिसने व्यावसायिक रूप से जावा के लिए एक "वर्चुअल मशीन" और "बाइटेकोड्स" की अवधारणा का आविष्कार किया था , हालांकि संभवतः इस विचार की उत्पत्ति अकादमिया 1 सेंट में हुई होगी।। बाद में जावा लाइसेंसिंग के उल्लंघन के लिए रवि द्वारा सफलतापूर्वक मुकदमा दायर किए जाने के बाद इस विचार को बाद में Microsoft द्वारा .Net के लिए कॉपी किया गया था। जावा बाइटकोड्स क्रॉस-मशीन असेंबली या मशीन भाषा के विचार का कार्यान्वयन है। वे जावा की तुलना में कई अन्य भाषाओं के लिए उपयोग किए जाते हैं और सैद्धांतिक रूप से किसी भी भाषा को संकलित करने के लिए उपयोग किया जा सकता है। बहुत उन्नत अनुकूलन के कई वर्षों के बाद, उच्च प्रदर्शन मंच-अज्ञेय वर्चुअल मशीन प्रौद्योगिकी का लक्ष्य सामान्य रूप से प्राप्त करने योग्य है, संकलित भाषाओं के प्रदर्शन में जावा करीब आता है।

अपनी आवश्यकताओं से संबंधित प्रारंभिक चरणों / परिसंचारी में एक और नया विचार पुनर्संयोजन परियोजना कहा जाता है और वैज्ञानिक अनुसंधान के लिए है, हालांकि इसका उपयोग अन्य उद्देश्यों के लिए किया जा सकता है। वर्चुअल मशीन प्रौद्योगिकी के माध्यम से कम्प्यूटेशनल प्रयोगों को पुन: प्रयोज्य बनाने का विचार है। यह मुख्य रूप से विभिन्न मशीन आर्किटेक्चर को मनमाने हार्डवेयर पर अनुकरण करने का विचार है।


8
सूर्य ने या तो आभासी मशीनों या बाइट कोड का आविष्कार नहीं किया, वे उन्हें बंद करने के लिए पैसा बनाने वाले पहले समूह भी नहीं थे। पी-कोड देखें।
jmoreno

@jmoreno: वह भी स्मॉलटाक को देखना चाहता है।
बॉब जार्विस -

लेख का दावा नहीं है सूरज का आविष्कार आभासी मशीनों / बाइट कोड। अन्य इतिहास का हवाला नहीं दिया गया है, लेकिन इसका हवाला दिया गया है। btw एक और महत्वपूर्ण तकनीक यहां बहुत प्रासंगिक है: Google देशी ग्राहक (क्रोम सुविधा)
vzn

5

उच्च स्तर के कारण

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

लेकिन एक पर लटका, मानक चिप, अनगिनत जगह कस्टम डिजाइन? एक एकल, पूर्ण माइक्रोप्रोसेसर नहीं हो सकता है जो हर एप्लिकेशन के लिए एकदम सही है। कुछ अनुप्रयोगों को बिजली के उपयोग को कम करने की आवश्यकता है लेकिन उन्हें तेज़ होने की आवश्यकता नहीं है; दूसरों को उपवास करने की आवश्यकता है लेकिन कार्यक्रम को आसान बनाने की आवश्यकता नहीं है, दूसरों को कम लागत की आवश्यकता है, आदि।

तो, हमारे पास माइक्रोप्रोसेसर के कई अलग-अलग "स्वाद" हैं, प्रत्येक की अपनी ताकत और कमजोरियों के साथ। यह सभी के लिए वांछनीय है कि वे संगत निर्देश सेट का उपयोग करें, क्योंकि इससे कोड का पुन: उपयोग होता है और लोगों को सही कौशल के साथ खोजना आसान हो जाता है। हालांकि, अनुदेश सेट प्रोसेसर की लागत, जटिलता, गति, आसानी से उपयोग और भौतिक बाधाओं को प्रभावित करता है , और इसलिए हमारे पास एक समझौता है: कुछ "मुख्यधारा" निर्देश सेट (और कई नाबालिग), और प्रत्येक निर्देश सेट के भीतर विभिन्न विशेषताओं के साथ कई प्रोसेसर हैं।

ओह, और जैसे-जैसे तकनीक बदलती है, ये सभी ट्रेड-ऑफ बदलते हैं, इसलिए निर्देश सेट विकसित होते हैं, नए उभरते हैं, और पुराने मर जाते हैं। भले ही आज का "सर्वश्रेष्ठ" निर्देश सेट था, यह 20 वर्षों में नहीं हो सकता है।

हार्डवेयर विवरण

संभवतः एक निर्देश सेट में सबसे बड़ा डिजाइन निर्णय शब्द का आकार है , अर्थात प्रोसेसर कितनी बड़ी संख्या में "स्वाभाविक रूप से" हेरफेर कर सकता है। 8-बिट प्रोसेसर 0-255 नंबर से डील करते हैं, जबकि 32-बिट प्रोसेसर 0 से 4,294,967,295 नंबर के साथ डील करते हैं। एक के लिए डिज़ाइन किए गए कोड को दूसरे के लिए पूरी तरह से पुनर्निर्मित किया जाना चाहिए।

यह केवल एक निर्देश से दूसरे निर्देश के अनुवाद का मामला नहीं है। एक अलग निर्देश सेट में एक पूरी तरह से अलग दृष्टिकोण बेहतर हो सकता है। उदाहरण के लिए, 8-बिट प्रोसेसर पर एक लुकअप टेबल आदर्श हो सकती है, जबकि 32-बिट प्रोसेसर पर एक ही उद्देश्य के लिए एक अंकगणितीय ऑपरेशन बेहतर होगा।

अनुदेश सेट के बीच अन्य प्रमुख अंतर हैं। अधिकांश निर्देश चार श्रेणियों में आते हैं:

  • अभिकलन (अंकगणित और तर्क)
  • बहाव को काबू करें
  • डेटा स्थानांतरण
  • प्रोसेसर कॉन्फ़िगरेशन

प्रोसेसर किस प्रकार की संगणनाओं में प्रदर्शन कर सकते हैं, इसके साथ-साथ वे प्रवाह, डेटा स्थानांतरण और प्रोसेसर कॉन्फ़िगरेशन को कैसे नियंत्रित करते हैं, इसके बारे में भिन्नता है।

उदाहरण के लिए, कुछ एवीआर प्रोसेसर न तो गुणा कर सकते हैं और न ही विभाजित कर सकते हैं; जबकि सभी x86 प्रोसेसर कर सकते हैं। जैसा कि आप कल्पना कर सकते हैं, गुणा और विभाजन जैसे कार्यों के लिए आवश्यक सर्किटरी को समाप्त करना एक प्रोसेसर को सरल और सस्ता बना सकता है; यदि आवश्यक हो, तो ये कार्य अभी भी सॉफ़्टवेयर रूटीन का उपयोग करके किया जा सकता है।

x86 अंकगणितीय निर्देशों को अपने ऑपरेंड को मेमोरी से लोड करने और / या उनके परिणामों को मेमोरी में सहेजने की अनुमति देता है; एआरएम एक लोड-स्टोर आर्किटेक्चर है और इस प्रकार मेमोरी तक पहुंचने के लिए केवल कुछ समर्पित निर्देश हैं। इस बीच x86 में सशर्त-शाखा निर्देश समर्पित हैं, जबकि एआरएम व्यावहारिक रूप से सभी निर्देशों को सशर्त निष्पादित करने की अनुमति देता है । इसके अलावा, एआरएम बिट-शिफ्ट को सबसे अधिक अंकगणितीय निर्देशों के हिस्से के रूप में निष्पादित करने की अनुमति देता है। ये अंतर अलग-अलग प्रदर्शन विशेषताओं, आंतरिक डिजाइन और चिप्स की लागत और विधानसभा भाषा स्तर पर प्रोग्रामिंग तकनीकों में अंतर के कारण होते हैं।

निष्कर्ष

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


बहुत बढ़िया जवाब! लोग इस बात को अच्छी तरह से समझ नहीं पाते हैं कि जिन चीज़ों को प्रोग्राम करने की ज़रूरत है, वे हमारे बीच हर जगह हैं। यह केवल हमारे स्क्रीन पर चलने वाले एप्लिकेशन नहीं हैं। प्रत्येक वर्ष कितने बिलियन चिप्स का निर्माण किया जाता है?
phs

4

DW द्वारा अद्भुत जवाब जोड़ना: यदि आप एक कोडांतरक रखना चाहते हैं तो उसे सभी आर्किटेक्चर, उनके बीच सही अनुवादक बनाए रखने की आवश्यकता होगी और पूरी तरह से समझें कि आप क्या कर रहे हैं।
एक आर्किटेक्चर के प्रति कुछ भारी अनुकूलित कोडों को अपनाने की आवश्यकता होगी, जिन्हें अधिक सार स्तर पर समझा जाएगा और एक दूसरे के अनुसार अनुकूलित किया जाएगा।
लेकिन अगर यह संभव था तो हमारे पास सही सी कंपाइलर होगा, और शुद्ध असेंबली में लिखना बिल्कुल भी फायदेमंद नहीं होगा।
कोडांतरक का उपयोग करने का मुख्य बिंदु प्रदर्शन है, जिसे हाल ही में संकलक से निचोड़ा नहीं जा सकता है।
इस तरह के कार्यक्रम को लिखना मौजूदा संकलक की तुलना में और भी कठिन होगा और बनाए जा रहे सभी नए आर्किटेक्चर को बनाए रखने से यह और भी कठिन हो जाएगा।
और "केवल एक" कार्यक्रम के लिए, इसका मतलब पूर्ण बैकवर्ड संगतता भी होगा।


अधिकांश मामलों के लिए, gcc प्रोग्रामर की तुलना में बेहतर अनुकूलन करता है। कोडांतरक का उपयोग करने का मुख्य बिंदु वह सामान है जिसे आप C में रजिस्टर करने की तरह नहीं कर सकते। यदि आप लिनक्स स्रोत के पेड़ को देखते हैं जो बहुत ज्यादा है तो वे विधानसभा के लिए क्या उपयोग करते हैं।
स्लीबटमैन 5

@slebetman - gcc आपको असेंबली का सहारा लिए बिना एक चर में एक चर डालने की अनुमति देता है।
जिरका हनिका

@JirkaHanika: आप सीपीयू रजिस्टर या विशेष निर्देशों के साथ संबोधित विशेष प्रयोजन हार्डवेयर रजिस्टरों के बारे में बात कर रहे हैं? मुझे संदेह है कि स्लीबेटमैन का मतलब बाद वाला है।
PJTraill

"सभी कोड" - "जीसीसी बेहतर करता है" = "आप कोडांतरक का उपयोग करते हैं"। हाँ, आप असेंबलर आवेषण के बिना रजिस्टर का उपयोग कर सकते हैं।
ईविल

@PJTraill - सेलेबेटमैन की टिप्पणी आम तौर पर उत्कृष्ट है और शायद जवाब में शामिल किया जाना चाहिए। लेकिन, उनके दोनों उदाहरण (रजिस्टर एक्सेस और लिनक्स सोर्स ट्री) के बजाय आम गलत धारणाओं को खिलाने की संभावना है, वे इस बात का उत्कृष्ट उदाहरण होंगे कि कोई क्या नहीं कर सकता है। सीसीसी के साथ ऐसा कर ; जिन्हें बदला या छोड़ा जाना चाहिए। (यदि आज कुछ करने के लिए एक एचडब्ल्यू निर्देश है, तो आपके पास अब से एक वर्ष के लिए इसी जीसीसी एक्सटेंशन होगा। हमेशा नहीं, लेकिन बहुत बार। उदाहरण उम्र।)
जिरका हानिका

3

Microsoft ने MSIL का आविष्कार एक मध्यवर्ती विधानसभा भाषा के रूप में किया। कार्यक्रम C # या VB.Net से MSIL तक संकलित होंगे। रन समय में, MSIL को मशीन के लिए मशीन कोड के लिए संकलित किया गया था जो JIT कंपाइलर का उपयोग करके इसे चला रहा था । MSIL वाली फ़ाइल एक .EXE फ़ाइल थी जिसमें प्रोग्राम शुरू करने के लिए X86 में शुरुआत में कुछ निर्देश थे। एआरएम प्रोसेसर पर, आप इसे चलाने के लिए प्रोग्राम नाम के सामने मोनो शब्द टाइप करेंगे।


"मध्यवर्ती विधानसभा भाषा" और "आभासी मशीन" के बीच अंतर क्या है?
बॉब जार्विस -

@ याकूब जार्विस: एक कोड है जबकि दूसरा एक दुभाषिया है। आपको यह पूछना चाहिए था कि मध्यवर्ती विधानसभा और बाइटकोड के बीच क्या अंतर है
स्लीवेटमैन

इस सवाल का जवाब नहीं लगता है। जब तक प्रत्येक मशीन एमएसआईएल को अलग-अलग संकलित / असेंबल करती है, तब तक इसके बारे में कुछ भी सार्वभौमिक नहीं है, और इस तरह के संकलन का उद्देश्य सामान्य कार्यक्षमता का पोर्टिंग है, और एक विशेष अनुदेश सेट का शोषण नहीं है, जो डीडब्ल्यू बताते हैं, (या) ए) कोडांतरक का उपयोग करने का कारण।
PJTraill

3

जैसा कि कहा गया है, एलएलवीएम अब तक की सबसे करीबी चीज है। वास्तव में सार्वभौमिक भाषा के लिए एक बड़ा अवरोध निहितार्थ ट्रेडऑफ़ से संबंधित बुनियादी अंतर होने जा रहा है: संगामिति, स्मृति उपयोग, थ्रूपुट, विलंबता और बिजली की खपत। यदि आप स्पष्ट रूप से SIMD शैली में लिखते हैं, तो आप बहुत अधिक मेमोरी का उपयोग कर सकते हैं। यदि आप स्पष्ट रूप से एसआईएसडी शैली में लिखते हैं, तो आपको उप-समांतर समीकरण मिलेगा। यदि आप थ्रूपुट के लिए अनुकूलन करते हैं, तो आप विलंबता को चोट पहुंचाते हैं। यदि आप एकल-थ्रेडेड थ्रूपुट (यानी: घड़ी की गति) को अधिकतम करते हैं, तो आप बैटरी जीवन को चोट पहुंचाते हैं।

बहुत कम से कम, कोड को ट्रेड-ऑफ के साथ एनोटेट करना होगा। भाषा के लिए सबसे अच्छा बीजगणितीय / प्रकार के गुण होने के लिए जो सबसे महत्वपूर्ण हो सकता है वह यह है कि संकलक को तार्किक असंगति का अनुकूलन और पता लगाने के लिए बहुत सारे अस्पष्ट कमरे मिलते हैं।

फिर अपरिभाषित व्यवहार का सवाल है। C और असेंबली भाषाओं की अधिकांश गति अपरिभाषित व्यवहार से आती है। यदि आप अपरिभाषित व्यवहार को स्वीकार करते हैं जो वास्तव में होता है, तो आप उन्हें विशेष मामलों के रूप में संभालते हैं (जैसे: वास्तुकला और संदर्भ विशिष्ट हैकिंग)।


0

शायद आप जिस चीज की तलाश कर रहे हैं वह एक यूनिवर्सल टर्निंग मशीन नोटेशन है जहां हर कोई आज्ञाओं के लिए प्रतीकों पर सहमत होता है। ( https://en.wikipedia.org/wiki/Universal_Turing_machine )

एक 'असेंबलर' जो अंतर्निहित विक्रेता विशिष्ट मशीन कोड के लिए एक टर्निंग स्वीकार्य भाषा का अनुवाद करता है और उन चीजों में से किसी के लिए निर्माण किया जाता है जिन्हें हम कंप्यूटर कहते हैं।

आर्ट ऑफ़ कंप्यूटर प्रोग्रामिंग में इस बात का एक उदाहरण है कि यह कैसा दिख सकता है।

लेकिन इस सवाल पर विचार करें कि "उनकी व्यावसायिक रूप से उपलब्ध सार्वभौमिक भाषा क्यों नहीं है जिसका उपयोग सभी कंप्यूटरों के साथ किया जा सकता है" मैं सुझाव दूंगा कि सबसे प्रमुख प्रभाव हैं (1) सुविधा, सभी विधानसभा भाषाओं का उपयोग करने के लिए सबसे अधिक प्रासंगिक नहीं हैं; (2) विभिन्न ब्रांडों और विक्रेताओं की मशीनों के बीच अर्थशास्त्र, प्रदान करना, असंगति एक व्यावसायिक रणनीति है और साथ ही मशीनों को डिजाइन करने के लिए सीमित संसाधनों (समय / धन) का परिणाम है।


प्रश्न एक ऐसी विधानसभा भाषा के बारे में पूछ रहा है, जिसका उपयोग किसी भी कंप्यूटर को प्रोग्राम करने के लिए किया जा सकता है, न कि एक असेंबली भाषा में जो "सार्वभौमिक मशीन" के अर्थ में सार्वभौमिक है।
डेविड रिचेर्बी

1
चर्च-ट्यूरिंग हमें बताता है कि यूटीसी वह कर सकता है जो कोई प्रोग्राम करने वाला कंप्यूटर कर सकता है। इसके अलावा परिमित भौतिक भंडारण के मुद्दों से। एक यूटीसी के लिए एक विधानसभा भाषा काफी व्यवहार्य है। लेकिन जैसा कि मैंने कहा कि सांस्कृतिक और आर्थिक व्यावहारिकता बाजार में वास्तविक कार्यान्वयन और अपनाने को सीमित कर सकती है।
क्रिस

आपको सबसे बड़ी समस्या याद आ रही है, जो प्रदर्शन है ! हार्डवेयर-अज्ञेय होने के कुछ बुलंद लक्ष्य के लिए भाषा की धीमी गति का उपयोग क्यों करें? ट्यूरिंग मशीन व्यावहारिक कंप्यूटिंग के लिए एक भयानक मॉडल है।
आर्टेलियस

1
क्या टिप्पणी करने वाले किसी भी कंप्यूटर विज्ञान को अपने दावों को वापस देने की पेशकश करेंगे? यह सभी कंप्यूटर साइंस फोरम के बाद है।
क्रिस

1
मैं सीएस विशेषज्ञ नहीं हूं। लेकिन मेरा मानना ​​है कि वॉन न्यूमैन आर्किटेक्चर इंजीनियरिंग का एक शानदार नमूना है जो प्रोग्रामेबिलिटी और प्रदर्शन के बीच एक संतुलन बनाता है, जबकि ट्यूरिंग मशीन का उद्देश्य यह दिखाना है कि यहां तक ​​कि सबसे बुनियादी मशीन कुछ भी गणना कर सकती है जो एक अधिक जटिल मशीन हो सकती है। ज़रूर, आप अधिक से अधिक सुविधाओं को एक ट्यूरिंग मशीन (अधिक टेप, अंकगणित) में जोड़कर रख सकते हैं, लेकिन फिर आपको वही समस्या आती है जो आपको पहले स्थान पर थी, अर्थात् लोग जो एक निर्देश सेट पर सहमत नहीं थे। इसके अलावा, यादृच्छिक-पहुंच की कमी कई एल्गोरिदम में बड़े ओवरहेड्स बनाती है।
आर्टेलियस

0

धारणा: उच्च-स्तरीय भाषा L1 को निम्न-स्तरीय भाषा में संकलित और अनुकूलित करना L0 से उच्च-स्तरीय भाषा L2 (L1 से अधिक) को संकलित और अनुकूलित करने की तुलना में आसान है; इस अर्थ में आसान है कि आप L1 से L0 की तुलना में L1 से L0 के संकलन के दौरान कथित रूप से अधिक अनुकूलित कोड उत्पन्न कर सकते हैं।

मुझे लगता है कि धारणा शायद सही है, यही कारण है कि शायद अधिकांश कंपाइलर निम्न-स्तरीय मध्यवर्ती भाषा (IR / LLVM) का उपयोग करते हैं।

यदि यह किसी भी निम्न-स्तरीय भाषा L0 का उपयोग करने की तुलना में सही है और L0 को अन्य निम्न-स्तरीय भाषाओं में अनुवाद करने के लिए कंपाइलर लिखता है। उदाहरण के लिए, MIPS निर्देश सेट का उपयोग करें, और इसे x86, बांह, शक्ति, ...

-Taoufik


तो आप नहीं जानते कि क्या आपका जवाब सही है? और इसका समर्थन नहीं कर सकते?
ईविल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.