निम्न-स्तरीय क्रमादेशन लेेंग्वेज: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Programming languages similar to instruction sets}}
{{Short description|Programming languages similar to instruction sets}}
निम्न-स्तरीय [[प्रोग्रामिंग भाषा|क्रमादेशन भाषा]] एक क्रमादेशन भाषा है जो कंप्यूटर के निर्देश सेट आर्किटेक्चर से बहुत कम या कोई अमूर्तता (कंप्यूटर विज्ञान) प्रदान करती है - भाषा मानचित्र में आदेश या कार्य जो प्रोसेसर के निर्देशों के समान संरचनात्मक रूप से हैं। आम तौर पर, यह [[मशीन कोड]] या असेंबली भाषा को संदर्भित करता है। भाषा और मशीन भाषा के बीच निम्न (इसलिए शब्द) अमूर्तता के कारण, निम्न-स्तरीय भाषाओं को कभी-कभी हार्डवेयर के करीब होने के रूप में वर्णित किया जाता है। एक निश्चित प्रकार के सिस्टम आर्किटेक्चर के लिए अनुकूलित होने के कारण निम्न-स्तरीय भाषाओं में लिखे गए प्रोग्राम अपेक्षाकृत [[सॉफ्टवेयर पोर्टेबिलिटी]] | गैर-पोर्टेबल होते हैं।
निम्न-स्तरीय [[प्रोग्रामिंग भाषा|क्रमादेशन भाषा]] एक क्रमादेशन भाषा है जो संगणक के निर्देश सेट स्थापत्य से बहुत कम या कोई अमूर्तता (संगणक विज्ञान) प्रदान करती है - भाषा मानचित्र में आदेश या कार्य जो संसाधित्र के निर्देशों के समान संरचनात्मक रूप से हैं। आम तौर पर, यह [[Index.php?title=मशीनी कूट|मशीनी कूट]] या कोडांतरण भाषा को संदर्भित करता है। भाषा और मशीन भाषा के बीच निम्न (इसलिए शब्द) अमूर्तता के कारण, निम्न-स्तरीय भाषाओं को कभी-कभी "हार्डवेयर के करीब होने" के रूप में वर्णित किया जाता है। एक निश्चित प्रकार के तंत्र वास्तुकला के लिए अनुकूलित होने के कारण निम्न-स्तरीय भाषाओं में लिखे गए क्रमानुदेश अपेक्षाकृत [[Index.php?title=सॉफ्टवेयर सुवाह्यता|सॉफ्टवेयर सुवाह्यता]] | गैर-सुवाह्यता होते हैं।


निम्न-स्तरीय भाषाएँ बिना किसी [[संकलक]] या [[दुभाषिया (कंप्यूटिंग)]] के मशीन कोड में परिवर्तित हो सकती हैं - [[दूसरी पीढ़ी की प्रोग्रामिंग भाषा|दूसरी पीढ़ी की क्रमादेशन भाषा]]एँ असेंबली भाषा # असेंबल नामक एक सरल प्रोसेसर का उपयोग करती हैं - और परिणामी कोड सीधे प्रोसेसर पर चलता है। निम्न-स्तरीय भाषा में लिखे गए प्रोग्राम को एक छोटे से [[स्मृति पदचिह्न]] के साथ बहुत तेज़ी से चलाने के लिए बनाया जा सकता है। उच्च-स्तरीय भाषा में एक समकक्ष कार्यक्रम कम कुशल हो सकता है और अधिक मेमोरी का उपयोग कर सकता है। प्रोग्रामर को याद रखने वाले कई तकनीकी विवरणों के कारण निम्न-स्तरीय भाषाएं सरल हैं, लेकिन उपयोग में कठिन मानी जाती हैं। तुलनात्मक रूप से, एक उच्च-स्तरीय क्रमादेशन भाषा प्रोग्राम के विनिर्देशन से कंप्यूटर आर्किटेक्चर के निष्पादन सिमेंटिक्स को अलग करती है, जो विकास को सरल बनाती है।
निम्न-स्तरीय भाषाएँ बिना किसी [[संकलक]] या [[दुभाषिया (कंप्यूटिंग)]] के मशीन कोड में परिवर्तित हो सकती हैं - [[दूसरी पीढ़ी की प्रोग्रामिंग भाषा|दूसरी पीढ़ी की क्रमादेशन भाषा]]एँ कोडांतरण भाषा # कोडांतरक नामक एक सरल संसाधित्र का उपयोग करती हैं - और परिणामी कोड सीधे संसाधित्र पर चलता है। निम्न-स्तरीय भाषा में लिखे गए क्रमानुदेश को एक छोटे से [[स्मृति पदचिह्न]] के साथ बहुत तेज़ी से चलाने के लिए बनाया जा सकता है। उच्च-स्तरीय भाषा में एक समकक्ष कार्यक्रम कम कुशल हो सकता है और अधिक स्मृति का उपयोग कर सकता है। क्रमादेशक को याद रखने वाले कई तकनीकी विवरणों के कारण निम्न-स्तरीय भाषाएं सरल हैं, लेकिन उपयोग में कठिन मानी जाती हैं। तुलनात्मक रूप से, एक उच्च-स्तरीय क्रमादेशन भाषा क्रमानुदेश के विनिर्देशन से संगणक स्थापत्य के निष्पादन सिमेंटिक्स(अर्थविज्ञान) को अलग करती है, जो विकास को सरल बनाती है।


== मशीन कोड ==
== मशीन कूट ==
[[File:Digital pdp8-e2.jpg|thumb|PDP-8/E मिनीकंप्यूटर का फ्रंट पैनल। मशीन भाषा प्रोग्राम में टॉगल करने के लिए नीचे स्विच की पंक्ति का उपयोग किया जा सकता है।]]मशीन कोड एकमात्र ऐसी भाषा है जिसे कंप्यूटर बिना किसी पिछले परिवर्तन के सीधे प्रोसेस कर सकता है। वर्तमान में, प्रोग्रामर लगभग कभी भी सीधे मशीन कोड में प्रोग्राम नहीं लिखते हैं, क्योंकि इसके लिए कई विवरणों पर ध्यान देने की आवश्यकता होती है जो एक उच्च-स्तरीय भाषा स्वचालित रूप से संभालती है। इसके अलावा, इसे हर निर्देश के लिए संख्यात्मक कोड याद रखने या देखने की आवश्यकता होती है, और इसे संशोधित करना बेहद मुश्किल होता है।
[[File:Digital pdp8-e2.jpg|thumb|PDP-8/E मिनीसंगणकका फ्रंट पैनल। मशीन भाषा क्रमानुदेश में टॉगल करने के लिए नीचे स्विच की पंक्ति का उपयोग किया जा सकता है।]]मशीन कूट एकमात्र ऐसी भाषा है जिसे संगणक बिना किसी पिछले परिवर्तन के सीधे संसाधित कर सकता है। वर्तमान में, क्रमादेशक लगभग कभी भी सीधे मशीनी कूट में क्रमानुदेश नहीं लिखते हैं, क्योंकि इसके लिए कई विवरणों पर ध्यान देने की आवश्यकता होती है जो एक उच्च-स्तरीय भाषा स्वचालित रूप से संभालती है। इसके अलावा, इसे हर निर्देश के लिए संख्यात्मक कूट याद रखने या देखने की आवश्यकता होती है, और इसे संशोधित करना बेहद मुश्किल होता है।


ट्रू मशीन कोड कच्चे, आमतौर पर [[बाइनरी कोड]], डेटा की एक धारा है। मशीन कोड में एक प्रोग्रामर कोडिंग सामान्य रूप से निर्देशों और डेटा को अधिक पठनीय रूप में कोड करता है जैसे [[दशमलव]], [[अष्टभुजाकार]], या [[हेक्साडेसिमल]] जिसे [[लोडर (कंप्यूटिंग)]] नामक प्रोग्राम द्वारा आंतरिक प्रारूप में अनुवादित किया जाता है या [[सामने का हिस्सा]] से कंप्यूटर की मेमोरी में टॉगल किया जाता है।
ट्रू मशीनी कूट अपरिष्कृ, आमतौर पर [[Index.php?title=द्विआधारी कूट|द्विआधारी कूट]], डेटा की एक धारा है। मशीनी कूट में एक क्रमादेशक कूटलेखन सामान्य रूप से निर्देशों और डेटा को अधिक पठनीय रूप में कूट करता है जैसे [[दशमलव]], [[अष्टभुजाकार]], या [[Index.php?title=षोडशाधारी|षोडशाधारी]] जिसे [[लोडर (कंप्यूटिंग)]] नामक क्रमानुदेश द्वारा आंतरिक प्रारूप में अनुवादित किया जाता है या [[Index.php?title=अग्र पट्टिका|अग्र पट्टिका]] से संगणक की स्मृति में टॉगल किया जाता है।


हालांकि कुछ प्रोग्राम मशीन भाषा में लिखे जाते हैं, प्रोग्रामर अक्सर [[कोर निपात]] के साथ काम करके या फ्रंट पैनल से डिबगिंग करके इसे पढ़ने में माहिर हो जाते हैं।
हालांकि कुछ क्रमानुदेश मशीनी भाषा में लिखे जाते हैं, क्रमादेशक अक्सर [[Index.php?title=क्रोड सन्निक्षेप|क्रोड सन्निक्षेप]] के साथ काम करके या अग्र पट्टिका से दोषमार्जन करके इसे पढ़ने में माहिर हो जाते हैं।


उदाहरण: nth [[फाइबोनैचि संख्या]] की गणना करने के लिए 32-बिट x[[86]] मशीन कोड के हेक्साडेसिमल प्रतिनिधित्व में एक फ़ंक्शन:
उदाहरण: nth [[फाइबोनैचि संख्या]] की गणना करने के लिए 32-बिट x[[86]] मशीन कोड के षोडशाधारी प्रतिनिधित्व में एक फलन
  8B542408 83FA0077 06B80000 0000C383
  8B542408 83FA0077 06B80000 0000C383
  FA027706 B8010000 00C353BB 01000000
  FA027706 B8010000 00C353BB 01000000
  B9010000 008D0419 83FA0376 078BD989
  B9010000 008D0419 83FA0376 078BD989
  सी14एईबीएफ1 5बीसी3
  C14AEBF1 5BC3


== विधानसभा भाषा ==
== कोड़ांतरण भाषा ==
दूसरी पीढ़ी की भाषाएँ मशीन कोड के शीर्ष पर एक अमूर्त स्तर प्रदान करती हैं। [[TX-0]] और [[PDP-1]] जैसे कंप्यूटरों पर कोडिंग के शुरुआती दिनों में, [[MIT]] [[हैकर संस्कृति]] ने सबसे पहले असेंबलर लिखने का काम किया।<ref>{{cite book|last=Levy|first=Stephen|year=1994|title=Hackers: Heroes of the Computer Revolution|title-link=Hackers: Heroes of the Computer Revolution|publisher=Penguin Books|page=32|isbn=0-14-100051-1}}</ref>
दूसरी पीढ़ी की भाषाएँ मशीनी कूट के शीर्ष पर एक अमूर्त स्तर प्रदान करती हैं। [[TX-0]] और [[PDP-1]] जैसे संगणकों पर कूटलेखन के शुरुआती दिनों में, [[MIT]] [[हैकर संस्कृति]] ने सबसे पहले कोडांतरक लिखने का काम किया।<ref>{{cite book|last=Levy|first=Stephen|year=1994|title=Hackers: Heroes of the Computer Revolution|title-link=Hackers: Heroes of the Computer Revolution|publisher=Penguin Books|page=32|isbn=0-14-100051-1}}</ref>
असेंबली लैंग्वेज में बहुत कम [[शब्दार्थ (कंप्यूटर विज्ञान)]] या औपचारिक विनिर्देश होते हैं, केवल मानव-पठनीय प्रतीकों की मैपिंग होती है, जिसमें प्रतीकात्मक पते, [[opcode]], [[स्मृति पता]], न्यूमेरिक कॉन्स्टेंट, [[स्ट्रिंग (कंप्यूटर विज्ञान)]] आदि शामिल हैं। आमतौर पर, एक [[मशीन निर्देश (कंप्यूटिंग)]] को असेंबली कोड की एक पंक्ति के रूप में दर्शाया जाता है। असेंबलर [[वस्तु फ़ाइल]] का उत्पादन करते हैं जो अन्य ऑब्जेक्ट फ़ाइलों के साथ [[लिंकर (कंप्यूटिंग)]] कर सकते हैं या स्वयं लोडर (कंप्यूटिंग) हो सकते हैं।
कोडांतरण लैंग्वेज में बहुत कम [[Index.php?title=शब्दार्थ (संगणक विज्ञान)|शब्दार्थ (संगणक विज्ञान)]] या औपचारिक विनिर्देश होते हैं, केवल मानव-पठनीय प्रतीकों की प्रतिचित्रण होती है, जिसमें प्रतीकात्मक पते, [[opcode]], [[स्मृति पता]], आंकिक स्थिरांक, [[Index.php?title=स्ट्रिंग (संगणक विज्ञान)|स्ट्रिंग (संगणक विज्ञान)]] आदि शामिल हैं। आमतौर पर, एक [[Index.php?title=मशीनी निर्देश (अभिकलन)|मशीनी निर्देश (अभिकलन)]] को कोडांतरण कूट की एक पंक्ति के रूप में दर्शाया जाता है। कोडांतरक [[Index.php?title=ऑब्जेक्ट फ़ाइल|ऑब्जेक्ट फ़ाइल]] का उत्पादन करते हैं जो अन्य ऑब्जेक्ट फ़ाइलों के साथ [[Index.php?title=संयोजन (अभिकलन)|संयोजन (अभिकलन)]] कर सकते हैं या स्वयं भारक (अभिकलन) हो सकते हैं।


अधिकांश असेंबलर निर्देशों के सामान्य अनुक्रम उत्पन्न करने के लिए [[मैक्रो (कंप्यूटर विज्ञान)]] प्रदान करते हैं।
अधिकांश कोडांतरक निर्देशों के सामान्य अनुक्रम उत्पन्न करने के लिए [[Index.php?title=मैक्रो (संगणक विज्ञान))|मैक्रो (संगणक विज्ञान))]] प्रदान करते हैं।


उदाहरण: उपरोक्त के समान फाइबोनैचि संख्या कैलकुलेटर, लेकिन एटी एंड टी सिंटैक्स का उपयोग करके x86-64 विधानसभा भाषा में:
उदाहरण: उपरोक्त के समान फाइबोनैचि संख्या कैलकुलेटर, लेकिन एटी एंड टी सिंटैक्स का उपयोग करके x86-64 विधानसभा भाषा में:
Line 40: Line 40:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


इस कोड उदाहरण में, x86-64 प्रोसेसर (इसके [[प्रोसेसर रजिस्टर]]) की हार्डवेयर सुविधाओं का नाम दिया गया है और सीधे हेरफेर किया गया है। फ़ंक्शन x86 [[कॉलिंग कन्वेंशन]]#सिस्टम V AMD64 ABI के अनुसार %edi से अपने इनपुट को लोड करता है और 'EAX', 'EBX', और 'ECX' रजिस्टरों में मूल्यों में हेरफेर करके इसकी गणना तब तक करता है जब तक कि यह समाप्त न हो जाए और वापस न आ जाए। ध्यान दें कि इस असेंबली लैंग्वेज में वैल्यू रिटर्न करने की कोई अवधारणा नहीं है। परिणाम 'ईएक्स' रजिस्टर में संग्रहीत किया गया है, 'आरईटी' कमांड केवल कोड प्रोसेसिंग को स्टैक पर संग्रहीत कोड स्थान पर ले जाता है (आमतौर पर इस फ़ंक्शन को कॉल करने वाले निर्देश के तुरंत बाद) और यह लेखक पर निर्भर है कॉलिंग कोड यह जानने के लिए कि यह फ़ंक्शन 'ईएक्स' में अपना परिणाम संग्रहीत करता है और इसे वहां से पुनर्प्राप्त करता है। x86-64 असेंबली लैंग्वेज किसी फ़ंक्शन से मान वापस करने के लिए कोई मानक नहीं लगाती है (और वास्तव में, फ़ंक्शन की कोई अवधारणा नहीं है); प्रक्रिया के वापस आने के बाद राज्य की जांच करने के लिए कॉलिंग कोड पर निर्भर करता है, अगर उसे मूल्य निकालने की आवश्यकता होती है।
इस कोड उदाहरण में, x86-64 संसाधित्र (इसके [[प्रोसेसर रजिस्टर|संसाधित्र रजिस्टर]]) की हार्डवेयर सुविधाओं का नाम दिया गया है और सीधे हेरफेर किया गया है। फ़ंक्शन x86 [[कॉलिंग कन्वेंशन]]#सिस्टम V AMD64 ABI के अनुसार %edi से अपने इनपुट को लोड करता है और 'EAX', 'EBX', और 'ECX' रजिस्टरों में मूल्यों में हेरफेर करके इसकी गणना तब तक करता है जब तक कि यह समाप्त न हो जाए और वापस न आ जाए। ध्यान दें कि इस कोडांतरण लैंग्वेज में वैल्यू रिटर्न करने की कोई अवधारणा नहीं है। परिणाम 'ईएक्स' रजिस्टर में संग्रहीत किया गया है, 'आरईटी' कमांड केवल कोड प्रोसेसिंग को स्टैक पर संग्रहीत कोड स्थान पर ले जाता है (आमतौर पर इस फ़ंक्शन को कॉल करने वाले निर्देश के तुरंत बाद) और यह लेखक पर निर्भर है कॉलिंग कोड यह जानने के लिए कि यह फ़ंक्शन 'ईएक्स' में अपना परिणाम संग्रहीत करता है और इसे वहां से पुनर्प्राप्त करता है। x86-64 कोडांतरण लैंग्वेज किसी फ़ंक्शन से मान वापस करने के लिए कोई मानक नहीं लगाती है (और वास्तव में, फ़ंक्शन की कोई अवधारणा नहीं है); प्रक्रिया के वापस आने के बाद राज्य की जांच करने के लिए कॉलिंग कोड पर निर्भर करता है, अगर उसे मूल्य निकालने की आवश्यकता होती है।


इसकी तुलना C (प्रोग्रामिंग लैंग्वेज) में समान फ़ंक्शन के साथ करें, एक उच्च-स्तरीय भाषा:
इसकी तुलना C (क्रमानुदेशिंग लैंग्वेज) में समान फ़ंक्शन के साथ करें, एक उच्च-स्तरीय भाषा:


<वाक्यविन्यास प्रकाश लैंग = सी>
<वाक्यविन्यास प्रकाश लैंग = सी>
Line 61: Line 61:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


यह कोड असेंबली भाषा के उदाहरण की संरचना में बहुत समान है लेकिन अमूर्तता के संदर्भ में महत्वपूर्ण अंतर हैं:
यह कोड कोडांतरण भाषा के उदाहरण की संरचना में बहुत समान है लेकिन अमूर्तता के संदर्भ में महत्वपूर्ण अंतर हैं:


* इनपुट (पैरामीटर 'एन') एक अमूर्त है जो हार्डवेयर पर कोई संग्रहण स्थान निर्दिष्ट नहीं करता है। व्यवहार में, C कंपाइलर इनपुट के लिए स्टोरेज लोकेशन निर्धारित करने के लिए कई संभावित कॉलिंग कन्वेंशनों में से एक का अनुसरण करता है।
* इनपुट (पैरामीटर 'एन') एक अमूर्त है जो हार्डवेयर पर कोई संग्रहण स्थान निर्दिष्ट नहीं करता है। व्यवहार में, C कंपाइलर इनपुट के लिए स्टोरेज लोकेशन निर्धारित करने के लिए कई संभावित कॉलिंग कन्वेंशनों में से एक का अनुसरण करता है।
* असेंबली लैंग्वेज वर्जन स्टैक से इनपुट पैरामीटर को एक रजिस्टर में लोड करता है और लूप के प्रत्येक पुनरावृत्ति में रजिस्टर में वैल्यू को घटाता है, स्टैक पर मेमोरी लोकेशन में वैल्यू को कभी भी नहीं बदलता है। सी कंपाइलर पैरामीटर को एक रजिस्टर में लोड कर सकता है और वही कर सकता है या जहां भी संग्रहीत किया जाता है, वहां मान अपडेट कर सकता है। यह कौन सा चुनता है एक कार्यान्वयन निर्णय है जो पूरी तरह से कोड लेखक से छिपा हुआ है (और कोई साइड इफेक्ट नहीं है (कंप्यूटर विज्ञान), सी भाषा मानकों के लिए धन्यवाद)।
* कोडांतरण लैंग्वेज वर्जन स्टैक से इनपुट पैरामीटर को एक रजिस्टर में लोड करता है और लूप के प्रत्येक पुनरावृत्ति में रजिस्टर में वैल्यू को घटाता है, स्टैक पर स्मृति लोकेशन में वैल्यू को कभी भी नहीं बदलता है। सी कंपाइलर पैरामीटर को एक रजिस्टर में लोड कर सकता है और वही कर सकता है या जहां भी संग्रहीत किया जाता है, वहां मान अपडेट कर सकता है। यह कौन सा चुनता है एक कार्यान्वयन निर्णय है जो पूरी तरह से कोड लेखक से छिपा हुआ है (और कोई साइड इफेक्ट नहीं है (संगणकविज्ञान), सी भाषा मानकों के लिए धन्यवाद)।
* स्थानीय चर a, b और c अमूर्त हैं जो हार्डवेयर पर किसी विशिष्ट संग्रहण स्थान को निर्दिष्ट नहीं करते हैं। सी कंपाइलर तय करता है कि लक्ष्य आर्किटेक्चर के लिए वास्तव में उन्हें कैसे स्टोर किया जाए।
* स्थानीय चर a, b और c अमूर्त हैं जो हार्डवेयर पर किसी विशिष्ट संग्रहण स्थान को निर्दिष्ट नहीं करते हैं। सी कंपाइलर तय करता है कि लक्ष्य स्थापत्य के लिए वास्तव में उन्हें कैसे स्टोर किया जाए।
* रिटर्न फ़ंक्शन वापसी के लिए मान निर्दिष्ट करता है, लेकिन यह निर्धारित नहीं करता है कि यह कैसे लौटाया जाता है। किसी विशिष्ट आर्किटेक्चर के लिए C कंपाइलर मान वापस करने के लिए एक 'मानक' तंत्र लागू करता है। x86 आर्किटेक्चर के लिए कंपाइलर आम तौर पर (लेकिन हमेशा नहीं) EAX रजिस्टर का उपयोग एक मूल्य वापस करने के लिए करते हैं, जैसा कि असेंबली लैंग्वेज उदाहरण में होता है (असेंबली लैंग्वेज उदाहरण के लेखक ने C कन्वेंशन को कॉपी करने के लिए चुना है लेकिन असेंबली लैंग्वेज r नहीं है)इसकी गणना करें)।
* रिटर्न फ़ंक्शन वापसी के लिए मान निर्दिष्ट करता है, लेकिन यह निर्धारित नहीं करता है कि यह कैसे लौटाया जाता है। किसी विशिष्ट स्थापत्य के लिए C कंपाइलर मान वापस करने के लिए एक 'मानक' तंत्र लागू करता है। x86 स्थापत्य के लिए कंपाइलर आम तौर पर (लेकिन हमेशा नहीं) EAX रजिस्टर का उपयोग एक मूल्य वापस करने के लिए करते हैं, जैसा कि कोडांतरण लैंग्वेज उदाहरण में होता है (कोडांतरण लैंग्वेज उदाहरण के लेखक ने C कन्वेंशन को कॉपी करने के लिए चुना है लेकिन कोडांतरण लैंग्वेज r नहीं है)इसकी गणना करें)।


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


== उच्च स्तरीय भाषाओं में निम्न स्तर की प्रोग्रामिंग ==
== उच्च स्तरीय भाषाओं में निम्न स्तर की क्रमानुदेशिंग ==
1960 के दशक के उत्तरार्ध के दौरान, उच्च-स्तरीय क्रमादेशन भाषा | उच्च-स्तरीय भाषाएँ जैसे IBM PL/S|PL/S, [[BLISS]], [[BCPL]], विस्तारित [[ALGOL]] (बरोज बड़ी प्रणालियों के लिए) और C (क्रमादेशन भाषा) में कुछ हद तक पहुँच शामिल थी निम्न-स्तरीय प्रोग्रामिंग कार्य। इसके लिए एक विधि [[इनलाइन असेंबली]] है, जिसमें असेंबली कोड उच्च स्तरीय भाषा में एम्बेडेड होता है जो इस सुविधा का समर्थन करता है। इनमें से कुछ भाषाएँ आर्किटेक्चर-निर्भर [[अनुकूलन संकलक]] को लक्ष्य प्रोसेसर आर्किटेक्चर का उपयोग करने के तरीके को समायोजित करने की अनुमति देती हैं।
1960 के दशक के उत्तरार्ध के दौरान, उच्च-स्तरीय क्रमादेशन भाषा | उच्च-स्तरीय भाषाएँ जैसे IBM PL/S|PL/S, [[BLISS]], [[BCPL]], विस्तारित [[ALGOL]] (बरोज बड़ी प्रणालियों के लिए) और C (क्रमादेशन भाषा) में कुछ हद तक पहुँच शामिल थी निम्न-स्तरीय क्रमानुदेशिंग कार्य। इसके लिए एक विधि [[इनलाइन असेंबली|इनलाइन कोडांतरण]] है, जिसमें कोडांतरण कोड उच्च स्तरीय भाषा में एम्बेडेड होता है जो इस सुविधा का समर्थन करता है। इनमें से कुछ भाषाएँ स्थापत्य-निर्भर [[अनुकूलन संकलक]] को लक्ष्य संसाधित्र स्थापत्य का उपयोग करने के तरीके को समायोजित करने की अनुमति देती हैं।


== संदर्भ ==
== संदर्भ ==

Revision as of 01:15, 9 March 2023

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

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

मशीन कूट

PDP-8/E मिनीसंगणकका फ्रंट पैनल। मशीन भाषा क्रमानुदेश में टॉगल करने के लिए नीचे स्विच की पंक्ति का उपयोग किया जा सकता है।

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

ट्रू मशीनी कूट अपरिष्कृ, आमतौर पर द्विआधारी कूट, डेटा की एक धारा है। मशीनी कूट में एक क्रमादेशक कूटलेखन सामान्य रूप से निर्देशों और डेटा को अधिक पठनीय रूप में कूट करता है जैसे दशमलव, अष्टभुजाकार, या षोडशाधारी जिसे लोडर (कंप्यूटिंग) नामक क्रमानुदेश द्वारा आंतरिक प्रारूप में अनुवादित किया जाता है या अग्र पट्टिका से संगणक की स्मृति में टॉगल किया जाता है।

हालांकि कुछ क्रमानुदेश मशीनी भाषा में लिखे जाते हैं, क्रमादेशक अक्सर क्रोड सन्निक्षेप के साथ काम करके या अग्र पट्टिका से दोषमार्जन करके इसे पढ़ने में माहिर हो जाते हैं।

उदाहरण: nth फाइबोनैचि संख्या की गणना करने के लिए 32-बिट x86 मशीन कोड के षोडशाधारी प्रतिनिधित्व में एक फलन

8B542408 83FA0077 06B80000 0000C383
FA027706 B8010000 00C353BB 01000000
B9010000 008D0419 83FA0376 078BD989
C14AEBF1 5BC3

कोड़ांतरण भाषा

दूसरी पीढ़ी की भाषाएँ मशीनी कूट के शीर्ष पर एक अमूर्त स्तर प्रदान करती हैं। TX-0 और PDP-1 जैसे संगणकों पर कूटलेखन के शुरुआती दिनों में, MIT हैकर संस्कृति ने सबसे पहले कोडांतरक लिखने का काम किया।[1] कोडांतरण लैंग्वेज में बहुत कम शब्दार्थ (संगणक विज्ञान) या औपचारिक विनिर्देश होते हैं, केवल मानव-पठनीय प्रतीकों की प्रतिचित्रण होती है, जिसमें प्रतीकात्मक पते, opcode, स्मृति पता, आंकिक स्थिरांक, स्ट्रिंग (संगणक विज्ञान) आदि शामिल हैं। आमतौर पर, एक मशीनी निर्देश (अभिकलन) को कोडांतरण कूट की एक पंक्ति के रूप में दर्शाया जाता है। कोडांतरक ऑब्जेक्ट फ़ाइल का उत्पादन करते हैं जो अन्य ऑब्जेक्ट फ़ाइलों के साथ संयोजन (अभिकलन) कर सकते हैं या स्वयं भारक (अभिकलन) हो सकते हैं।

अधिकांश कोडांतरक निर्देशों के सामान्य अनुक्रम उत्पन्न करने के लिए मैक्रो (संगणक विज्ञान)) प्रदान करते हैं।

उदाहरण: उपरोक्त के समान फाइबोनैचि संख्या कैलकुलेटर, लेकिन एटी एंड टी सिंटैक्स का उपयोग करके x86-64 विधानसभा भाषा में: <वाक्यविन्यास लैंग = एएसएम> _फाइब:

       movl $1, %eax
       एक्सओआरएल% ईबीएक्स,% ईबीएक्स

.fib_loop:

       सीएमपीएल $1, %edi
       जेबी .fib_done
       movl %eax, %ecx
       अतिरिक्त %ईबीएक्स, %ईएक्स
       movl% ecx,% ebx
       सबल $1, %edi
       jmp .fib_loop

.fib_done:

       गीला करना

</वाक्यविन्यास हाइलाइट>

इस कोड उदाहरण में, x86-64 संसाधित्र (इसके संसाधित्र रजिस्टर) की हार्डवेयर सुविधाओं का नाम दिया गया है और सीधे हेरफेर किया गया है। फ़ंक्शन x86 कॉलिंग कन्वेंशन#सिस्टम V AMD64 ABI के अनुसार %edi से अपने इनपुट को लोड करता है और 'EAX', 'EBX', और 'ECX' रजिस्टरों में मूल्यों में हेरफेर करके इसकी गणना तब तक करता है जब तक कि यह समाप्त न हो जाए और वापस न आ जाए। ध्यान दें कि इस कोडांतरण लैंग्वेज में वैल्यू रिटर्न करने की कोई अवधारणा नहीं है। परिणाम 'ईएक्स' रजिस्टर में संग्रहीत किया गया है, 'आरईटी' कमांड केवल कोड प्रोसेसिंग को स्टैक पर संग्रहीत कोड स्थान पर ले जाता है (आमतौर पर इस फ़ंक्शन को कॉल करने वाले निर्देश के तुरंत बाद) और यह लेखक पर निर्भर है कॉलिंग कोड यह जानने के लिए कि यह फ़ंक्शन 'ईएक्स' में अपना परिणाम संग्रहीत करता है और इसे वहां से पुनर्प्राप्त करता है। x86-64 कोडांतरण लैंग्वेज किसी फ़ंक्शन से मान वापस करने के लिए कोई मानक नहीं लगाती है (और वास्तव में, फ़ंक्शन की कोई अवधारणा नहीं है); प्रक्रिया के वापस आने के बाद राज्य की जांच करने के लिए कॉलिंग कोड पर निर्भर करता है, अगर उसे मूल्य निकालने की आवश्यकता होती है।

इसकी तुलना C (क्रमानुदेशिंग लैंग्वेज) में समान फ़ंक्शन के साथ करें, एक उच्च-स्तरीय भाषा:

<वाक्यविन्यास प्रकाश लैंग = सी> अहस्ताक्षरित int fib (अहस्ताक्षरित int n) {

  अगर (! एन)
      वापसी 0;
  और अगर (एन <= 2)
      वापसी 1;
  अन्य {
      अहस्ताक्षरित इंट ए, सी;
      के लिए (ए = सी = 1;; --एन) {
          सी + = ए;
          अगर (एन <= 2) वापसी सी;
          ए = सी - ए;
      }
  }

} </वाक्यविन्यास हाइलाइट>

यह कोड कोडांतरण भाषा के उदाहरण की संरचना में बहुत समान है लेकिन अमूर्तता के संदर्भ में महत्वपूर्ण अंतर हैं:

  • इनपुट (पैरामीटर 'एन') एक अमूर्त है जो हार्डवेयर पर कोई संग्रहण स्थान निर्दिष्ट नहीं करता है। व्यवहार में, C कंपाइलर इनपुट के लिए स्टोरेज लोकेशन निर्धारित करने के लिए कई संभावित कॉलिंग कन्वेंशनों में से एक का अनुसरण करता है।
  • कोडांतरण लैंग्वेज वर्जन स्टैक से इनपुट पैरामीटर को एक रजिस्टर में लोड करता है और लूप के प्रत्येक पुनरावृत्ति में रजिस्टर में वैल्यू को घटाता है, स्टैक पर स्मृति लोकेशन में वैल्यू को कभी भी नहीं बदलता है। सी कंपाइलर पैरामीटर को एक रजिस्टर में लोड कर सकता है और वही कर सकता है या जहां भी संग्रहीत किया जाता है, वहां मान अपडेट कर सकता है। यह कौन सा चुनता है एक कार्यान्वयन निर्णय है जो पूरी तरह से कोड लेखक से छिपा हुआ है (और कोई साइड इफेक्ट नहीं है (संगणकविज्ञान), सी भाषा मानकों के लिए धन्यवाद)।
  • स्थानीय चर a, b और c अमूर्त हैं जो हार्डवेयर पर किसी विशिष्ट संग्रहण स्थान को निर्दिष्ट नहीं करते हैं। सी कंपाइलर तय करता है कि लक्ष्य स्थापत्य के लिए वास्तव में उन्हें कैसे स्टोर किया जाए।
  • रिटर्न फ़ंक्शन वापसी के लिए मान निर्दिष्ट करता है, लेकिन यह निर्धारित नहीं करता है कि यह कैसे लौटाया जाता है। किसी विशिष्ट स्थापत्य के लिए C कंपाइलर मान वापस करने के लिए एक 'मानक' तंत्र लागू करता है। x86 स्थापत्य के लिए कंपाइलर आम तौर पर (लेकिन हमेशा नहीं) EAX रजिस्टर का उपयोग एक मूल्य वापस करने के लिए करते हैं, जैसा कि कोडांतरण लैंग्वेज उदाहरण में होता है (कोडांतरण लैंग्वेज उदाहरण के लेखक ने C कन्वेंशन को कॉपी करने के लिए चुना है लेकिन कोडांतरण लैंग्वेज r नहीं है)इसकी गणना करें)।

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

उच्च स्तरीय भाषाओं में निम्न स्तर की क्रमानुदेशिंग

1960 के दशक के उत्तरार्ध के दौरान, उच्च-स्तरीय क्रमादेशन भाषा | उच्च-स्तरीय भाषाएँ जैसे IBM PL/S|PL/S, BLISS, BCPL, विस्तारित ALGOL (बरोज बड़ी प्रणालियों के लिए) और C (क्रमादेशन भाषा) में कुछ हद तक पहुँच शामिल थी निम्न-स्तरीय क्रमानुदेशिंग कार्य। इसके लिए एक विधि इनलाइन कोडांतरण है, जिसमें कोडांतरण कोड उच्च स्तरीय भाषा में एम्बेडेड होता है जो इस सुविधा का समर्थन करता है। इनमें से कुछ भाषाएँ स्थापत्य-निर्भर अनुकूलन संकलक को लक्ष्य संसाधित्र स्थापत्य का उपयोग करने के तरीके को समायोजित करने की अनुमति देती हैं।

संदर्भ

  1. Levy, Stephen (1994). Hackers: Heroes of the Computer Revolution. Penguin Books. p. 32. ISBN 0-14-100051-1.