निम्न-स्तरीय क्रमादेशन लेेंग्वेज
निम्न-स्तरीय क्रमादेशन भाषा एक क्रमादेशन भाषा है जो संगणक के निर्देश सेट स्थापत्य से बहुत कम या कोई अमूर्तता (संगणक विज्ञान) प्रदान करती है - भाषा मानचित्र में आदेश या कार्य जो संसाधित्र के निर्देशों के समान संरचनात्मक रूप से हैं। आम तौर पर, यह मशीनी कूट या कोडांतरण भाषा को संदर्भित करता है। भाषा और मशीन भाषा के बीच निम्न (इसलिए शब्द) अमूर्तता के कारण, निम्न-स्तरीय भाषाओं को कभी-कभी "हार्डवेयर के करीब होने" के रूप में वर्णित किया जाता है। एक निश्चित प्रकार के तंत्र वास्तुकला के लिए अनुकूलित होने के कारण निम्न-स्तरीय भाषाओं में लिखे गए क्रमानुदेश अपेक्षाकृत सॉफ्टवेयर सुवाह्यता | गैर-सुवाह्यता होते हैं।
निम्न-स्तरीय भाषाएँ बिना किसी संकलक या दुभाषिया (कंप्यूटिंग) के मशीन कोड में परिवर्तित हो सकती हैं - दूसरी पीढ़ी की क्रमादेशन भाषाएँ कोडांतरण भाषा # कोडांतरक नामक एक सरल संसाधित्र का उपयोग करती हैं - और परिणामी कोड सीधे संसाधित्र पर चलता है। निम्न-स्तरीय भाषा में लिखे गए क्रमानुदेश को एक छोटे से स्मृति पदचिह्न के साथ बहुत तेज़ी से चलाने के लिए बनाया जा सकता है। उच्च-स्तरीय भाषा में एक समकक्ष कार्यक्रम कम कुशल हो सकता है और अधिक स्मृति का उपयोग कर सकता है। क्रमादेशक को याद रखने वाले कई तकनीकी विवरणों के कारण निम्न-स्तरीय भाषाएं सरल हैं, लेकिन उपयोग में कठिन मानी जाती हैं। तुलनात्मक रूप से, एक उच्च-स्तरीय क्रमादेशन भाषा क्रमानुदेश के विनिर्देशन से संगणक स्थापत्य के निष्पादन सिमेंटिक्स(अर्थविज्ञान) को अलग करती है, जो विकास को सरल बनाती है।
मशीन कूट
मशीन कूट एकमात्र ऐसी भाषा है जिसे संगणक बिना किसी पिछले परिवर्तन के सीधे संसाधित कर सकता है। वर्तमान में, क्रमादेशक लगभग कभी भी सीधे मशीनी कूट में क्रमानुदेश नहीं लिखते हैं, क्योंकि इसके लिए कई विवरणों पर ध्यान देने की आवश्यकता होती है जो एक उच्च-स्तरीय भाषा स्वचालित रूप से संभालती है। इसके अलावा, इसे हर निर्देश के लिए संख्यात्मक कूट याद रखने या देखने की आवश्यकता होती है, और इसे संशोधित करना बेहद मुश्किल होता है।
ट्रू मशीनी कूट अपरिष्कृ, आमतौर पर द्विआधारी कूट, डेटा की एक धारा है। मशीनी कूट में एक क्रमादेशक कूटलेखन सामान्य रूप से निर्देशों और डेटा को अधिक पठनीय रूप में कूट करता है जैसे दशमलव, अष्टभुजाकार, या षोडशाधारी जिसे लोडर (कंप्यूटिंग) नामक क्रमानुदेश द्वारा आंतरिक प्रारूप में अनुवादित किया जाता है या अग्र पट्टिका से संगणक की स्मृति में टॉगल किया जाता है।
हालांकि कुछ क्रमानुदेश मशीनी भाषा में लिखे जाते हैं, क्रमादेशक अक्सर क्रोड सन्निक्षेप के साथ काम करके या अग्र पट्टिका से दोषमार्जन करके इसे पढ़ने में माहिर हो जाते हैं।
उदाहरण: 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 (क्रमादेशन भाषा) में कुछ हद तक पहुँच शामिल थी निम्न-स्तरीय क्रमानुदेशिंग कार्य। इसके लिए एक विधि इनलाइन कोडांतरण है, जिसमें कोडांतरण कोड उच्च स्तरीय भाषा में एम्बेडेड होता है जो इस सुविधा का समर्थन करता है। इनमें से कुछ भाषाएँ स्थापत्य-निर्भर अनुकूलन संकलक को लक्ष्य संसाधित्र स्थापत्य का उपयोग करने के तरीके को समायोजित करने की अनुमति देती हैं।
संदर्भ
- ↑ Levy, Stephen (1994). Hackers: Heroes of the Computer Revolution. Penguin Books. p. 32. ISBN 0-14-100051-1.