संसार में हजारों तरह की लैंग्वेज अलग-अलग तरह से बोली व लिखी जाती हैं। इनमें से कुछ लैंग्वेज किन्हीं देश या प्रदेश तक ही सीमित हैं। जबकि अंग्रेजी अंतर्राष्ट्रीय रूप से बोली जाने वाली लैंग्वेज है। इसलिए कंप्यूटर में प्रोग्रामिंग की लैंग्वेज के रूप में अंग्रेजी का प्रयोग किया जाता है। कंप्यूटर के की-बोर्ड में इन्डो-अरेबियन अंकों का प्रयोग होता है । कंप्यूटर टेक्नोलॉजी के विकास के साथ वर्ड-प्रोसेसर का आविष्कार हुआ जिससे विभिन्न लिपियों (स्क्रिप्ट्स) में लिखा जाना भी संभव हो गया। लेकिन फिर भी हाई लेवल कंप्यूटर लैंग्वेज में फिलहाल अंग्रेजी का ही प्रयोग होता है। यहां पर यह बताना जरूरी है कि कंप्यूटर के प्रोग्राम, जिनके अनुसार कंप्यूटर काम करता है, कई तरह की लैंग्वेज में लिखे जाते हैं। ये लैंग्वेज हैं-
- लो-लेवेल लैंग्वेज या मशीन लैंग्वेज़, जिन्हें मशीन कोड भी कहते हैं।
- असेम्बली लैंग्वेज, जिन्हें असेम्बली कोड भी कहते हैं।
- हाई लेवेल लैंग्वेज , जैसे –फोरट्रॅान, बेसिक, कोबोल, आदि।
लो लेवल लैंग्वेज /मशीन लैंग्वेज
निम्न-स्तरीय भाषा को निम्न माना जाता है क्योंकि यह मशीन के स्तर पर जाती है और यह निर्धारित कर सकती है कि कंप्यूटर के हार्डवेयर तत्व वास्तव में कैसे इंटरैक्ट करते हैं। इन निम्न-स्तरीय भाषाओं को हार्डवेयर कंपोनेंट्स और उनके कॉन्फ़िगरेशन के विस्तृत ज्ञान की आवश्यकता होती है। मशीन स्तर भाषा और असेंबली भाषा को निम्न-स्तरीय भाषाओं के अंतर्गत वर्गीकृत किया जाता है।
मशीन भाषा को कंप्यूटर की प्राकृतिक भाषा माना जाता है, जिसे इलेक्ट्रॉनिक मशीनों द्वारा सीधे पहचाना जा सकता है। यह एक गैर-पोर्टेबल और मशीन पर निर्भर भाषा है जिसमें केवल दो बाइनरी नंबर 0 और 1 शामिल हैं। कंप्यूटर में प्रत्येक निर्देश बाइनरी कोड के रूप में मौजूद है। हालांकि, एक बाइनरी भाषा में एक कंप्यूटर को निर्देश देना काफी कठिन है, जिसका अर्थ है कि बाइनरी भाषा में कंप्यूटर के साथ बातचीत करना या मशीन स्तर की भाषा में प्रोग्राम लिखना। मशीन की भाषा में लेखन, परीक्षण और डिबगिंग की गति धीमी है और अव्यवस्थित त्रुटियां बहुत आम हैं। मशीन की भाषा उस हार्डवेयर प्लेटफ़ॉर्म के हार्डवेयर डिज़ाइन द्वारा परिभाषित की जाती है। यह थकाऊ और समय लेने वाली है।
निम्न-स्तरीय भाषा का एक और प्रकार असेंबली भाषा है। इस भाषा में प्रोग्रामर उन कमांड्स का उपयोग करते हैं जो सामान्य अंग्रेजी से थोड़े मिलते-जुलते हैं जो कुछ हद तक समझ में आता है और प्रोग्रामर द्वारा व्याख्या की जाती है। प्रोग्रामों का निर्माण 0 और 1 के बजाय अल्फ़ान्यूमेरिक प्रतीकों (Mnemonics के रूप में भी जाना जाता है) का उपयोग करके किया जाता है। इसमें ADD, SUB, MUL, DIV, RLC और RAL प्रतीक या Mnemonics के रूप में शामिल हैं।
यद्यपि मशीन भाषा के अलावा किसी अन्य भाषा में लिखे गए प्रत्येक प्रोग्राम का मशीनी भाषा में ट्रांसलेट किया जाता है। असेंबलर का उपयोग गैर-मशीन भाषा को मशीन भाषा में ट्रांसलेट करने के लिए इस तरह के संचालन के लिए किया जाता है। हर प्रोसेसर अपनी असेंबली भाषा के साथ सक्षम होता है जैसे कि 8085, 8086, 80186 प्रोसेसर की अपनी असेंबली भाषा होती है।
असेम्बली लैंग्वेज
मशीनी भाषा में प्रोग्राम लिखने में आने वाली कठिनाइयों को दूर करने के लिए असेंबली भाषा का निर्माण किया गया क्योंकि मशीनी भाषा में 0 और 1 में लिखे जाने वाले संकेतों को समझना हमारे लिए बहुत ही मुश्किल था। असेंबली भाषा में भी संकेतों का ही प्रयोग किया गया लेकिन यह संकेत हमारी समझ में आ सकने वाले शब्दों से किया गया जिसे निमोनिक कोड (Mnemonic code) कहते हैं इन्हीं निमोनिक कोड का उपयोग करके असेंबली भाषा में प्रोग्राम को लिखना आसान हो गया।
निमोनिक कोड के उदाहरण हैं।
Mnemonic Code | Machine Code |
ADD | 0101 |
SUB | 0110 |
MUL | 0111 |
DIV | 1000 |
असेंबली लैंग्वेज में लिखा प्रोग्राम कैसे कार्य करता हैं?
असेंबली भाषा में लिखे प्रोग्राम को चलाने के लिए हमें तो निमोनिक कोर्ट का उपयोग करना पड़ता है फिर इन कोड को मशीनी भाषा में बदलने के लिए एक अनुवादक की जरूरत पड़ती है जिसे हम असेंबलर कहते हैं असेंबलर का असेंबली भाषा में लिखे हुए प्रोग्राम को मशीनी भाषा में बदल देता है तथा कार्य पूरा होने उपरांत हमें असेंबली भाषा में लिखें प्रोग्राम के अनुसार उत्तर प्राप्त होता है।
इसे हम उसी तरह से समझते हैं जैसे हम किसी दुसरे देश में जाते हैं और हमें हिंदी आती है और जिस देश में जा रहे हैं वह के लोग इंग्लिश में बात करते हैं तो हमें एक ऐसे बन्दे की जरुरत पड़ेगी जो हमें उस देश के लोगो के साथ बात करने के लिए इंग्लिश को हिंदी और हिंदी को इंग्लिश में बात करने में मदद कर सके उसे हम ट्रांसलेटर या अनुवादक कहेंगे। ऐसा करने के लिए अनुवादक को दोनों भाषाओँ का ज्ञान होना अति अवश्यक है ताकि वह बातचीत करने में सहायता कर सके।
हाई लेवल लैंग्वेज
उच्च-स्तरीय भाषाएं प्रोग्रामिंग भाषाएं हैं जो गणितीय प्रतीकों, प्राकृतिक भाषा करेक्टर और प्रतीकों के संयोजन द्वारा निर्मित हैं और वास्तविक-दुनिया के परिदृश्यों द्वारा निर्मित हैं। सामान्य तरीके से, आधुनिक प्रक्रिया उन्मुख प्रोग्रामिंग भाषाओं (Modern Procedure-Oriented Programming Languages) को उच्च-स्तरीय भाषाओं के रूप में जाना जाता है। ये मुख्य रूप से एक प्रोग्राम के तेज और आसान विकास के लिए लागू किए जाते हैं। यह एक प्रोग्राम के विकास के लिए सीपीयू की आर्किटेक्चर और रजिस्टरों को याद करने की आवश्यकता नहीं है। कम्पाइलर का उपयोग उच्च-स्तरीय भाषा प्रोग्राम को मशीन भाषा में ट्रांसलेट करने के लिए किया जाता है। COBOL, FORTRAN, BASIC, C और C ++, Java, आदि विभिन्न उच्च-स्तरीय भाषाएँ हैं।
मशीन लैंग्वेज कैसे कार्य करती है ?
कंप्यूटर हमारे आदेशों के अनुसार कार्य करता है लेकिन मशीन होने के कारण हमारे आदेशों को समझने के लिए वह पहले उन्हें मशीन लैंग्वेज़ में बदलता है। जैसा कि हम पढ़ चुके हैं, मशीन लैंग्वेज़ का अर्थ है किसी भी जानकारी को विद्युत पल्स होने या न होने यानि क्रमश: 0 व 1 में बदल लेना। प्रत्येक कंप्यूटर का मशीन कोड उसमें प्रयोग की जाने वाली चिप द्वारा निर्धारित होता है। मशीन कोड में दिये गये आदेश को हम एक उदाहरण से समझ सकते है।
मान लीजिए कि मशीन कोड का एक आदेश 0011, 1000, 1001 है। इसमें पहले ‘निब्बल’ (चार अंकों) 0011 का अर्थ है ‘जोड़ो’। दूसरे निब्बल 1000 का अर्थ है 8 और तीसरे निब्बल 1001 का अर्थ है 9। इस तरह इस आदेश का अर्थ है कि लोकेशन संख्या 8 के डेटा को लोकेशन संख्या 9 के डेटा से जोड़ कर (Cumulative result) को लोकेशन संख्या 8 पर लिखिए। कंप्यूटर की सेन्ट्रल प्रॅासेसिंग यूनिट इन बाइनरी संकेतो को विद्युत पल्सों (Power pulse) के होने या न होने के अनुसार ग्रहण कर लेता है। कंप्यूटर की क्लॉक से ये पल्स जारी होती हैं जो फिर इलेक्ट्रॉनिक गेट्स (Gates) से गुजरती हैं। कंप्यूटर में एक सेकंड में औसतन 8 मेगाहर्ट्ज यानि 80 लाख पल्स जारी होती है।
मशीन कोड के अनुदेश कैसे बनाये जाते हैं व कंप्यूटर कैसे काम करता है, इसके लिए हम सेन्ट्रल प्रॉसेसिंग यूनिट के बारे में कुछ समझेंगे। सेन्ट्रल प्रॉसेसिंग यूनिट के निम्न भाग इस काम में अलग-अलग भूमिकायें निभाते हैं-
- अंकगणितीय और लॉजिकल यूनिट (ALU)
- मेन मेमोरी
- कंट्रोल यूनिट
- डिजिटल क्लॉक
- रजिस्टर
रिजस्टर भी चार तरह के होते हैं-
- मेमोरी डेटा रजिस्टर
- करैंट इन्स्ट्रक्शन रजिस्टर
- मेमोरी ऐर्डेस रजिस्टर
- सीक्वेंस कन्ट्रोल रजिस्टर
डेटा पर काम करते समय उन्हें मेन मेमोरी से निकाकलर इन रजिस्टरों में कुछ समय के लिए रख दिया जाता है। कुछ समय के लिए डेटा रखे जाने के कारण ही इन रजिस्टरों को टेम्प्रेरी मेमोरी कहते हैं। इसके अलावा ALU के अंदर एक एक्यूमुलेटर (Accumulator) भी होता है जिसमें गणना के बाद मिलने वाले परिणामों को कुछ समय के लिए रखा जाता है।
कंप्यूटर इंस्ट्रक्शन्स
मेन मेमोरी में डेटा को रखने के लिए लाखों शब्द-लोकेशन बने होते है जिनका आकार एक-सा होता है। इस तरह कुछ लोकेशन 8 बिट के, कुछ 16 के, तो कुछ 32 बिट के होते हैं। हर शब्द लोकेशन का एक सीरियल नंबर होता है जिसे उसका एड्रेस कहते हैं। इस एड्रेस के जरिये उस लोकेशन में भरें हुए डेटा तक आसानी से पहुंचा जा सकता है।
मशीन लैंग्वेज में दिये गये इंस्ट्रक्शन्स के दो भाग होते हैं-
- ऑपरेशन या फंक्शन कोड तथा
- ऑपरेंड एड्रेस
ऑपरेशन या फंक्शन कोड का अर्थ है डेटा पर किया जाने वाला कार्य जैसे जोड़, घटाना, गुणा ,भाग आदि |
ऑपरेन्ड एड्रेस
ऑपरेन्ड एड्रेस, जिसे संक्षेप में ओ.पी.कोड कहते हैं, का अर्थ है वह डेटा, जिन पर काम किया जाना है, के लोकेशन वाली संख्या को बाइनरी कोड में प्रस्तुत करना। सरल अर्थो में एक ऑपरेंड एड्रेस मेमोरी में भौतिक स्थान है जहां एलिमेंट की जानकारी संग्रहित है।
फंक्शन कोड
फंक्शन कोड को आधुनिक कंप्यूटरों में हेक्स विधि से लिखा जाता है। यहां पर हम एक काल्पनिक आदेश का उदाहरण लेंगे जिसे बाइनरी विधि से लिखा गया है। एक्यूमुलेटर (अब तक के गणना कार्यो के परिणाम वाले स्थान) में दी गई संख्या में से मेमोरी लोकेशन 910 में दी गई संख्या को घटाने के लिए आदेश (instruction) इस तरह दिया जाएगा-
फंक्शन कोड ऑपरेन्ड कोड
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
फंक्शन कोड यानि 0011 का मतलब है घटाओं और 0000 0000 1001 बाइनरी संख्या का मतलब है डेसीमल लोकेशन संख्या 9
जैसा कि हमने पहले पढ़ा ‘प्रत्येक डेटा’ जिस पर कार्य किया जाता है, के लिए एक लोकेशन निर्धारित करना होता है। मान लिया जाये कि एड्रेस बाइनरी पद्धति मे लिखा जाना है और इसके लिए हमने आदेश में चार बिट निर्धारित की हैं तो कुल मिलाकर 24 अर्थात 16 आदेशों को लोकेशन संख्या मिल सकेगी। इस तरह ऑपरेंड एड्रेस के 12 स्थानों में 212 यानि 4096 मेमोरी एड्रेस दिये जा सकेंगे। इस मेमारी एड्रेस को दूसरे शब्दों में हम 4 किलोबाइट कह सकते हैं। ( 1k = 1024 बाइट)
मान लीजिए हमें मेमोरी लोकेशन 1980 और 2142 में स्टोर दो संख्याओं का गुणा कर उनके गुणनफल को एड्रेस 0042 में रखना है। इसके लिए तीन कार्य करने होंगे-
- मेमोरी एड्रेस 1980 के डेटा को एक्यूमुलेटर में भेजना
- गुणा करने का आदेश व संबधित एड्रेस देना
- गुणनफल को एक्यूमुलेटर से स्थानान्तरित कर मेमोरी लोकेशन में भेजना।
इन तीन कार्यो के लिए निम्न आदेश दिये जाएंगे।
ओ.पी.कोड एड्रेस | (ऑपरेंड एड्रेस) | |
आदेश 1 | 0011 | 1980 |
आदेश 2 | 0100 | 2142 |
आदेश 3 | 0110 | 0042 |
पहले कोडेड आदेश के अनुसार कंप्यूटर मेमोरी लोकेशन 1980 में संचित (Accumulated) संख्या को एक्यूमुलेटर में भेजेगा। यदि एक्यूमुलेटर में पहले से कोई संख्या है तो वह मिल जाएगी। दूसरे आदेश के अनुसार एक्यूमुलेटर में आयी इस संख्या को मेमोरी लोकेशन 2142 में संचित (Accumulated) संख्या से गुणा किया जाएगा व गुणनफल को एक्यूमुलेटर में एक्यूमुलेट कर लिया जाएगा। तीसरे आदेश के अनुसार यह गुणनफल एक्यूमुलेटर से स्थानान्तरित कर लोकेशन 0042 में भेज दिया जाएगा। यदि लोकेशन 0042 में पहले से कोई संख्या होगी, तो वह अपने आप मिट जायेगी।