निम्न-स्तरीय क्रमादेशन लेेंग्वेज: Difference between revisions
(→संदर्भ) |
|||
Line 24: | Line 24: | ||
उदाहरण: उपरोक्त के समान फाइबोनैचि संख्या कैलकुलेटर, लेकिन एटी एंड टी सिंटैक्स का उपयोग करके x86-64 विधानसभा भाषा में: | उदाहरण: उपरोक्त के समान फाइबोनैचि संख्या कैलकुलेटर, लेकिन एटी एंड टी सिंटैक्स का उपयोग करके x86-64 विधानसभा भाषा में: | ||
<syntaxhighlight lang="asm"> | |||
_fib: | |||
movl $1, %eax | |||
xorl %ebx, %ebx | |||
.fib_loop: | .fib_loop: | ||
cmpl $1, %edi | cmpl $1, %edi | ||
jbe .fib_done | |||
movl %eax, %ecx | |||
addl %ebx, %eax | |||
movl %ecx, %ebx | |||
subl $1, %edi | |||
jmp .fib_loop | |||
.fib_done: | .fib_done: | ||
ret | ret | ||
</syntaxhighlight> | |||
इस कोड उदाहरण में, x86-64 संसाधित्र (इसके [[प्रोसेसर रजिस्टर|संसाधित्र रजिस्टर]]) को हार्डवेयर सुविधाओं का नाम दिया गया है और सीधे युक्तियोजित किया गया है। फलन x86 [[कॉलिंग कन्वेंशन]] # तंत्र V AMD64 ABI के अनुसार %edi से अपने निविष्ट को भारण करता है और 'EAX', 'EBX', और 'ECX' रजिस्टरों में मानों में युक्तियोजित करके इसकी गणना तब तक करता है जब तक कि यह समाप्त न हो जाए और वापस न आ जाए। ध्यान दें कि इस कोडांतरण भाषा में मान रिटर्न करने की कोई अवधारणा नहीं है। परिणाम 'EAX' रजिस्टर में संग्रहीत किया गया है, 'RET' आदेश केवल कूट प्रक्रमण को स्टैक पर संग्रहीत कूट स्थान पर ले जाता है (सामान्यत: इस फलन को कॉल करने वाले निर्देश के तुरंत बाद) और यह लेखक पर निर्भर है कॉलिंग कोड यह जानने के लिए कि यह फलन 'EAX' में अपना परिणाम संग्रहीत करता है और इसे वहां से पुनर्प्राप्त करता है। x86-64 कोडांतरण भाषा किसी फलन से मान वापस करने के लिए कोई मानक नहीं लगाती है (और वास्तव में, फलन की कोई अवधारणा नहीं है); प्रक्रिया के वापस आने के बाद स्पष्टता की जांच करने के लिए कॉलिंग कोड पर निर्भर करता है, यदि उसे तात्पर्य निकालने की आवश्यकता होती है। | इस कोड उदाहरण में, x86-64 संसाधित्र (इसके [[प्रोसेसर रजिस्टर|संसाधित्र रजिस्टर]]) को हार्डवेयर सुविधाओं का नाम दिया गया है और सीधे युक्तियोजित किया गया है। फलन x86 [[कॉलिंग कन्वेंशन]] # तंत्र V AMD64 ABI के अनुसार %edi से अपने निविष्ट को भारण करता है और 'EAX', 'EBX', और 'ECX' रजिस्टरों में मानों में युक्तियोजित करके इसकी गणना तब तक करता है जब तक कि यह समाप्त न हो जाए और वापस न आ जाए। ध्यान दें कि इस कोडांतरण भाषा में मान रिटर्न करने की कोई अवधारणा नहीं है। परिणाम 'EAX' रजिस्टर में संग्रहीत किया गया है, 'RET' आदेश केवल कूट प्रक्रमण को स्टैक पर संग्रहीत कूट स्थान पर ले जाता है (सामान्यत: इस फलन को कॉल करने वाले निर्देश के तुरंत बाद) और यह लेखक पर निर्भर है कॉलिंग कोड यह जानने के लिए कि यह फलन 'EAX' में अपना परिणाम संग्रहीत करता है और इसे वहां से पुनर्प्राप्त करता है। x86-64 कोडांतरण भाषा किसी फलन से मान वापस करने के लिए कोई मानक नहीं लगाती है (और वास्तव में, फलन की कोई अवधारणा नहीं है); प्रक्रिया के वापस आने के बाद स्पष्टता की जांच करने के लिए कॉलिंग कोड पर निर्भर करता है, यदि उसे तात्पर्य निकालने की आवश्यकता होती है। | ||
इसकी तुलना C (क्रमानुदेशिंग भाषा) में समान फलन के साथ करें, एक उच्च-स्तरीय भाषा: | इसकी तुलना C (क्रमानुदेशिंग भाषा) में समान फलन के साथ करें, एक उच्च-स्तरीय भाषा: | ||
unsigned int fib(unsigned int n) { | <syntaxhighlight lang="c"> | ||
unsigned int fib(unsigned int n) { | |||
if (!n) | |||
return 0; | |||
else if (n <= 2) | |||
return 1; | |||
else { | |||
unsigned int a, c; | |||
for (a = c = 1; ; --n) { | |||
c += a; | |||
if (n <= 2) return c; | |||
a = c - a; | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
यह कूट कोडांतरण भाषा के उदाहरण की संरचना से बहुत समान है लेकिन अमूर्तता के संदर्भ में महत्वपूर्ण अंतर हैं: | यह कूट कोडांतरण भाषा के उदाहरण की संरचना से बहुत समान है लेकिन अमूर्तता के संदर्भ में महत्वपूर्ण अंतर हैं: | ||
Line 66: | Line 67: | ||
ये अमूर्त C कोड को किसी भी स्थापत्य पर संशोधन के बिना संकलित करने योग्य बनाते हैं जिसके लिए C अनुभाषक लिखा गया है। x86 कोडांतरण भाषा कोड x86 स्थापत्य के लिए विशिष्ट है। | ये अमूर्त C कोड को किसी भी स्थापत्य पर संशोधन के बिना संकलित करने योग्य बनाते हैं जिसके लिए C अनुभाषक लिखा गया है। x86 कोडांतरण भाषा कोड x86 स्थापत्य के लिए विशिष्ट है। | ||
[[Category:Collapse templates]] | |||
[[Category:Created On 17/02/2023]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
== उच्च स्तरीय भाषाओं में निम्न स्तर की क्रमानुदेशिंग == | == उच्च स्तरीय भाषाओं में निम्न स्तर की क्रमानुदेशिंग == |
Revision as of 11:45, 10 March 2023
निम्न-स्तरीय क्रमादेशन भाषा एक क्रमादेशन भाषा है जो संगणक के निर्देश सेट स्थापत्य से बहुत कम या कोई अमूर्तता (संगणक विज्ञान) प्रदान करती है - भाषा मानचित्र में आदेश या कार्य जो संसाधित्र के निर्देशों के समान संरचनात्मक रूप से हैं। सामान्यत:, यह मशीनी कूट या कोडांतरण भाषा को संदर्भित करता है। भाषा और मशीन भाषा के बीच निम्न (इसलिए शब्द) अमूर्तता के कारण, निम्न-स्तरीय भाषाओं को कभी-कभी "हार्डवेयर के करीब होने" के रूप में वर्णित किया जाता है। एक निश्चित प्रकार के तंत्र वास्तुकला के लिए अनुकूलित होने के कारण निम्न-स्तरीय भाषाओं में लिखे गए क्रमानुदेश अपेक्षाकृत सॉफ्टवेयर सुवाह्यता | गैर-सुवाह्यता होते हैं।
निम्न-स्तरीय भाषाएँ बिना किसी संकलक या दुभाषिया (कंप्यूटिंग) के मशीन कोड में परिवर्तित हो सकती हैं - दूसरी पीढ़ी की क्रमादेशन भाषाएँ कोडांतरण भाषा # कोडांतरक नामक एक सरल संसाधित्र का उपयोग करती हैं - और परिणामी कोड सीधे संसाधित्र पर चलता है। निम्न-स्तरीय भाषा में लिखे गए क्रमानुदेश को एक छोटे से स्मृति पदचिह्न के साथ बहुत तेज़ी से चलाने के लिए बनाया जा सकता है। उच्च-स्तरीय भाषा में एक समकक्ष कार्यक्रम कम कुशल हो सकता है और अधिक स्मृति का उपयोग कर सकता है। क्रमादेशक को याद रखने वाले कई तकनीकी विवरणों के कारण निम्न-स्तरीय भाषाएं सरल हैं, लेकिन उपयोग में कठिन मानी जाती हैं। तुलनात्मक रूप से, एक उच्च-स्तरीय क्रमादेशन भाषा क्रमानुदेश के विनिर्देशन से संगणक स्थापत्य के निष्पादन सिमेंटिक्स(अर्थविज्ञान) को अलग करती है, जो विकास को सरल बनाती है।
मशीन कूट
मशीन कूट एकमात्र ऐसी भाषा है जिसे संगणक बिना किसी पिछले परिवर्तन के सीधे संसाधित कर सकता है। वर्तमान में, क्रमादेशक लगभग कभी भी सीधे मशीनी कूट में क्रमानुदेश नहीं लिखते हैं, क्योंकि इसके लिए कई विवरणों पर ध्यान देने की आवश्यकता होती है जो एक उच्च-स्तरीय भाषा स्वचालित रूप से संभालती है। इसके अतिरिक्त, इसे हर निर्देश के लिए संख्यात्मक कूट याद रखने या देखने की आवश्यकता होती है, और इसे संशोधित करना बेहद मुश्किल होता है।
ट्रू मशीनी कूट अपरिष्कृ, सामान्यत: द्विआधारी कूट, डेटा की एक धारा है। मशीनी कूट में एक क्रमादेशक कूटलेखन सामान्य रूप से निर्देशों और डेटा को अधिक पठनीय रूप में कूट करता है जैसे दशमलव, अष्टभुजाकार, या षोडशाधारी जिसे भारणर (कंप्यूटिंग) नामक क्रमानुदेश द्वारा आंतरिक प्रारूप में अनुवादित किया जाता है या अग्र पट्टिका से संगणक की स्मृति में टॉगल किया जाता है।
हालांकि कुछ क्रमानुदेश मशीनी भाषा में लिखे जाते हैं, क्रमादेशक अधिकांशत: क्रोड सन्निक्षेप के साथ काम करके या अग्र पट्टिका से दोषमार्जन करके इसे पढ़ने में माहिर हो जाते हैं।
उदाहरण: 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 विधानसभा भाषा में:
_fib:
movl $1, %eax
xorl %ebx, %ebx
.fib_loop:
cmpl $1, %edi
jbe .fib_done
movl %eax, %ecx
addl %ebx, %eax
movl %ecx, %ebx
subl $1, %edi
jmp .fib_loop
.fib_done:
ret
इस कोड उदाहरण में, x86-64 संसाधित्र (इसके संसाधित्र रजिस्टर) को हार्डवेयर सुविधाओं का नाम दिया गया है और सीधे युक्तियोजित किया गया है। फलन x86 कॉलिंग कन्वेंशन # तंत्र V AMD64 ABI के अनुसार %edi से अपने निविष्ट को भारण करता है और 'EAX', 'EBX', और 'ECX' रजिस्टरों में मानों में युक्तियोजित करके इसकी गणना तब तक करता है जब तक कि यह समाप्त न हो जाए और वापस न आ जाए। ध्यान दें कि इस कोडांतरण भाषा में मान रिटर्न करने की कोई अवधारणा नहीं है। परिणाम 'EAX' रजिस्टर में संग्रहीत किया गया है, 'RET' आदेश केवल कूट प्रक्रमण को स्टैक पर संग्रहीत कूट स्थान पर ले जाता है (सामान्यत: इस फलन को कॉल करने वाले निर्देश के तुरंत बाद) और यह लेखक पर निर्भर है कॉलिंग कोड यह जानने के लिए कि यह फलन 'EAX' में अपना परिणाम संग्रहीत करता है और इसे वहां से पुनर्प्राप्त करता है। x86-64 कोडांतरण भाषा किसी फलन से मान वापस करने के लिए कोई मानक नहीं लगाती है (और वास्तव में, फलन की कोई अवधारणा नहीं है); प्रक्रिया के वापस आने के बाद स्पष्टता की जांच करने के लिए कॉलिंग कोड पर निर्भर करता है, यदि उसे तात्पर्य निकालने की आवश्यकता होती है।
इसकी तुलना C (क्रमानुदेशिंग भाषा) में समान फलन के साथ करें, एक उच्च-स्तरीय भाषा:
unsigned int fib(unsigned int n) {
if (!n)
return 0;
else if (n <= 2)
return 1;
else {
unsigned int a, c;
for (a = c = 1; ; --n) {
c += a;
if (n <= 2) return c;
a = c - a;
}
}
}
यह कूट कोडांतरण भाषा के उदाहरण की संरचना से बहुत समान है लेकिन अमूर्तता के संदर्भ में महत्वपूर्ण अंतर हैं:
- निविष्ट (मापदंड 'N') एक अमूर्त है जो हार्डवेयर पर कोई संग्रहण स्थान निर्दिष्ट नहीं करता है। व्यवहार में, C अनुभाषक निविष्ट के लिए भंडारण स्थान निर्धारित करने के लिए कई संभावित कॉलिंग संकेत में से एक का अनुसरण करता है।
- कोडांतरण भाषा संस्करण स्टैक से निविष्ट मापदंड को एक रजिस्टर में भारण करता है और परिपथ के प्रत्येक पुनरावृत्ति में रजिस्टर में मान को घटाता है, स्टैक पर स्मृति अवस्थति में मान को कभी भी नहीं बदलता है। C अनुभाषक मापदंड को एक रजिस्टर में भारण कर सकता है और वही कर सकता है या जहां भी संग्रहीत किया जाता है, वहां मान अपडेट कर सकता है। यह कौन सा चुनता है एक कार्यान्वयन निर्णय है जो पूरी तरह से कूट लेखन से छिपा हुआ है (और कोई साइड इफेक्ट नहीं है (संगणक विज्ञान), C भाषा मानकों के लिए धन्यवाद)।
- स्थानीय चर a, b और c अमूर्त हैं जो हार्डवेयर पर किसी विशिष्ट संग्रहण स्थान को निर्दिष्ट नहीं करते हैं। C अनुभाषक तय करता है कि लक्ष्य स्थापत्य के लिए वास्तव में उन्हें कैसे संग्रह किया जाए।
- प्रत्यागमनफलन वापसी के लिए मान निर्दिष्ट करता है, लेकिन यह निर्धारित नहीं करता है कि यह कैसे लौटाया जाता है। किसी विशिष्ट स्थापत्य के लिए C अनुभाषक मान वापस करने के लिए एक 'मानक' तंत्र लागू करता है। x86 स्थापत्य के लिए अनुभाषक सामान्यत: (लेकिन हमेशा नहीं) EAX रजिस्टर का उपयोग एक मान वापस करने के लिए करते हैं, जैसा कि कोडांतरण भाषा में होता है (कोडांतरण भाषा उदाहरण के लेखक ने C कन्वेंशन को प्रतिलिपित करने के लिए चुना है लेकिन कोडांतरण भाषा को इसकी जरूरत नहीं है)
ये अमूर्त C कोड को किसी भी स्थापत्य पर संशोधन के बिना संकलित करने योग्य बनाते हैं जिसके लिए C अनुभाषक लिखा गया है। 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.