लिटिल मैन कंप्यूटर: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Instructional model of a computer}} | {{Short description|Instructional model of a computer}} | ||
'''लिटिल मैन कंप्यूटर''' (एलएमसी) [[कंप्यूटर]] का एक निर्देशात्मक मॉडल है, जिसे 1965 में डॉ. [[स्टुअर्ट मैडनिक]] द्वारा बनाया गया था।<ref>{{cite web|title=लिटिल मैन कंप्यूटर|url=http://www.acs.ilstu.edu/faculty/javila/lmc/ |date=May 1, 2000 |publisher=[[Illinois State University]] |access-date=March 8, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090227005033/http://www.acs.ilstu.edu/faculty/javila/lmc/ |archive-date=February 27, 2009 }}</ref> एलएमसी का उपयोग | '''लिटिल मैन कंप्यूटर''' (एलएमसी) [[कंप्यूटर]] का एक निर्देशात्मक मॉडल है, जिसे 1965 में डॉ. [[स्टुअर्ट मैडनिक]] द्वारा बनाया गया था।<ref>{{cite web|title=लिटिल मैन कंप्यूटर|url=http://www.acs.ilstu.edu/faculty/javila/lmc/ |date=May 1, 2000 |publisher=[[Illinois State University]] |access-date=March 8, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090227005033/http://www.acs.ilstu.edu/faculty/javila/lmc/ |archive-date=February 27, 2009 }}</ref> एलएमसी का उपयोग सामान्यतः छात्रों को पढ़ाने के लिए किया जाता है क्योंकि यह एक साधारण [[वॉन न्यूमैन वास्तुकला|वॉन न्यूमैन]] आर्किटेक्वेरिएबल कंप्यूटर का मॉडल है, जिसमें आधुनिक कंप्यूटर की सभी मुख्य विशेषताएं हैं। इसके प्रोग्रामों को मशीन कोड (यद्यपि बाइनरी के अतिरिक्त डेसीमल में) या असेंबली कोड में किया जा सकता है।<ref>{{Cite book | doi = 10.1109/WSC.2001.977496| chapter = A crowd of Little Man Computers: Visual computer simulator teaching tools| title = Proceedings of the 2001 Winter Simulation Conference (Cat. No.01CH37304)| volume = 2| pages = 1632| year = 2001| last1 = Yurcik | first1 = W.| last2 = Osborne | first2 = H.| isbn = 0-7803-7307-3| s2cid = 18907923}}</ref><ref>{{Cite book | doi = 10.1145/364447.364585| chapter = A web-based little man computer simulator| title = कंप्यूटर विज्ञान शिक्षा पर बत्तीसवें SIGCSE तकनीकी संगोष्ठी की कार्यवाही - SIGCSE '01| pages = 204| year = 2001| last1 = Yurcik | first1 = W. | last2 = Brumbaugh | first2 = L. | isbn = 1581133294| s2cid = 14794750}}</ref><ref>{{Cite book | doi = 10.1109/FIE.2002.1158742| chapter = The educational range of visual simulations of the Little Man Computer architecture paradigm| title = 32nd Annual Frontiers in Education| pages = S4G–S19| year = 2002| last1 = Osborne | first1 = H.| last2 = Yurcik | first2 = W.| isbn = 0-7803-7444-4| s2cid = 10324295}}</ref> | ||
एलएमसी मॉडल एक | एलएमसी मॉडल एक क्लोज्ड मेल-रूम में क्लोज्ड लिटिल मैन कंप्यूटर की अवधारणा पर आधारित है। क्लोज्ड मेल-रूम के एक भाग मे 100 मेलबॉक्स होते हैं सामान्यतः जिनकी संख्या 0 से 99 मे मध्य होती है। जिनमें से प्रत्येक में 3 डिजिट का डेटा (000 से 999 तक) हो सकता है। इसके अतिरिक्त दूसरे भाग पर इनबॉक्स और आउटबॉक्स लेबल वाले दो मेलबॉक्स हैं जिनका उपयोग डेटा प्राप्त करने और आउटपुट करने के लिए किया जाता है। क्लोज्ड मेल-रूम के सेंटर में एक कार्य क्षेत्र है जिसमें साधारण दो फ़ंक्शन (+) और (-) होते है जिसे एक्युमुलेटर के रूप में जाना जाता है। एक रीसेट करने योग्य काउंटर है जिसे प्रोग्राम काउंटर के रूप में जाना जाता है। प्रोग्राम काउंटर में लिटिल मैन कंप्यूटर द्वारा किए जाने वाले अगले इंस्ट्रक्शन का एड्रेस होता है। प्रत्येक इंस्ट्रक्शन के निष्पादित होने के बाद इस प्रोग्राम काउंटर को सामान्यतः 1 से बढ़ा दिया जाता है, जिससे लिटिल मैन को एक फ़ंक्शन के रूप मे प्रोग्राम के माध्यम से कार्य करने की स्वीकृति प्राप्त होती है जो ब्रांच इंस्ट्रक्शन इटेरशन (लूप) और कंडीशनल प्रोग्रामिंग संरचनाओं को एक प्रोग्राम में सम्मिलित करने की स्वीकृति देते हैं। यदि कोई विशेष कंडीशनल (सामान्यतः एक्यूमुलेटर में संग्रहीत मान शून्य या धनात्मक होता है) पूरी हो जाती है तो प्रोग्राम काउंटर को नॉन-कंडीशनल मेमोरी एड्रेस पर प्रयुक्त करके प्राप्त किया जाता है। | ||
जैसा कि वॉन न्यूमैन | जैसा कि वॉन न्यूमैन आर्किटेक्वेरिएबल द्वारा निर्दिष्ट किया गया है कि किसी भी मेलबॉक्स (यूनिक मेमोरी एड्रेस को दर्शाता है) में इंस्ट्रक्शन या डेटा हो सकता है। इसलिए प्रोग्राम काउंटर को डेटा वाले मेमोरी एड्रेस तक जाने से रोकने के लिए सावधानी की आवश्यकता है। सामान्यतः लिटिल मैन कंप्यूटर इसे एक इंस्ट्रक्शन के रूप में मानने का प्रयास करता है। कोई भी मेलबॉक्स इंस्ट्रक्शन लिखकर इसका लाभ उठा सकता है, जिसे मॉडिफाई कोड बनाने के लिए एक कोड के रूप में समझा जा सकता है। एलएमसी का उपयोग करने के लिए उपयोगकर्ता डेटा को मेलबॉक्स में लोड करता है और फिर मेमोरी एड्रेस शून्य पर संग्रहीत इंस्ट्रक्शन से प्रारम्भ करके कार्यान्वयन करने के लिए लिटिल मैन को संकेत देता है। प्रोग्राम काउंटर को शून्य पर रीसेट करने से प्रोग्राम प्रभावी रूप से पुनः प्रारम्भ हो जाता है। यद्यपि यह संभावित रूप से भिन्न स्थिति मे हो सकता है। | ||
== | == कार्यान्वयन साइकल == | ||
{{See also| | {{See also|इंस्ट्रक्शन}} | ||
किसी प्रोग्राम को निष्पादित करने के लिए | किसी प्रोग्राम को निष्पादित करने के लिए लिटिल मैन कंप्यूटर इन वेरिएबलणों का अनुसरण करता है: | ||
# मेलबॉक्स | # मेलबॉक्स संख्या के लिए प्रोग्राम काउंटर की जांच करें जिसमें प्रोग्राम इंस्ट्रक्शन सम्मिलित होते है। | ||
# उस | # उस संख्या वाले मेलबॉक्स से इंस्ट्रक्शन प्राप्त करें जिसमे प्रत्येक इंस्ट्रक्शन के दो फ़ील्ड ऑपकोड (संचालन करने के लिए ऑपरेशन को इंगित करता है) और एड्रेस फ़ील्ड (यह दर्शाता है कि ऑपरेशन करने के लिए डेटा कहां है) होते हैं। | ||
# प्रोग्राम काउंटर बढ़ाएँ | #प्रोग्राम काउंटर बढ़ाएँ जिसमे अगले इंस्ट्रक्शन की मेलबॉक्स संख्या सम्मिलित होती है। | ||
# | # इंस्ट्रक्शन को डिकोड करें। यदि इंस्ट्रक्शन किसी अन्य मेलबॉक्स में संग्रहीत डेटा का उपयोग करता है तो उस डेटा के लिए मेलबॉक्स संख्या को खोजने के लिए एड्रेस फ़ील्ड का उपयोग करें जिस पर यह कार्य किया जा सकता है। उदाहरण के लिए 'मेलबॉक्स संख्या 42 से डेटा प्राप्त करें। | ||
# | # फेच संख्या 4 में निर्धारित एड्रेस के साथ इनपुट एक्यूमुलेटर या मेलबॉक्स से डेटा प्राप्त करें। | ||
# दिए गए ऑपकोड के आधार पर | # दिए गए ऑपकोड के आधार पर इंस्ट्रक्शन को कार्यान्वित करें। | ||
# | # फेच संख्या 4 में निर्धारित एड्रेस के साथ परिणाम को आउटपुट, एक्यूमुलेटर या मेलबॉक्स में संग्रहीत करें। | ||
# | # साइकल या हाल्ट को दोहराने के लिए प्रोग्राम काउंटर पर वापस जाए। | ||
== | == कमांड == | ||
एलएमसी बाइनरी प्रोसेसर की वास्तविक कार्यप्रणाली को दर्शाता है। जिसकी डेसीमल संख्याओं की सरलता को उन छात्रों के लिए कॉम्प्लेक्सिटी समस्या को कम करने के लिए चुना गया था जो बाइनरी/[[हेक्साडेसिमल]] में कार्य करने में सहज (कम्फ़र्टेबल) नहीं हो सकते थे। | |||
=== निर्देश === | === निर्देश (इंस्ट्रक्शन) === | ||
कुछ एलएमसी सिमुलेटरों को | कुछ एलएमसी सिमुलेटरों को प्रत्यक्ष रूप से 3 डिजिट के न्यूमेरिक कोड इंस्ट्रक्शन का उपयोग करके प्रोग्राम किया जाता है और कुछ एलएमसी सिमुलेटर 3 डिजिट वाले मनेमोनिक्स कोड और लेबल का उपयोग करते हैं। किसी भी स्थिति में समझ को सरल बनाने के लिए इंस्ट्रक्शन (सामान्यतः लगभग दस इंस्ट्रक्शन) सीमित होते है। यदि एलएमसी मनेमोनिक्स कोड और लेबल का उपयोग करता है तो प्रोग्राम असेंबल होने पर इन्हें 3 डिजिट के न्यूमेरिक कोड इंस्ट्रक्शन में परिवर्तित कर दिया जाता है। | ||
नीचे दी गई तालिका एक विशिष्ट | नीचे दी गई तालिका एक विशिष्ट न्यूमेरिक इंस्ट्रक्शन कोड और एक्विवलेंट मनेमोनिक कोड प्रदर्शित करती है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ इंस्ट्रक्शन | ||
|- | |- | ||
! न्यूमेरिक कोड | ! न्यूमेरिक कोड | ||
!मनेमोनिक कोड | !मनेमोनिक कोड | ||
! | !इंस्ट्रक्शन | ||
! विवरण | ! विवरण | ||
|- | |- | ||
| 1xx || | | 1xx || एडीडी || एडीडी | ||
| मेलबॉक्स xx में संग्रहीत मान को वर्तमान में | | मेलबॉक्स xx में संग्रहीत मान को वर्तमान में एक्यूमुलेटर पर जो भी मान है, उसमें जोड़ें। | ||
: ध्यान दें: मेलबॉक्स | : ध्यान दें: मेलबॉक्स का डेटा परिवर्तित नही किया जाता है और एक्यूमुलेटर की गतिविधियों को उन इंस्ट्रक्शन मे जोड़ने के लिए परिभाषित नहीं किया जाता है, जो 3 डिजिट से बड़े योग का कारण बनते हैं। सबट्रैक्ट के समान कोई ओवरफ्लो पर ऋणात्मक फ्लैग प्रयुक्त कर सकता है। | ||
|- | |- | ||
| 2xx || | | 2xx || एसयूबी || सब्ट्रैक्ट | ||
| | | एक्यूमुलेटर पर वर्तमान में जो भी मान है, उसमें से मेलबॉक्स xx में संग्रहीत मान घटाएँ। | ||
: ध्यान दें: मेलबॉक्स | : ध्यान दें: मेलबॉक्स का डेटा परिवर्तित नही किया गया है और एक्यूमुलेटर के एक्शन को ऋणात्मक परिणामों का कारण बनने वाले सबट्रैक्ट इंस्ट्रक्शन के लिए परिभाषित नहीं किया गया है। हालांकि एक ऋणात्मक ऋणात्मक फ्लैग प्रयुक्त कर सकता है। ताकि 7xx (बीआरजेड) और 8xx (बीआरपी) का उपयोग किया जा सके। | ||
|- | |- | ||
| 3xx || | | 3xx || एसटीए || स्टोर | ||
| | | एक्यूमुलेटर के डेटा को मेलबॉक्स xx (डेस्ट्रकटिव) में संग्रहीत करें। | ||
: ध्यान दें: | : ध्यान दें: एक्यूमुलेटर का डेटा (नॉन-डेस्ट्रकटिव) परिवर्तित नही किया जाता है लेकिन मेमेलबॉक्स का डेटा परिवर्तित किया जाता है फिर चाहे उसमें कुछ भी डेस्ट्रकटिव डेटा स्थित हो। | ||
|- | |- | ||
| 5xx || | | 5xx || एलडीए || लोड | ||
| मेलबॉक्स xx ( | | मेलबॉक्स xx (नॉन-डेस्ट्रकटिव) से मान लोड करें और इसे एक्यूमुलेटर (डेस्ट्रकटिव) में प्रस्तुत करें। | ||
|- | |- | ||
| 6xx || | | 6xx || बीआरए || [[branch (computer science)|ब्रांच]] (अनकंडीशनल) | ||
| प्रोग्राम काउंटर को दिए गए | | प्रोग्राम काउंटर को दिए गए एड्रेस (मान xx) पर प्रयुक्त करें। अर्थात् मेलबॉक्स xx में यही मान अगला निष्पादित इंस्ट्रक्शन होगा। | ||
|- | |- | ||
| 7xx || | | 7xx || बीआरजेड || यदि ब्रांच शून्य ([[conditional (programming)|कंडीशनल]]) | ||
| यदि | | यदि एक्यूमुलेटर में मान 000 है, तो प्रोग्राम काउंटर का मान xx प्रयुक्त करें अन्यथा कुछ न करें शून्य रहने दे। ऋणात्मक फ्लैग को ध्यान में रखा गया है या नहीं यह अपरिभाषित है। जब एक सब्ट्रैक्ट एक्यूमुलेटर को अंडरफ्लो करता है, तो यह ऋणात्मक फ्लैग प्रयुक्त किया जाता है जिसके बाद एक्यूमुलेटर अपरिभाषित होता है या संभावित रूप से शून्य होता है, जिससे अंडरफ्लो पर बीआरजेड का कार्य अपरिभाषित हो जाता है। यदि एक्यूमुलेटर शून्य है और ऋणात्मक फ्लैग प्रयुक्त नहीं है तो प्रयुक्त किया गया डेटा ब्रांच में होता है। | ||
: | : ध्यान दें: चूंकि प्रोग्राम मेमोरी में संग्रहीत होता है। इसलिए डेटा और प्रोग्राम इंस्ट्रक्शन का एड्रेस फॉर्मेट के समान होता है। | ||
|- | |- | ||
| 8xx || | | 8xx || बीआरपी || यदि ब्रांच धनात्मक (कंडीशनल) | ||
| यदि | | यदि एक्यूमुलेटर 0 या धनात्मक है, तो प्रोग्राम काउंटर को मान को xx पर प्रयुक्त करें अन्यथा कुछ न करें शून्य रहने दे। चूँकि एलएमसी मेमोरी सेल केवल 0 और 999 के बीच मान रख सकते हैं। यह इंस्ट्रक्शन पूरी तरह से सब्ट्रैक्ट पर अंडरफ्लो द्वारा निर्धारित ऋणात्मक फ्लैग और संभावित रूप से एडीडी (अपरिभाषित) ओवरफ्लो पर निर्भर करता है। | ||
: | : ध्यान दें: चूंकि प्रोग्राम मेमोरी में संग्रहीत होता है। इसलिए डेटा और प्रोग्राम इंस्ट्रक्शन का एड्रेस फॉर्मेट के समान होता है। | ||
|- | |- | ||
| 901 || | | 901 || आईएनपी || इनपुट | ||
| इनबॉक्स पर जाएं, उपयोगकर्ता से | | इनबॉक्स पर जाएं, उपयोगकर्ता से डेटा प्राप्त करें और इसे एक्यूमुलेटर में इनपुट करे। | ||
: | : ध्यान दें: यह एक्यूमुलेटर में जो भी डेटा होता है उसे डेस्ट्रकटिव कर देता है। | ||
|- | |- | ||
| 902 || | | 902 || ओयूटी || आउटपुट | ||
| | | एक्यूमुलेटर से डेटा को आउटबॉक्स में कॉपी करें। | ||
: ध्यान दें: | : ध्यान दें: एक्यूमुलेटर का डेटा (नॉन-डेस्ट्रकटिव) परिवर्तित नही किया जाता है। | ||
|- | |- | ||
| 000 || | | 000 || एचएलटी/सीओबी || हॉल्ट/कॉफी ब्रेक | ||
| | | कार्य करना बंद करें/प्रोग्राम समाप्त करें। | ||
|- | |- | ||
| || | | || डीएटी || डाटा || यह एक असेंबलर इंस्ट्रक्शन है जो बस-डेटा को अगले उपलब्ध मेलबॉक्स में लोड करता है। वैरिएबल घोषित करने के लिए डीएटी का उपयोग लेबल के संयोजन में भी किया जा सकता है। उदाहरण के लिए डीएटी 984 मान 984 को डीएटी इंस्ट्रक्शन के एड्रेस पर एक मेलबॉक्स में संग्रहीत करता है। | ||
|} | |} | ||
=== उदाहरण === | === उदाहरण === | ||
==== | ==== न्यूमेरिक इंस्ट्रक्शन कोड का उपयोग करना ==== | ||
यह प्रोग्राम ( | यह प्रोग्राम (इंस्ट्रक्शन 901 से इंस्ट्रक्शन 000 तक) केवल न्यूमेरिक कोड का उपयोग करके लिखा गया है। प्रोग्राम इनपुट के रूप में दो संख्या लेता है और आउटपुट देता है। ध्यान दें कि यह कार्यान्वयन मेलबॉक्स 00 पर प्रारम्भ होता है और मेलबॉक्स 07 पर समाप्त होता है। न्यूमेरिक इंस्ट्रक्शन कोड का उपयोग करके एलएमसी प्रोग्रामिंग मे होने वाली कमी पर नीचे वेरिएबल्चा की गई है। | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! मेलबॉक्स | ||
! | ! न्यूमेरिक कोड | ||
!ऑपरेशन | !ऑपरेशन | ||
! टिप्पणी | ! टिप्पणी | ||
Line 88: | Line 88: | ||
| 00 | | 00 | ||
| '''901''' | | '''901''' | ||
| | | एक्यूमुलेटर = इनबॉक्स | ||
| | |पहली संख्या को कैलकुलेटर में प्रस्तुत करें (वहां जो कुछ भी था उसे मिटा दें) | ||
|- | |- | ||
| 01 | | 01 | ||
| '''308''' | | '''308''' | ||
| | | मेलबॉक्स 08 = एक्यूमुलेटर | ||
|कैलकुलेटर का वर्तमान मान संग्रहीत करें (अगले | |कैलकुलेटर का वर्तमान मान संग्रहीत करें (अगले वेरिएबलण की तैयारी के लिए...) | ||
|- | |- | ||
| 02 | | 02 | ||
| '''901''' | | '''901''' | ||
| | | एक्यूमुलेटर = इनबॉक्स | ||
| | |दूसरी संख्या को कैलकुलेटर में प्रस्तुत करें (वहां जो कुछ भी था उसे मिटा दें) | ||
|- | |- | ||
| 03 | | 03 | ||
| '''309''' | | '''309''' | ||
| | | मेलबॉक्स 09 = एक्यूमुलेटर | ||
|कैलकुलेटर का वर्तमान मान संग्रहीत करें (फिर से, अगले | |कैलकुलेटर का वर्तमान मान संग्रहीत करें (फिर से, अगले वेरिएबलण की तैयारी के लिए...) | ||
|- | |- | ||
| 04 | | 04 | ||
| '''508''' | | '''508''' | ||
| | | एक्यूमुलेटर = मेलबॉक्स 08 | ||
|(अब दोनों इनपुट मान मेलबॉक्स 08 और 09 में संग्रहीत हैं...) | |(अब दोनों इनपुट मान मेलबॉक्स 08 और 09 में संग्रहीत हैं...) | ||
Line 115: | Line 115: | ||
| 05 | | 05 | ||
| '''209''' | | '''209''' | ||
| | | एक्यूमुलेटर = एक्यूमुलेटर - मेलबॉक्स 09 | ||
|कैलकुलेटर के वर्तमान मान से | |कैलकुलेटर के वर्तमान मान से दूसरी संख्या घटाएं (जो कि पहली संख्या पर मान प्रयुक्त किया गया था) | ||
|- | |- | ||
| 06 | | 06 | ||
| '''902''' | | '''902''' | ||
| आउटबॉक्स = | | आउटबॉक्स = एक्यूमुलेटर | ||
|कैलकुलेटर के परिणाम को आउटबॉक्स में आउटपुट | |कैलकुलेटर के परिणाम को आउटबॉक्स में आउटपुट करें। | ||
|- | |- | ||
| 07 | | 07 | ||
| '''000''' | | '''000''' | ||
| | | हॉल्ट | ||
| एचएएलटी एलएमसी | | एचएएलटी एलएमसी | ||
|} | |} | ||
==== | ==== मनेमोनिक्स और लेबल का उपयोग करना ==== | ||
असेंबली | असेंबली लैंग्वेज एक निम्न-स्तरीय प्रोग्रामिंग लैंग्वेज है जो न्यूमेरिक इंस्ट्रक्शन कोड के अतिरिक्त मनेमोनिक्स और लेबल का उपयोग करती है। यद्यपि लिटिल मैन कंप्यूटर केवल मनेमोनिक्स के एक सीमित समूह का उपयोग करता है तो प्रत्येक इंस्ट्रक्शन के लिए एक मनेमोनिक्स कोड का उपयोग करने की सुविधा नीचे दिखाए गए उसी प्रोग्राम की असेंबली लैंग्वेज से स्पष्ट होती है। जिससे प्रोग्रामर को अब अज्ञात न्यूमेरिक कोड को याद रखने की आवश्यकता नहीं है और वह कर सकता है अब अधिक मनेमोनिक्स कोड को एक प्रोग्राम कोड के साथ प्रयोग किया जा सकता है। यदि मनेमोनिक्स एक इंस्ट्रक्शन है जिसमें मेमोरी एड्रेस (या तो एक ब्रांच इंस्ट्रक्शन या डेटा लोड) सम्मिलित है तो मेमोरी एड्रेस को नाम देने के लिए एक लेबल का उपयोग किया जाता है। | ||
INP | INP | ||
STA FIRST | STA FIRST | ||
Line 141: | Line 141: | ||
SECOND DAT | SECOND DAT | ||
== लेबल == | == लेबल (प्रोग्रामिंग लैंग्वेज) == | ||
लेबल के बिना प्रोग्रामर को मेलबॉक्स (मेमोरी) | लेबल के बिना प्रोग्रामर को मेलबॉक्स (मेमोरी) एड्रेसों की मैन्युअल रूप से गणना करने की आवश्यकता होती है। न्यूमेरिक कोड उदाहरण में यदि अंतिम एचएलटी इंस्ट्रक्शन से पहले एक नया इंस्ट्रक्शन डाला जाना था तो वह एचएलटी इंस्ट्रक्शन एड्रेस 07 से एड्रेस 08 पर चला जाता है जिससे एड्रेस लेबल एड्रेस 00 पर प्रारम्भ होता है। मान लीजिए कि उपयोगकर्ता ने पहले इनपुट के रूप में 600 प्रस्तुत किया है तब इंस्ट्रक्शन 308 का अर्थ यह होगा कि यह मान एड्रेस 08 पर संग्रहीत किया जाएगा और 000 (एचएलटी) इंस्ट्रक्शन को डेस्ट्रकटिव कर दिया जाएगा। चूँकि 600 का अर्थ है कि ब्रांच से मेलबॉक्स एड्रेस 00 प्रोग्राम क्लोज्ड होने के आतिरिक्त एक इंडलेस लूप स्टैक हो सकता है। | ||
इस | इस समस्या को हल करने के लिए अधिकांश असेंबली लैंग्वेज (एलएमसी सहित) मनेमोनिक्स को लेबल (प्रोग्रामिंग लैंग्वेज) के साथ जोड़ती हैं। लेबल प्रोग्रामिंग लैंग्वेज एक ऐसा शब्द है जिसका उपयोग एक मेमोरी एड्रेस को नाम देने के लिए किया जाता है जहां एक इंस्ट्रक्शन या डेटा संग्रहीत किया जाता है या एक इंस्ट्रक्शन में उस एड्रेस को संदर्भित करने के लिए उपयोग किया जाता है। | ||
जब कोई प्रोग्राम असेंबल किया जाता है: | जब कोई प्रोग्राम असेंबल किया जाता है: | ||
* | * इंस्ट्रक्शन निमोनिक के बाईं ओर एक लेबल प्रोग्रामिंग लैंग्वेज को मेमोरी एड्रेस में परिवर्तित किया जाता है जिसमे इंस्ट्रक्शन या डेटा को लूपस्टार्ट आईएनपी पर संग्रहीत किया जाता है। | ||
* | * इंस्ट्रक्शन निमोनिक के दाईं ओर एक लेबल प्रोग्रामिंग लैंग्वेज ऊपर उल्लिखित मेमोरी एड्रेस अर्थात बीआरए लूपस्टार्ट का मान लेता है। | ||
* | * डीएटी स्टेटमेंट के साथ संयुक्त लेबल प्रोग्रामिंग लैंग्वेज एक वेरिएबल के रूप में करता करती है। यह मेमोरी एड्रेस को लेबल प्रोग्रामिंग लैंग्वेज प्रयुक्त करता है क्योकि डेटा डीएटी 1 या संख्या 1 डीएटी पर संग्रहीत है। | ||
असेंबली | असेंबली लैंग्वेज मनेमोनिक्स और लेबल प्रोग्रामिंग लैंग्वेज का उपयोग करती है। यदि अंतिम एचएलटी इंस्ट्रक्शन से पहले एक नया इंस्ट्रक्शन डाला गया था तो <code>FIRST</code> लेबल वाला एड्रेस अब 08 की अतिरिक्त मेमोरी एड्रेस 09 पर होगा और जब प्रोग्राम को असेंबल किया जाएगा तब <code>STA FIRST</code> इंस्ट्रक्शन 309 (एसटीए) या 308 (एसटीए 08) में परिवर्तित हो जाएगा। | ||
इसलिए लेबल का उपयोग किया जाता है: | इसलिए लेबल प्रोग्रामिंग लैंग्वेज का उपयोग किया जाता है: | ||
* किसी | * किसी ब्रांच इंस्ट्रक्शन के लक्ष्य के रूप में किसी विशेष इंस्ट्रक्शन की पहचान करें। | ||
* नामित | * नामित वेरिएबल के रूप में एक मेमोरी एड्रेस की पहचान करें (डीएटी का उपयोग करके) और प्रोग्राम द्वारा उपयोग के लिए असेंबली टाइम पर प्रोग्राम में वैकल्पिक रूप से डेटा लोड करें। सामान्यतः यह उपयोग तब तक स्पष्ट नहीं है जब तक कोई यह नहीं मानता कि काउंटर में 1 जोड़ने का कोई तरीका नहीं है। कोई उपयोगकर्ता प्रारम्भ में इनपुट 1 के लिए कह सकता है। लेकिन इसे असेंबली टाइम डीएटी 1 का उपयोग करके लोड किया जा सकता है। | ||
=== उदाहरण === | === उदाहरण === | ||
नीचे दिया गया प्रोग्राम उपयोगकर्ता इनपुट लेगा | नीचे दिया गया प्रोग्राम उपयोगकर्ता से इनपुट लेगा और शून्य तक गणना करेगा। | ||
INP | INP | ||
OUT // Initialize | OUT // Initialize आउटपुट | ||
LOOP | LOOP बीआरजेड QUIT // Label this memory एडीडीress as LOOP. If the एक्यूमुलेटर value is 0, jump to the memory एडीडीress labeled QUIT | ||
एसयूबी ONE // सब्ट्रैक्ट the value स्टोरd at एडीडीress ONE from the एक्यूमुलेटर | |||
OUT | OUT | ||
BRA LOOP // Jump ( | BRA LOOP // Jump (unकंडीशनलly) to the memory एडीडीress labeled LOOP | ||
QUIT HLT // Label this memory | QUIT HLT // Label this memory एडीडीress as QUIT | ||
ONE | ONE डीएटी 1 // स्टोर the value 1 in this memory एडीडीress, and label it ONE (variable declaration) | ||
नीचे दिया गया प्रोग्राम उपयोगकर्ता इनपुट लेगा | नीचे दिया गया प्रोग्राम उपयोगकर्ता से इनपुट लेगा और उसे आउटपुट देगा और फिर दोहराएगा जिससे शून्य प्राप्त होने से प्रोग्राम समाप्त हो जाएगा। | ||
ध्यान दें: जिस इनपुट का आउटपुट 999 से अधिक है उसका एलएमसी 3 डिजिट की संख्या सीमा के कारण अपरिभाषित रहता है। | |||
START LDA ZERO // Initialize for multiple program run | START LDA ZERO // Initialize for multiple program run | ||
STA RESULT | STA RESULT | ||
STA COUNT | STA COUNT | ||
INP // User provided | INP // User provided इनपुट | ||
बीआरजेड END // Branch to program END if इनपुट = 0 | |||
STA VALUE // | STA VALUE // स्टोर इनपुट as VALUE | ||
LOOP LDA RESULT // Load the RESULT | LOOP LDA RESULT // Load the RESULT | ||
एडीडी VALUE // एडीडी VALUE, the user provided इनपुट, to RESULT | |||
STA RESULT // | STA RESULT // स्टोर the new RESULT | ||
LDA COUNT // Load the COUNT | LDA COUNT // Load the COUNT | ||
एडीडी ONE // एडीडी ONE to the COUNT | |||
STA COUNT // | STA COUNT // स्टोर the new COUNT | ||
एसयूबी VALUE // सब्ट्रैक्ट the user provided इनपुट VALUE from COUNT | |||
बीआरजेड ENDLOOP // If zero (VALUE has been एडीडीed to RESULT by VALUE times), branch to ENDLOOP | |||
BRA LOOP // Branch to LOOP to continue | BRA LOOP // Branch to LOOP to continue एडीडीing VALUE to RESULT | ||
ENDLOOP LDA RESULT // Load RESULT | ENDLOOP LDA RESULT // Load RESULT | ||
OUT // | OUT // आउटपुट RESULT | ||
BRA START // Branch to the START to initialize and get another | BRA START // Branch to the START to initialize and get another इनपुट VALUE | ||
END HLT // HALT - a zero was entered so done! | END HLT // HALT - a zero was entered so done! | ||
RESULT | RESULT डीएटी // Computed result (defaults to 0) | ||
COUNT | COUNT डीएटी // Counter (defaults to 0) | ||
ONE | ONE डीएटी 1 // Constant, value of 1 | ||
VALUE | VALUE डीएटी // User provided इनपुट, the value to be squared (defaults to 0) | ||
ZERO | ZERO डीएटी // Constant, value of 0 (defaults to 0) | ||
ध्यान दें: यदि डीएटी स्टेटमेंट के बाद कोई डेटा नहीं है तो डिफ़ॉल्ट मान 0 मेमोरी एड्रेस में संग्रहीत होता है। | |||
उपरोक्त उदाहरण में | उपरोक्त उदाहरण में <code>BRZ ENDLOOP</code> अपरिभाषित होता है, क्योंकि <code>COUNT-VALUE</code> ऋणात्मक हो सकती है, जिसके बाद एक्यूमुलेटर मान अपरिभाषित होता है। जिसके परिणामस्वरूप बीआरजेड शाखाबद्ध और एक्यूमुलेटर शून्य हो हो सकता है। जिससे कोड को स्पेसिफिकेशन के लिए कम्पेटिबल या परिवर्तित किया जा सकता है। | ||
... | ... | ||
LDA COUNT // Load the COUNT | LDA COUNT // Load the COUNT | ||
एडीडी ONE // एडीडी ONE to the COUNT | |||
STA COUNT // | STA COUNT // स्टोर the new COUNT | ||
एसयूबी VALUE // सब्ट्रैक्ट the user provided इनपुट VALUE from COUNT | |||
बीआरजेड ENDLOOP // If zero (VALUE has been एडीडीed to RESULT by VALUE times), branch to ENDLOOP | |||
... | ... | ||
निम्नलिखित संस्करण के साथ | निम्नलिखित संस्करण के साथ <code>COUNT-VALUE</code> के अतिरिक्त <code>VALUE-COUNT</code> का मूल्यांकन किया जाता है क्योकि यह सुनिश्चित करता है कि एक्यूमुलेटर कभी भी अंडरफ्लो न हो: | ||
... | ... | ||
LDA COUNT // Load the COUNT | LDA COUNT // Load the COUNT | ||
एडीडी ONE // एडीडी ONE to the COUNT | |||
STA COUNT // | STA COUNT // स्टोर the new COUNT | ||
LDA VALUE // Load the VALUE | LDA VALUE // Load the VALUE | ||
एसयूबी COUNT // सब्ट्रैक्ट COUNT from the user provided इनपुट VALUE | |||
बीआरजेड ENDLOOP // If zero (VALUE has been एडीडीed to RESULT by VALUE times), branch to ENDLOOP | |||
... | ... | ||
एक अन्य उदाहरण | इसका एक अन्य उदाहरण [[क्विन (कंप्यूटिंग)]] है, जो अपने स्वयं के मशीन कोड को प्रिंट कर करता है। प्रिंट-सोर्स असंभव होता है क्योंकि टेक्स्ट को आउटपुट नहीं किया जा सकता है: | ||
LOAD LDA 0 // Load position 0 into the | LOAD LDA 0 // Load position 0 into the एक्यूमुलेटर. This line will be modified on each loop to load the next lines into the एक्यूमुलेटर | ||
OUT // | OUT // आउटपुट the एक्यूमुलेटर's value. The एक्यूमुलेटर's value will be the line that was just loaded | ||
एसयूबी ONE // सब्ट्रैक्ट 1 from the value in the एक्यूमुलेटर. This is so we can do the बीआरजेड in the next step to see if we are on the last line in the program | |||
बीआरजेड ONE // If the previous सब्ट्रैक्टion has made the एक्यूमुलेटर 0 (which means we had the value 001 in the एक्यूमुलेटर), then branch to position ONE | |||
LDA LOAD // Load the LOAD position into the | LDA LOAD // Load the LOAD position into the एक्यूमुलेटर, this is in preparation to increment the एडीडीress digits for this position | ||
एडीडी ONE // Increment the position digits for the LOAD line. The value currently in the एक्यूमुलेटर would, if read as an instruction, load the next line into the एक्यूमुलेटर, compared to the last line loaded | |||
STA LOAD // | STA LOAD // स्टोर the newly incremented LOAD line back in the LOAD position | ||
BRA LOAD // Return to the beginning of the loop | BRA LOAD // Return to the beginning of the loop | ||
ONE | ONE डीएटी 1 // The variable ONE. If read as an instruction, this will be interpreted as HLT/COB and will end the program | ||
यह क्विन | यह क्विन एसएमसी का उपयोग करके कार्य करता है। क्योकि 0 को प्रत्येक इटेरशन में 1 से बढ़ाया जाता है और उस लाइन के कोड का आउटपुट किया जाता है जब तक कि वह जो कोड आउटपुट कर रहा है वह 1 न जाए और जिस पॉइंट पर मान 1 स्थिति होता है। वहाँ 1 का मान ऑपकोड के रूप में 0 होता है। इसलिए इसे <code>HALT/COB</code> इंस्ट्रक्शन के रूप में समझा जाता है। | ||
==यह भी देखें== | ==यह भी देखें== | ||
* [[गणना के लिए कार्डबोर्ड उदाहरणात्मक सहायता]] (एक अन्य | * [[गणना के लिए कार्डबोर्ड उदाहरणात्मक सहायता|कार्डबोर्ड इलुस्ट्रेटिव ऐड कम्प्यूटेशन]] (एक अन्य निर्देशात्मक मॉडल) | ||
* [[TIS-100 | * [[TIS-100|टीआईएस-100 (वीडियो गेम)]] | ||
* [[ मानव संसाधन मशीन ]] | * [[ मानव संसाधन मशीन |ह्यूमन रिसोर्स मशीन]] (एक कंप्यूटर गेम जो एलएमसी से प्रभावित है।) | ||
* [[डब्लूडीआर पेपर कंप्यूटर]] | * [[डब्लूडीआर पेपर कंप्यूटर]] | ||
* [[डिजी-कॉम्प I]] | * [[डिजी-कॉम्प I|डिजी-कॉम्प-I]] | ||
== संदर्भ == | == संदर्भ == | ||
Line 250: | Line 250: | ||
* [https://pblinkmeier.github.io/lmc-emulator/ पी. ब्रिंकमीयर का एलएमसी सिम्युलेटर] | * [https://pblinkmeier.github.io/lmc-emulator/ पी. ब्रिंकमीयर का एलएमसी सिम्युलेटर] | ||
* [https://wellingborough.github.io/LMC/LMC0.3.html वेलिंगबोरो एलएमसी सिम्युलेटर] | * [https://wellingborough.github.io/LMC/LMC0.3.html वेलिंगबोरो एलएमसी सिम्युलेटर] | ||
* [https://peterhigginson.co.uk/LMC/ पीटर हिगिन्सन का | * [https://peterhigginson.co.uk/LMC/ पीटर हिगिन्सन का एलएमसी सिम्युलेटर] | ||
Revision as of 12:52, 9 August 2023
लिटिल मैन कंप्यूटर (एलएमसी) कंप्यूटर का एक निर्देशात्मक मॉडल है, जिसे 1965 में डॉ. स्टुअर्ट मैडनिक द्वारा बनाया गया था।[1] एलएमसी का उपयोग सामान्यतः छात्रों को पढ़ाने के लिए किया जाता है क्योंकि यह एक साधारण वॉन न्यूमैन आर्किटेक्वेरिएबल कंप्यूटर का मॉडल है, जिसमें आधुनिक कंप्यूटर की सभी मुख्य विशेषताएं हैं। इसके प्रोग्रामों को मशीन कोड (यद्यपि बाइनरी के अतिरिक्त डेसीमल में) या असेंबली कोड में किया जा सकता है।[2][3][4]
एलएमसी मॉडल एक क्लोज्ड मेल-रूम में क्लोज्ड लिटिल मैन कंप्यूटर की अवधारणा पर आधारित है। क्लोज्ड मेल-रूम के एक भाग मे 100 मेलबॉक्स होते हैं सामान्यतः जिनकी संख्या 0 से 99 मे मध्य होती है। जिनमें से प्रत्येक में 3 डिजिट का डेटा (000 से 999 तक) हो सकता है। इसके अतिरिक्त दूसरे भाग पर इनबॉक्स और आउटबॉक्स लेबल वाले दो मेलबॉक्स हैं जिनका उपयोग डेटा प्राप्त करने और आउटपुट करने के लिए किया जाता है। क्लोज्ड मेल-रूम के सेंटर में एक कार्य क्षेत्र है जिसमें साधारण दो फ़ंक्शन (+) और (-) होते है जिसे एक्युमुलेटर के रूप में जाना जाता है। एक रीसेट करने योग्य काउंटर है जिसे प्रोग्राम काउंटर के रूप में जाना जाता है। प्रोग्राम काउंटर में लिटिल मैन कंप्यूटर द्वारा किए जाने वाले अगले इंस्ट्रक्शन का एड्रेस होता है। प्रत्येक इंस्ट्रक्शन के निष्पादित होने के बाद इस प्रोग्राम काउंटर को सामान्यतः 1 से बढ़ा दिया जाता है, जिससे लिटिल मैन को एक फ़ंक्शन के रूप मे प्रोग्राम के माध्यम से कार्य करने की स्वीकृति प्राप्त होती है जो ब्रांच इंस्ट्रक्शन इटेरशन (लूप) और कंडीशनल प्रोग्रामिंग संरचनाओं को एक प्रोग्राम में सम्मिलित करने की स्वीकृति देते हैं। यदि कोई विशेष कंडीशनल (सामान्यतः एक्यूमुलेटर में संग्रहीत मान शून्य या धनात्मक होता है) पूरी हो जाती है तो प्रोग्राम काउंटर को नॉन-कंडीशनल मेमोरी एड्रेस पर प्रयुक्त करके प्राप्त किया जाता है।
जैसा कि वॉन न्यूमैन आर्किटेक्वेरिएबल द्वारा निर्दिष्ट किया गया है कि किसी भी मेलबॉक्स (यूनिक मेमोरी एड्रेस को दर्शाता है) में इंस्ट्रक्शन या डेटा हो सकता है। इसलिए प्रोग्राम काउंटर को डेटा वाले मेमोरी एड्रेस तक जाने से रोकने के लिए सावधानी की आवश्यकता है। सामान्यतः लिटिल मैन कंप्यूटर इसे एक इंस्ट्रक्शन के रूप में मानने का प्रयास करता है। कोई भी मेलबॉक्स इंस्ट्रक्शन लिखकर इसका लाभ उठा सकता है, जिसे मॉडिफाई कोड बनाने के लिए एक कोड के रूप में समझा जा सकता है। एलएमसी का उपयोग करने के लिए उपयोगकर्ता डेटा को मेलबॉक्स में लोड करता है और फिर मेमोरी एड्रेस शून्य पर संग्रहीत इंस्ट्रक्शन से प्रारम्भ करके कार्यान्वयन करने के लिए लिटिल मैन को संकेत देता है। प्रोग्राम काउंटर को शून्य पर रीसेट करने से प्रोग्राम प्रभावी रूप से पुनः प्रारम्भ हो जाता है। यद्यपि यह संभावित रूप से भिन्न स्थिति मे हो सकता है।
कार्यान्वयन साइकल
किसी प्रोग्राम को निष्पादित करने के लिए लिटिल मैन कंप्यूटर इन वेरिएबलणों का अनुसरण करता है:
- मेलबॉक्स संख्या के लिए प्रोग्राम काउंटर की जांच करें जिसमें प्रोग्राम इंस्ट्रक्शन सम्मिलित होते है।
- उस संख्या वाले मेलबॉक्स से इंस्ट्रक्शन प्राप्त करें जिसमे प्रत्येक इंस्ट्रक्शन के दो फ़ील्ड ऑपकोड (संचालन करने के लिए ऑपरेशन को इंगित करता है) और एड्रेस फ़ील्ड (यह दर्शाता है कि ऑपरेशन करने के लिए डेटा कहां है) होते हैं।
- प्रोग्राम काउंटर बढ़ाएँ जिसमे अगले इंस्ट्रक्शन की मेलबॉक्स संख्या सम्मिलित होती है।
- इंस्ट्रक्शन को डिकोड करें। यदि इंस्ट्रक्शन किसी अन्य मेलबॉक्स में संग्रहीत डेटा का उपयोग करता है तो उस डेटा के लिए मेलबॉक्स संख्या को खोजने के लिए एड्रेस फ़ील्ड का उपयोग करें जिस पर यह कार्य किया जा सकता है। उदाहरण के लिए 'मेलबॉक्स संख्या 42 से डेटा प्राप्त करें।
- फेच संख्या 4 में निर्धारित एड्रेस के साथ इनपुट एक्यूमुलेटर या मेलबॉक्स से डेटा प्राप्त करें।
- दिए गए ऑपकोड के आधार पर इंस्ट्रक्शन को कार्यान्वित करें।
- फेच संख्या 4 में निर्धारित एड्रेस के साथ परिणाम को आउटपुट, एक्यूमुलेटर या मेलबॉक्स में संग्रहीत करें।
- साइकल या हाल्ट को दोहराने के लिए प्रोग्राम काउंटर पर वापस जाए।
कमांड
एलएमसी बाइनरी प्रोसेसर की वास्तविक कार्यप्रणाली को दर्शाता है। जिसकी डेसीमल संख्याओं की सरलता को उन छात्रों के लिए कॉम्प्लेक्सिटी समस्या को कम करने के लिए चुना गया था जो बाइनरी/हेक्साडेसिमल में कार्य करने में सहज (कम्फ़र्टेबल) नहीं हो सकते थे।
निर्देश (इंस्ट्रक्शन)
कुछ एलएमसी सिमुलेटरों को प्रत्यक्ष रूप से 3 डिजिट के न्यूमेरिक कोड इंस्ट्रक्शन का उपयोग करके प्रोग्राम किया जाता है और कुछ एलएमसी सिमुलेटर 3 डिजिट वाले मनेमोनिक्स कोड और लेबल का उपयोग करते हैं। किसी भी स्थिति में समझ को सरल बनाने के लिए इंस्ट्रक्शन (सामान्यतः लगभग दस इंस्ट्रक्शन) सीमित होते है। यदि एलएमसी मनेमोनिक्स कोड और लेबल का उपयोग करता है तो प्रोग्राम असेंबल होने पर इन्हें 3 डिजिट के न्यूमेरिक कोड इंस्ट्रक्शन में परिवर्तित कर दिया जाता है।
नीचे दी गई तालिका एक विशिष्ट न्यूमेरिक इंस्ट्रक्शन कोड और एक्विवलेंट मनेमोनिक कोड प्रदर्शित करती है।
न्यूमेरिक कोड | मनेमोनिक कोड | इंस्ट्रक्शन | विवरण |
---|---|---|---|
1xx | एडीडी | एडीडी | मेलबॉक्स xx में संग्रहीत मान को वर्तमान में एक्यूमुलेटर पर जो भी मान है, उसमें जोड़ें।
|
2xx | एसयूबी | सब्ट्रैक्ट | एक्यूमुलेटर पर वर्तमान में जो भी मान है, उसमें से मेलबॉक्स xx में संग्रहीत मान घटाएँ।
|
3xx | एसटीए | स्टोर | एक्यूमुलेटर के डेटा को मेलबॉक्स xx (डेस्ट्रकटिव) में संग्रहीत करें।
|
5xx | एलडीए | लोड | मेलबॉक्स xx (नॉन-डेस्ट्रकटिव) से मान लोड करें और इसे एक्यूमुलेटर (डेस्ट्रकटिव) में प्रस्तुत करें। |
6xx | बीआरए | ब्रांच (अनकंडीशनल) | प्रोग्राम काउंटर को दिए गए एड्रेस (मान xx) पर प्रयुक्त करें। अर्थात् मेलबॉक्स xx में यही मान अगला निष्पादित इंस्ट्रक्शन होगा। |
7xx | बीआरजेड | यदि ब्रांच शून्य (कंडीशनल) | यदि एक्यूमुलेटर में मान 000 है, तो प्रोग्राम काउंटर का मान xx प्रयुक्त करें अन्यथा कुछ न करें शून्य रहने दे। ऋणात्मक फ्लैग को ध्यान में रखा गया है या नहीं यह अपरिभाषित है। जब एक सब्ट्रैक्ट एक्यूमुलेटर को अंडरफ्लो करता है, तो यह ऋणात्मक फ्लैग प्रयुक्त किया जाता है जिसके बाद एक्यूमुलेटर अपरिभाषित होता है या संभावित रूप से शून्य होता है, जिससे अंडरफ्लो पर बीआरजेड का कार्य अपरिभाषित हो जाता है। यदि एक्यूमुलेटर शून्य है और ऋणात्मक फ्लैग प्रयुक्त नहीं है तो प्रयुक्त किया गया डेटा ब्रांच में होता है।
|
8xx | बीआरपी | यदि ब्रांच धनात्मक (कंडीशनल) | यदि एक्यूमुलेटर 0 या धनात्मक है, तो प्रोग्राम काउंटर को मान को xx पर प्रयुक्त करें अन्यथा कुछ न करें शून्य रहने दे। चूँकि एलएमसी मेमोरी सेल केवल 0 और 999 के बीच मान रख सकते हैं। यह इंस्ट्रक्शन पूरी तरह से सब्ट्रैक्ट पर अंडरफ्लो द्वारा निर्धारित ऋणात्मक फ्लैग और संभावित रूप से एडीडी (अपरिभाषित) ओवरफ्लो पर निर्भर करता है।
|
901 | आईएनपी | इनपुट | इनबॉक्स पर जाएं, उपयोगकर्ता से डेटा प्राप्त करें और इसे एक्यूमुलेटर में इनपुट करे।
|
902 | ओयूटी | आउटपुट | एक्यूमुलेटर से डेटा को आउटबॉक्स में कॉपी करें।
|
000 | एचएलटी/सीओबी | हॉल्ट/कॉफी ब्रेक | कार्य करना बंद करें/प्रोग्राम समाप्त करें। |
डीएटी | डाटा | यह एक असेंबलर इंस्ट्रक्शन है जो बस-डेटा को अगले उपलब्ध मेलबॉक्स में लोड करता है। वैरिएबल घोषित करने के लिए डीएटी का उपयोग लेबल के संयोजन में भी किया जा सकता है। उदाहरण के लिए डीएटी 984 मान 984 को डीएटी इंस्ट्रक्शन के एड्रेस पर एक मेलबॉक्स में संग्रहीत करता है। |
उदाहरण
न्यूमेरिक इंस्ट्रक्शन कोड का उपयोग करना
यह प्रोग्राम (इंस्ट्रक्शन 901 से इंस्ट्रक्शन 000 तक) केवल न्यूमेरिक कोड का उपयोग करके लिखा गया है। प्रोग्राम इनपुट के रूप में दो संख्या लेता है और आउटपुट देता है। ध्यान दें कि यह कार्यान्वयन मेलबॉक्स 00 पर प्रारम्भ होता है और मेलबॉक्स 07 पर समाप्त होता है। न्यूमेरिक इंस्ट्रक्शन कोड का उपयोग करके एलएमसी प्रोग्रामिंग मे होने वाली कमी पर नीचे वेरिएबल्चा की गई है।
मेलबॉक्स | न्यूमेरिक कोड | ऑपरेशन | टिप्पणी |
---|---|---|---|
00 | 901 | एक्यूमुलेटर = इनबॉक्स | पहली संख्या को कैलकुलेटर में प्रस्तुत करें (वहां जो कुछ भी था उसे मिटा दें) |
01 | 308 | मेलबॉक्स 08 = एक्यूमुलेटर | कैलकुलेटर का वर्तमान मान संग्रहीत करें (अगले वेरिएबलण की तैयारी के लिए...) |
02 | 901 | एक्यूमुलेटर = इनबॉक्स | दूसरी संख्या को कैलकुलेटर में प्रस्तुत करें (वहां जो कुछ भी था उसे मिटा दें) |
03 | 309 | मेलबॉक्स 09 = एक्यूमुलेटर | कैलकुलेटर का वर्तमान मान संग्रहीत करें (फिर से, अगले वेरिएबलण की तैयारी के लिए...) |
04 | 508 | एक्यूमुलेटर = मेलबॉक्स 08 | (अब दोनों इनपुट मान मेलबॉक्स 08 और 09 में संग्रहीत हैं...)
पहले मान को वापस कैलकुलेटर में लोड करें (वहां जो कुछ भी था उसे मिटा दें) |
05 | 209 | एक्यूमुलेटर = एक्यूमुलेटर - मेलबॉक्स 09 | कैलकुलेटर के वर्तमान मान से दूसरी संख्या घटाएं (जो कि पहली संख्या पर मान प्रयुक्त किया गया था) |
06 | 902 | आउटबॉक्स = एक्यूमुलेटर | कैलकुलेटर के परिणाम को आउटबॉक्स में आउटपुट करें। |
07 | 000 | हॉल्ट | एचएएलटी एलएमसी |
मनेमोनिक्स और लेबल का उपयोग करना
असेंबली लैंग्वेज एक निम्न-स्तरीय प्रोग्रामिंग लैंग्वेज है जो न्यूमेरिक इंस्ट्रक्शन कोड के अतिरिक्त मनेमोनिक्स और लेबल का उपयोग करती है। यद्यपि लिटिल मैन कंप्यूटर केवल मनेमोनिक्स के एक सीमित समूह का उपयोग करता है तो प्रत्येक इंस्ट्रक्शन के लिए एक मनेमोनिक्स कोड का उपयोग करने की सुविधा नीचे दिखाए गए उसी प्रोग्राम की असेंबली लैंग्वेज से स्पष्ट होती है। जिससे प्रोग्रामर को अब अज्ञात न्यूमेरिक कोड को याद रखने की आवश्यकता नहीं है और वह कर सकता है अब अधिक मनेमोनिक्स कोड को एक प्रोग्राम कोड के साथ प्रयोग किया जा सकता है। यदि मनेमोनिक्स एक इंस्ट्रक्शन है जिसमें मेमोरी एड्रेस (या तो एक ब्रांच इंस्ट्रक्शन या डेटा लोड) सम्मिलित है तो मेमोरी एड्रेस को नाम देने के लिए एक लेबल का उपयोग किया जाता है।
INP STA FIRST INP STA SECOND LDA FIRST SUB SECOND OUT HLT FIRST DAT SECOND DAT
लेबल (प्रोग्रामिंग लैंग्वेज)
लेबल के बिना प्रोग्रामर को मेलबॉक्स (मेमोरी) एड्रेसों की मैन्युअल रूप से गणना करने की आवश्यकता होती है। न्यूमेरिक कोड उदाहरण में यदि अंतिम एचएलटी इंस्ट्रक्शन से पहले एक नया इंस्ट्रक्शन डाला जाना था तो वह एचएलटी इंस्ट्रक्शन एड्रेस 07 से एड्रेस 08 पर चला जाता है जिससे एड्रेस लेबल एड्रेस 00 पर प्रारम्भ होता है। मान लीजिए कि उपयोगकर्ता ने पहले इनपुट के रूप में 600 प्रस्तुत किया है तब इंस्ट्रक्शन 308 का अर्थ यह होगा कि यह मान एड्रेस 08 पर संग्रहीत किया जाएगा और 000 (एचएलटी) इंस्ट्रक्शन को डेस्ट्रकटिव कर दिया जाएगा। चूँकि 600 का अर्थ है कि ब्रांच से मेलबॉक्स एड्रेस 00 प्रोग्राम क्लोज्ड होने के आतिरिक्त एक इंडलेस लूप स्टैक हो सकता है।
इस समस्या को हल करने के लिए अधिकांश असेंबली लैंग्वेज (एलएमसी सहित) मनेमोनिक्स को लेबल (प्रोग्रामिंग लैंग्वेज) के साथ जोड़ती हैं। लेबल प्रोग्रामिंग लैंग्वेज एक ऐसा शब्द है जिसका उपयोग एक मेमोरी एड्रेस को नाम देने के लिए किया जाता है जहां एक इंस्ट्रक्शन या डेटा संग्रहीत किया जाता है या एक इंस्ट्रक्शन में उस एड्रेस को संदर्भित करने के लिए उपयोग किया जाता है।
जब कोई प्रोग्राम असेंबल किया जाता है:
- इंस्ट्रक्शन निमोनिक के बाईं ओर एक लेबल प्रोग्रामिंग लैंग्वेज को मेमोरी एड्रेस में परिवर्तित किया जाता है जिसमे इंस्ट्रक्शन या डेटा को लूपस्टार्ट आईएनपी पर संग्रहीत किया जाता है।
- इंस्ट्रक्शन निमोनिक के दाईं ओर एक लेबल प्रोग्रामिंग लैंग्वेज ऊपर उल्लिखित मेमोरी एड्रेस अर्थात बीआरए लूपस्टार्ट का मान लेता है।
- डीएटी स्टेटमेंट के साथ संयुक्त लेबल प्रोग्रामिंग लैंग्वेज एक वेरिएबल के रूप में करता करती है। यह मेमोरी एड्रेस को लेबल प्रोग्रामिंग लैंग्वेज प्रयुक्त करता है क्योकि डेटा डीएटी 1 या संख्या 1 डीएटी पर संग्रहीत है।
असेंबली लैंग्वेज मनेमोनिक्स और लेबल प्रोग्रामिंग लैंग्वेज का उपयोग करती है। यदि अंतिम एचएलटी इंस्ट्रक्शन से पहले एक नया इंस्ट्रक्शन डाला गया था तो FIRST
लेबल वाला एड्रेस अब 08 की अतिरिक्त मेमोरी एड्रेस 09 पर होगा और जब प्रोग्राम को असेंबल किया जाएगा तब STA FIRST
इंस्ट्रक्शन 309 (एसटीए) या 308 (एसटीए 08) में परिवर्तित हो जाएगा।
इसलिए लेबल प्रोग्रामिंग लैंग्वेज का उपयोग किया जाता है:
- किसी ब्रांच इंस्ट्रक्शन के लक्ष्य के रूप में किसी विशेष इंस्ट्रक्शन की पहचान करें।
- नामित वेरिएबल के रूप में एक मेमोरी एड्रेस की पहचान करें (डीएटी का उपयोग करके) और प्रोग्राम द्वारा उपयोग के लिए असेंबली टाइम पर प्रोग्राम में वैकल्पिक रूप से डेटा लोड करें। सामान्यतः यह उपयोग तब तक स्पष्ट नहीं है जब तक कोई यह नहीं मानता कि काउंटर में 1 जोड़ने का कोई तरीका नहीं है। कोई उपयोगकर्ता प्रारम्भ में इनपुट 1 के लिए कह सकता है। लेकिन इसे असेंबली टाइम डीएटी 1 का उपयोग करके लोड किया जा सकता है।
उदाहरण
नीचे दिया गया प्रोग्राम उपयोगकर्ता से इनपुट लेगा और शून्य तक गणना करेगा।
INP OUT // Initialize आउटपुट LOOP बीआरजेड QUIT // Label this memory एडीडीress as LOOP. If the एक्यूमुलेटर value is 0, jump to the memory एडीडीress labeled QUIT एसयूबी ONE // सब्ट्रैक्ट the value स्टोरd at एडीडीress ONE from the एक्यूमुलेटर OUT BRA LOOP // Jump (unकंडीशनलly) to the memory एडीडीress labeled LOOP QUIT HLT // Label this memory एडीडीress as QUIT ONE डीएटी 1 // स्टोर the value 1 in this memory एडीडीress, and label it ONE (variable declaration)
नीचे दिया गया प्रोग्राम उपयोगकर्ता से इनपुट लेगा और उसे आउटपुट देगा और फिर दोहराएगा जिससे शून्य प्राप्त होने से प्रोग्राम समाप्त हो जाएगा।
ध्यान दें: जिस इनपुट का आउटपुट 999 से अधिक है उसका एलएमसी 3 डिजिट की संख्या सीमा के कारण अपरिभाषित रहता है।
START LDA ZERO // Initialize for multiple program run STA RESULT STA COUNT INP // User provided इनपुट बीआरजेड END // Branch to program END if इनपुट = 0 STA VALUE // स्टोर इनपुट as VALUE LOOP LDA RESULT // Load the RESULT एडीडी VALUE // एडीडी VALUE, the user provided इनपुट, to RESULT STA RESULT // स्टोर the new RESULT LDA COUNT // Load the COUNT एडीडी ONE // एडीडी ONE to the COUNT STA COUNT // स्टोर the new COUNT एसयूबी VALUE // सब्ट्रैक्ट the user provided इनपुट VALUE from COUNT बीआरजेड ENDLOOP // If zero (VALUE has been एडीडीed to RESULT by VALUE times), branch to ENDLOOP BRA LOOP // Branch to LOOP to continue एडीडीing VALUE to RESULT ENDLOOP LDA RESULT // Load RESULT OUT // आउटपुट RESULT BRA START // Branch to the START to initialize and get another इनपुट VALUE END HLT // HALT - a zero was entered so done! RESULT डीएटी // Computed result (defaults to 0) COUNT डीएटी // Counter (defaults to 0) ONE डीएटी 1 // Constant, value of 1 VALUE डीएटी // User provided इनपुट, the value to be squared (defaults to 0) ZERO डीएटी // Constant, value of 0 (defaults to 0)
ध्यान दें: यदि डीएटी स्टेटमेंट के बाद कोई डेटा नहीं है तो डिफ़ॉल्ट मान 0 मेमोरी एड्रेस में संग्रहीत होता है।
उपरोक्त उदाहरण में BRZ ENDLOOP
अपरिभाषित होता है, क्योंकि COUNT-VALUE
ऋणात्मक हो सकती है, जिसके बाद एक्यूमुलेटर मान अपरिभाषित होता है। जिसके परिणामस्वरूप बीआरजेड शाखाबद्ध और एक्यूमुलेटर शून्य हो हो सकता है। जिससे कोड को स्पेसिफिकेशन के लिए कम्पेटिबल या परिवर्तित किया जा सकता है।
... LDA COUNT // Load the COUNT एडीडी ONE // एडीडी ONE to the COUNT STA COUNT // स्टोर the new COUNT एसयूबी VALUE // सब्ट्रैक्ट the user provided इनपुट VALUE from COUNT बीआरजेड ENDLOOP // If zero (VALUE has been एडीडीed to RESULT by VALUE times), branch to ENDLOOP ...
निम्नलिखित संस्करण के साथ COUNT-VALUE
के अतिरिक्त VALUE-COUNT
का मूल्यांकन किया जाता है क्योकि यह सुनिश्चित करता है कि एक्यूमुलेटर कभी भी अंडरफ्लो न हो:
... LDA COUNT // Load the COUNT एडीडी ONE // एडीडी ONE to the COUNT STA COUNT // स्टोर the new COUNT LDA VALUE // Load the VALUE एसयूबी COUNT // सब्ट्रैक्ट COUNT from the user provided इनपुट VALUE बीआरजेड ENDLOOP // If zero (VALUE has been एडीडीed to RESULT by VALUE times), branch to ENDLOOP ...
इसका एक अन्य उदाहरण क्विन (कंप्यूटिंग) है, जो अपने स्वयं के मशीन कोड को प्रिंट कर करता है। प्रिंट-सोर्स असंभव होता है क्योंकि टेक्स्ट को आउटपुट नहीं किया जा सकता है:
LOAD LDA 0 // Load position 0 into the एक्यूमुलेटर. This line will be modified on each loop to load the next lines into the एक्यूमुलेटर OUT // आउटपुट the एक्यूमुलेटर's value. The एक्यूमुलेटर's value will be the line that was just loaded एसयूबी ONE // सब्ट्रैक्ट 1 from the value in the एक्यूमुलेटर. This is so we can do the बीआरजेड in the next step to see if we are on the last line in the program बीआरजेड ONE // If the previous सब्ट्रैक्टion has made the एक्यूमुलेटर 0 (which means we had the value 001 in the एक्यूमुलेटर), then branch to position ONE LDA LOAD // Load the LOAD position into the एक्यूमुलेटर, this is in preparation to increment the एडीडीress digits for this position एडीडी ONE // Increment the position digits for the LOAD line. The value currently in the एक्यूमुलेटर would, if read as an instruction, load the next line into the एक्यूमुलेटर, compared to the last line loaded STA LOAD // स्टोर the newly incremented LOAD line back in the LOAD position BRA LOAD // Return to the beginning of the loop ONE डीएटी 1 // The variable ONE. If read as an instruction, this will be interpreted as HLT/COB and will end the program
यह क्विन एसएमसी का उपयोग करके कार्य करता है। क्योकि 0 को प्रत्येक इटेरशन में 1 से बढ़ाया जाता है और उस लाइन के कोड का आउटपुट किया जाता है जब तक कि वह जो कोड आउटपुट कर रहा है वह 1 न जाए और जिस पॉइंट पर मान 1 स्थिति होता है। वहाँ 1 का मान ऑपकोड के रूप में 0 होता है। इसलिए इसे HALT/COB
इंस्ट्रक्शन के रूप में समझा जाता है।
यह भी देखें
- कार्डबोर्ड इलुस्ट्रेटिव ऐड कम्प्यूटेशन (एक अन्य निर्देशात्मक मॉडल)
- टीआईएस-100 (वीडियो गेम)
- ह्यूमन रिसोर्स मशीन (एक कंप्यूटर गेम जो एलएमसी से प्रभावित है।)
- डब्लूडीआर पेपर कंप्यूटर
- डिजी-कॉम्प-I
संदर्भ
- ↑ "लिटिल मैन कंप्यूटर". Illinois State University. May 1, 2000. Archived from the original on February 27, 2009. Retrieved March 8, 2009.
- ↑ Yurcik, W.; Osborne, H. (2001). "A crowd of Little Man Computers: Visual computer simulator teaching tools". Proceedings of the 2001 Winter Simulation Conference (Cat. No.01CH37304). Vol. 2. p. 1632. doi:10.1109/WSC.2001.977496. ISBN 0-7803-7307-3. S2CID 18907923.
- ↑ Yurcik, W.; Brumbaugh, L. (2001). "A web-based little man computer simulator". कंप्यूटर विज्ञान शिक्षा पर बत्तीसवें SIGCSE तकनीकी संगोष्ठी की कार्यवाही - SIGCSE '01. p. 204. doi:10.1145/364447.364585. ISBN 1581133294. S2CID 14794750.
- ↑ Osborne, H.; Yurcik, W. (2002). "The educational range of visual simulations of the Little Man Computer architecture paradigm". 32nd Annual Frontiers in Education. pp. S4G–S19. doi:10.1109/FIE.2002.1158742. ISBN 0-7803-7444-4. S2CID 10324295.
बाहरी संबंध
- Richard J. Povinelli:Teaching:Introduction to Computer Hardware and Software:Little Man Computer
- The "Little Man" Computer
सिमुलेटर
ऑनलाइन
- पॉल हैंकिन का एलएमसी सिम्युलेटर
- 101computing द्वारा
- पी. ब्रिंकमीयर का एलएमसी सिम्युलेटर
- वेलिंगबोरो एलएमसी सिम्युलेटर
- पीटर हिगिन्सन का एलएमसी सिम्युलेटर
श्रेणी:उदाहरण कोड वाले लेख
श्रेणी:शैक्षिक सार मशीनें
श्रेणी:1965 में कंप्यूटर से संबंधित परिचय