Hack computer
हैक कंप्यूटर एक सैद्धांतिक कंप्यूटर डिजाइन है जिसे नोम निसान और शिमोन शॉकेन द्वारा बनाया गया है और उनकी पुस्तक, द एलिमेंट्स ऑफ कम्प्यूटिंग सिस्टम्सः बिल्डिंग ए मॉडर्न कंप्यूटर फ्रॉम फर्स्ट प्रिंसिपल्स में वर्णित है। "आधुनिक" शब्द का उपयोग करते हुए, लेखक एक डिजिटल, द्विआधारी मशीन का उल्लेख करते हैं जिसे वॉन न्यूमैन वास्तुकला मॉडल के अनुसार बनाया गया है। हैक कंप्यूटर का उद्देश्य कंप्यूटर संगठन और वास्तुकला में एक बुनियादी, लेकिन व्यापक पाठ्यक्रम के एक भाग के रूप में एक हार्डवेयर सिम्युलेटर अनुप्रयोग में आभासी निर्माण के लिए है। ऐसा ही एक पाठ्यक्रम, जो लेखकों द्वारा बनाया गया है और दो भागों में वितरित किया गया है, एक बड़े पैमाने पर खुले ऑनलाइन पाठ्यक्रम (एम. ओ. ओ. सी.) के रूप में स्वतंत्र रूप से उपलब्ध है जिसका नाम है बिल्ड ए मॉडर्न कंप्यूटर फ्रॉम फर्स्ट प्रिंसिपल्सः फ्रॉम नंद टू टेट्रिस। पाठ्यक्रम में शामिल बारह परियोजनाओं में, शिक्षार्थी दो इनपुट नंद गेट के साथ शुरू करते हैं और एक पूरी तरह से परिचालन आभासी कंप्यूटर के साथ समाप्त होते हैं, जिसमें हार्डवेयर (मेमोरी और सीपीयू) और सॉफ्टवेयर (असेंबलर, वीएम, जावा जैसी प्रोग्रामिंग भाषा और ओएस) दोनों शामिल हैं। कंप्यूटर हार्डवेयर के प्रारंभिक कार्यान्वयन के लिए उपयोग किए जाने वाले हार्डवेयर सिम्युलेटर के अलावा, एक पूर्ण हैक कंप्यूटर एमुलेटर प्रोग्राम और असेंबलर जो पुस्तक और ऑनलाइन पाठ्यक्रम में वर्णित परियोजनाओं का समर्थन करता है, लेखक की वेबसाइट पर भी उपलब्ध है। हार्डवेयर वास्तुकला हैक कंप्यूटर हार्डवेयर में तीन बुनियादी तत्व होते हैं जैसा कि ब्लॉक आरेख में दिखाया गया है। दो अलग-अलग 16-बिट मेमोरी इकाइयाँ और एक केंद्रीय प्रसंस्करण इकाई (CPU) हैं। क्योंकि डेटा को कंप्यूटर द्वारा 16-बिट शब्दों में स्थानांतरित और संसाधित किया जाता है, हैक कंप्यूटर को 16-बिट वास्तुकला के रूप में वर्गीकृत किया जाता है। कंप्यूटर और नामित रॉम के दृष्टिकोण से केवल-पढ़ने योग्य स्मृति के रूप में कार्यान्वित अनुदेश स्मृति, निष्पादन के लिए एकत्रित द्विआधारी प्रोग्राम कोड रखती है। यादृच्छिक अभिगम स्मृति, जिसे रैम कहा जाता है, एक निष्पादन कार्यक्रम के डेटा के लिए भंडारण प्रदान करता है और कंप्यूटर के स्मृति-मानचित्रित आई/ओ तंत्र के लिए सेवाएं और भंडारण क्षेत्र प्रदान करता है। डेटा प्रोसेसिंग और प्रोग्राम नियंत्रण प्रबंधन सीपीयू द्वारा प्रदान किए जाते हैं। तीनों इकाइयाँ समानांतर बसों द्वारा जुड़ी हुई हैं। रोम और रैम इकाइयों के लिए पता बसें (15-बिट), साथ ही डेटा और निर्देश बसें (16-बिट) पूरी तरह से स्वतंत्र हैं। इसलिए, हैक डिजाइन स्मृति इकाइयों और सीपीयू के बीच बस संचार के संबंध में हार्वर्ड वास्तुकला मॉडल का अनुसरण करता है। सभी स्मृति केवल शब्द पता करने योग्य है। रीड-ओनली मेमोरी (रॉम) हैक कंप्यूटर के रॉम मॉड्यूल को व्यक्तिगत रूप से संबोधित करने योग्य, अनुक्रमिक, 16-बिट मेमोरी रजिस्टरों की एक रैखिक सरणी के रूप में प्रस्तुत किया जाता है। पता 0 (0x0000) से शुरू होता है। चूँकि स्मृति तत्व अनुक्रमिक उपकरण हैं, एक प्रणाली घड़ी संकेत सिमुलेशन अनुप्रयोग और कंप्यूटर एमुलेटर अनुप्रयोग द्वारा आपूर्ति की जाती है। रोम पता बस 15 बिट चौड़ी है, इसलिए कार्यक्रम निर्देशों के लिए कुल 32,768 अलग-अलग शब्द उपलब्ध हैं। वर्तमान में सक्रिय शब्द का पता सीपीयू के भीतर एक प्रोग्राम काउंटर रजिस्टर द्वारा प्रदान किया जाता है (नीचे देखें)। एक विशेष घड़ी चक्र में निर्देश पता बस पर रखे गए पते द्वारा पहचाने जाने वाले रॉम मेमोरी रजिस्टर में मूल्य अगले चक्र की शुरुआत में "वर्तमान" निर्देश के रूप में उपलब्ध है। कोई निर्देश रजिस्टर नहीं है; निर्देश वर्तमान में सक्रिय रॉम रजिस्टर से प्रत्येक चक्र में डिकोड किए जाते हैं। रैंडम एक्सेस मेमोरी (आर. ए. एम.) यद्यपि आर. ए. एम. मॉड्यूल को व्यक्तिगत रूप से संबोधित करने योग्य अनुक्रमिक, पढ़ने-लिखने, 16-बिट मेमोरी रजिस्टरों की एक निरंतर रैखिक सरणी के रूप में भी देखा जाता है, लेकिन इसे कार्यात्मक रूप से पता सीमा द्वारा तीन खंडों में व्यवस्थित किया जाता है। 0 (0x000) से 16383 (0x3FF) तक के पते में पारंपरिक 16-बिट, रीड-राइट रजिस्टर होते हैं और ये सामान्य उद्देश्य वाले प्रोग्राम डेटा भंडारण के रूप में उपयोग के लिए होते हैं। 16384 (0x4000) से 24575 (0x5एफएफएफ) तक के पते पर रजिस्टर अनिवार्य रूप से डेटा रैम की तरह हैं, लेकिन उन्हें एक अंतर्निहित स्क्रीन आई/ओ सबसिस्टम द्वारा उपयोग के लिए भी नामित किया गया है। इस श्रेणी के पतों पर लिखे गए डेटा का कंप्यूटर के आभासी 256 x 512 स्क्रीन पर आउटपुट उत्पन्न करने का दुष्प्रभाव होता है (आई/ओ देखें)। यदि किसी प्रोग्राम को स्क्रीन आउटपुट की आवश्यकता नहीं है, तो इस श्रेणी में रजिस्टर का उपयोग सामान्य प्रोग्राम डेटा के लिए किया जा सकता है। 24576 (0x6000) पर रैम पता स्थान में अंतिम पते में एक शब्द रजिस्टर होता है जिसका वर्तमान मूल्य हैक एमुलेटर प्रोग्राम की मेजबानी करने वाले कंप्यूटर से जुड़े कीबोर्ड के आउटपुट द्वारा नियंत्रित होता है। यह कीबोर्ड मेमोरी मैप रजिस्टर केवल पढ़ने के लिए है (आई/ओ देखें)। 24577 (0x6001) से 32767 (0x7FF) की सीमा में डेटा मेमोरी पते अमान्य हैं। चयनित रैम मेमोरी रजिस्टर के अवस्था परिवर्तन भी प्रणाली घड़ी संकेत द्वारा समन्वित किए जाते हैं। केंद्रीय प्रसंस्करण इकाई (सीपीयू) जैसा कि साथ के आरेख में दर्शाया गया है, हैक कंप्यूटर केंद्रीय प्रसंस्करण इकाई (सीपीयू) आंतरिक संरचना के साथ एक एकीकृत तर्क इकाई है। यह सरल, व्यावसायिक रूप से उपलब्ध सीपीयू में पाए जाने वाले कई कार्य प्रदान करता है। सीपीयू का सबसे जटिल तत्व अंकगणितीय तर्क इकाई (एएलयू) है जो कंप्यूटर की कम्प्यूटेशनल कार्यक्षमता प्रदान करता है। एएलयू एक संयुक्त तर्क उपकरण है जिसमें दो 16-बिट इनपुट ऑपरेंड और एक 16-बिट आउटपुट होता है। ऑपरेंड से आउटपुट के रूप में उत्पादित गणना एएलयू को छह क्रमबद्ध, एकल-बिट इनपुट के एक सेट द्वारा निर्दिष्ट की जाती है। एएलयू दो एकल-बिट स्थिति झंडे भी उत्सर्जित करता है जो इंगित करता है कि क्या एक गणना परिणाम शून्य (जेडआर फ्लैग) या नकारात्मक (एनजी फ्लैग) है। सीपीयू में डी और ए लेबल वाले दो 16-बिट रजिस्टर भी होते हैं। डी (डेटा) रजिस्टर एक सामान्य-उद्देश्य वाला रजिस्टर है जिसका वर्तमान मूल्य हमेशा एएलयू एक्स ऑपरेंड की आपूर्ति करता है, हालांकि कुछ निर्देशों के लिए इसके मूल्य को नजरअंदाज कर दिया जाता है। जबकि ए (पता) रजिस्टर एएलयू को वाई ऑपरेंड के रूप में अपना वर्तमान मूल्य भी प्रदान कर सकता है जब एक निर्देश द्वारा निर्देशित किया जाता है, तो इसके मूल्य का उपयोग डेटा मेमोरी एड्रेसिंग के लिए और अनुदेश अनुदेशों के लिए निर्देश मेमोरी में लक्ष्य पते के रूप में भी किया जा सकता है। इस कार्य को सुविधाजनक बनाने के लिए, ए रजिस्टर सीधे एम के रूप में नामित "छद्म-रजिस्टर" से जुड़ा होता है जिसे हार्डवेयर में स्पष्ट रूप से लागू नहीं किया जाता है। इसलिए यह एम रजिस्टर रैम में निहित मूल्य का प्रतिनिधित्व करता है जिसमें ए रजिस्टर में निहित वर्तमान मूल्य का पता होता है। सीपीयू में अंतिम महत्वपूर्ण तत्व प्रोग्राम काउंटर (पीसी) रजिस्टर है। पी. सी. एक 16-बिट द्विआधारी काउंटर है जिसका निम्न 15 बिट निष्पादन के लिए अगले निर्देश की निर्देश स्मृति में पता निर्दिष्ट करता है। जब तक शाखा निर्देश द्वारा अन्यथा निर्देशित नहीं किया जाता है, तब तक पीसी प्रत्येक घड़ी चक्र के अंत में अपना मूल्य बढ़ाता है। सी. पी. यू. में पी. सी. को गैर-अनुक्रमिक मान पर सेट करके, प्रोग्राम नियंत्रण के तहत, कंप्यूटर के निर्देश निष्पादन के क्रम को बदलने का तर्क भी शामिल है। पी. सी. एक एकल-बिट रीसेट इनपुट भी लागू करता है जो पी. सी. मान को 0 (0x0000) तक आरंभ करता है जब इसे लॉजिक 0 से लॉजिक 1 और पीछे की ओर साइकिल किया जाता है। कई वास्तविक सीपीयू डिजाइनों के विपरीत, सीपीयू बाहरी या आंतरिक व्यवधानों को लागू करने या फ़ंक्शन कॉल के लिए समर्थन प्रदान करने के लिए कोई प्रोग्राम सुलभ हार्डवेयर तंत्र नहीं है। बाहरी इनपुट और आउटपुट (आई/ओ) हैक कंप्यूटर आई/ओ के लिए एक स्मृति-मानचित्रित दृष्टिकोण का उपयोग करता है। बिटमैप्ड, एक आभासी 256 x 512 स्क्रीन पर काले और सफेद आउटपुट को 24575 (0x5FF) के माध्यम से डेटा मेमोरी स्थानों 16384 (0x4000) पर वांछित आउटपुट का बिटमैप लिखने से प्रभावित किया जाता है। इस पता सीमा में डेटा शब्दों को कंप्यूटर एमुलेटर की आभासी स्क्रीन पर एकल पिक्सेल की काली/सफेद स्थिति का प्रतिनिधित्व करने वाले प्रत्येक बिट मूल्य के साथ बिट्स की एक रैखिक सरणी के रूप में देखा जाता है। स्क्रीन रैम खंड के पहले मेमोरी पते में शब्द का सबसे कम महत्वपूर्ण अंश स्क्रीन के ऊपरी बाएँ कोने में पिक्सेल को सफेद में सेट करता है यदि यह 0 है और यदि यह 1 है तो काला है। पहले शब्द में अगला सबसे महत्वपूर्ण बिट दाईं ओर अगले पिक्सेल को नियंत्रित करता है, और इसी तरह। स्क्रीन मेमोरी के पहले 32 शब्दों द्वारा पहली 512-पिक्सेल पंक्ति का वर्णन किए जाने के बाद, मानचित्रण को अगली 32 शब्दों के साथ दूसरी पंक्ति के लिए उसी तरह जारी रखा जाता है। कंप्यूटर के बाहरी लॉजिक स्क्रीन रैम मेमोरी मैप सेगमेंट को पढ़ता है और वर्चुअल स्क्रीन को अपडेट करता है। यदि एक कीबोर्ड सीपीयू एमुलेटर प्रोग्राम की मेजबानी करने वाले कंप्यूटर से जुड़ा हुआ है, तो एमुलेटर रैम पते 24576 (0x6000) पर कीबोर्ड रजिस्टर में प्रोग्राम निष्पादन के दौरान दबाए गए कुंजी के अनुरूप एक 16-बिट बिट स्कैन कोड डालता है। यदि कोई कुंजी दबा नहीं है, तो इस रजिस्टर में मान 0 है। एमुलेटर कीबोर्ड को सक्षम/अक्षम करने के लिए एक टॉगल बटन प्रदान करता है। एन्कोडिंग योजना मुद्रण योग्य वर्णों के लिए ए. एस. सी. आई. आई. एन्कोडिंग का बारीकी से पालन करती है। शिफ्ट कुंजी के प्रभाव को आम तौर पर सम्मानित किया जाता है। कोड अन्य कुंजियों के लिए भी प्रदान किए जाते हैं जो अक्सर एक मानक पीसी कीबोर्ड पर मौजूद होती हैं; उदाहरण के लिए, दिशा नियंत्रण कुंजियाँ और एफएन कुंजियाँ। संचालन चक्र सीपीयू और मेमोरी इकाइयों का चरण-वार संचालन एक घड़ी द्वारा नियंत्रित किया जाता है जो हार्डवेयर सिम्युलेटर और कंप्यूटर एमुलेटर प्रोग्राम दोनों के लिए अंतर्निहित है। घड़ी चक्र की शुरुआत में प्रोग्राम काउंटर के वर्तमान मूल्य द्वारा उत्सर्जित रॉम पते पर निर्देश को डिकोड किया जाता है। निर्देश में निर्दिष्ट ए. एल. यू. ऑपरेंड को आवश्यकता पड़ने पर मार्श किया जाता है। निर्दिष्ट गणना ए. एल. यू. द्वारा की जाती है और उपयुक्त स्थिति संकेत निर्धारित किए जाते हैं। गणना परिणाम निर्देश द्वारा निर्दिष्ट के रूप में सहेजा जाता है। अंत में, प्रोग्राम काउंटर को अगले आवश्यक प्रोग्राम निर्देश के मूल्य में अद्यतन किया जाता है। यदि वर्तमान निर्देश द्वारा कोई शाखा निर्दिष्ट नहीं की गई थी, तो पीसी मूल्य बस बढ़ाया जाता है। यदि शाखा निर्दिष्ट की गई थी, तो पीसी को (ए रजिस्टर से) निष्पादित किए जाने वाले अगले निर्देश के पते के साथ लोड किया जाता है। चक्र तब वर्तमान पीसी मूल्य का उपयोग करके दोहराया जाता है। अपने हार्वर्ड स्मृति वास्तुकला मॉडल के कारण, हैक कंप्यूटर को वर्तमान निर्देश को निष्पादित करने और एक एकल, दो-भाग घड़ी चक्र में अगले निर्देश को "लाने" के लिए डिज़ाइन किया गया है। घड़ी की गति हार्डवेयर सिम्युलेटर और सीपीयू एमुलेटर दोनों में एक नियंत्रण तत्व द्वारा भिन्न हो सकती है। हालांकि, चयनित गति से स्वतंत्र, प्रत्येक निर्देश पूरी तरह से एक चक्र में निष्पादित किया जाता है। उपयोगकर्ता किसी कार्यक्रम के माध्यम से एकल-चरण भी कर सकता है। रॉम में लोड किए गए प्रोग्राम का निष्पादन सीपीयू के रीसेट बिट द्वारा नियंत्रित किया जाता है। यदि रीसेट बिट का मान 0 है, तो निष्पादन ऊपर वर्णित संचालन चक्र के अनुसार आगे बढ़ता है। रीसेट बिट को 1 पर सेट करने से पीसी 0 पर सेट हो जाता है। रीसेट बिट मान को शून्य पर वापस सेट करने के बाद पहले निर्देश पर वर्तमान प्रोग्राम का निष्पादन शुरू होता है; हालाँकि, रैम में रीसेट पर किसी भी पिछली गतिविधि के मान शामिल होते हैं। किसी भी प्रकार के व्यवधानों के लिए कोई हार्डवेयर या मशीन भाषा समर्थन नहीं है। डेटा प्रकार रॉम स्मृति में संग्रहीत मूल्यों को वैध हैक मशीन भाषा निर्देशों का प्रतिनिधित्व करना चाहिए जैसा कि निर्देश सेट वास्तुकला अनुभाग में वर्णित है। किसी भी 16-बिट मूल्य को रैम में संग्रहीत किया जा सकता है। रैम में संग्रहीत मूल्य के डेटा प्रकार का अनुमान इसके स्थान और/या एक प्रोग्राम के भीतर इसके उपयोग से लगाया जाता है। प्राथमिक हार्डवेयर समर्थित डेटा प्रकार 16-बिट हस्ताक्षरित पूर्णांक है, जिसे 2 के पूरक प्रारूप में दर्शाया जाता है। अतः हस्ताक्षरित पूर्णांकों की सीमा-32768 से 32767 तक है। रैम में मान के निचले 15 बिट भी एक सूचक के अर्थ में रोम या रैम में एक पते का प्रतिनिधित्व कर सकते हैं। स्क्रीन आई/ओ के लिए निर्धारित रैम मेमोरी रजिस्टरों में मानों के लिए, मान की व्याख्या कंप्यूटर के स्वतंत्र आई/ओ सबसिस्टम द्वारा 256 पंक्ति x 512 कॉलम वर्चुअल स्क्रीन के 16 पिक्सेल मानचित्र के रूप में की जाएगी यदि स्क्रीन "चालू" है। कीबोर्ड मेमोरी में कोड मान को प्रोग्राम के रूप में पढ़ा जा सकता है और एक प्रोग्राम द्वारा उपयोग के लिए व्याख्या की जा सकती है। फ्लोटिंग-पॉइंट प्रकारों के लिए कोई हार्डवेयर समर्थन नहीं है। इंस्ट्रक्शन सेट आर्किटेक्चर (आई. एस. ए.) और मशीन लैंग्वेज हैक कंप्यूटर की इंस्ट्रक्शन सेट आर्किटेक्चर (आई. एस. ए.) और व्युत्पन्न मशीन लैंग्वेज कई अन्य आर्किटेक्चर की तुलना में विरल है। हालाँकि ए. एल. यू. द्वारा गणना को निर्दिष्ट करने के लिए उपयोग किए जाने वाले 6 बिट्स 64 अलग-अलग निर्देशों की अनुमति दे सकते हैं, केवल 18 आधिकारिक तौर पर हैक कंप्यूटर के आई. एस. ए. में लागू किए जाते हैं। चूँकि हैक कंप्यूटर हार्डवेयर में न तो पूर्णांक गुणन (और विभाजन) या कार्य कॉल के लिए प्रत्यक्ष समर्थन है, इसलिए इन कार्यों के लिए आई. एस. ए. में कोई संबंधित मशीन भाषा निर्देश नहीं हैं। हैक मशीन भाषा में केवल दो प्रकार के निर्देश होते हैं, जिनमें से प्रत्येक को 16 द्विआधारी अंकों में कूटबद्ध किया जाता है। ए-निर्देश निर्देश जिनका सबसे महत्वपूर्ण बिट "0" है, उन्हें ए-निर्देश या पता निर्देश कहा जाता है। ए-निर्देश बिट-फील्ड को निम्नानुसार कूटबद्ध किया गया हैः 0b14b13b12b11b10b9b8b7b6b5b4b3b2b1b0 0-ए-निर्देश का सबसे महत्वपूर्ण बिट "0" b14-b0 है-ये बिट दशमलव सीमा 0 से 32767 में एक गैर-नकारात्मक पूर्णांक का द्विआधारी प्रतिनिधित्व प्रदान करते हैं जब इस निर्देश को निष्पादित किया जाता है, तो शेष 15 बिट बाएं-शून्य विस्तारित होते हैं और सीपीयू के ए-रजिस्टर में लोड होते हैं। एक दुष्प्रभाव के रूप में, उस मूल्य द्वारा दर्शाए गए पते वाले रैम रजिस्टर को अगले घड़ी चक्र में बाद में पढ़ने/लिखने की कार्रवाई के लिए सक्षम किया जाता है। अन्य निर्देश प्रकार, जिसे सी-निर्देश (गणना निर्देश) के रूप में जाना जाता है, में सबसे महत्वपूर्ण बिट के रूप में "1" होता है। शेष 15 बिट्स को निर्दिष्ट गणना परिणाम के लिए ऑपरेंड, गणना और भंडारण स्थान को परिभाषित करने के लिए बिट-फील्ड एन्कोडेड किया जाता है। यह निर्देश सबसे हाल के गणना परिणाम के आधार पर एक कार्यक्रम शाखा को भी निर्दिष्ट कर सकता है। सी-निर्देश बिट-फील्ड को निम्नानुसार कूटबद्ध किया गया हैः 1x1x0ac5c4c3c2c1c0d2d1d0j2j1j0 1-सी-निर्देश का सबसे महत्वपूर्ण बिट "1" x1x0 है-इन बिट्स को सीपीयू द्वारा नजरअंदाज कर दिया जाता है और परंपरा के अनुसार, प्रत्येक को हमेशा "1" ए पर सेट किया जाता है-यह बिट एएलयू के "वाई" ऑपरेंड के स्रोत को निर्दिष्ट करता है जब इसका उपयोग गणना सी0-सी5 में किया जाता है-ये छह नियंत्रण बिट्स एएलयू डी2-डी0 द्वारा किए जाने वाले ऑपरेंड और गणना को निर्दिष्ट करते हैं-ये तीन बिट्स वर्तमान को संग्रहीत करने के लिए गंतव्य (ओं) को निर्दिष्ट करते हैं। इन तालिकाओं में, ए वर्तमान में ए-रजिस्टर डी में निहित मूल्य का प्रतिनिधित्व करता है जो वर्तमान में डी-रजिस्टर एम में निहित मूल्य का प्रतिनिधित्व करता है जो वर्तमान में डेटा मेमोरी रजिस्टर में निहित मूल्य का प्रतिनिधित्व करता है जिसका पता ए-रजिस्टर में निहित है; यानी, एम = = रैम [ए] असेंबली भाषा हैक कंप्यूटर में हार्डवेयर प्लेटफॉर्म के लिए प्रोग्राम बनाने के लिए एक पाठ-आधारित असेंबली भाषा है जो हैक कंप्यूटर आईएसए को लागू करता है। हैक असेंबली लैंग्वेज प्रोग्राम को फ़ाइल नाम एक्सटेंशन. "ASM" वाली टेक्स्ट फ़ाइलों में संग्रहीत किया जा सकता है। हैक असेंबली भाषा स्रोत फाइलें मामले के प्रति संवेदनशील होती हैं। पाठ की प्रत्येक पंक्ति में निम्नलिखित तत्वों में से एक होता हैः खाली पंक्ति टिप्पणी लेबल घोषणा (वैकल्पिक एंड-ऑफ-लाइन टिप्पणी के साथ) ए-निर्देश (वैकल्पिक एंड-ऑफ-लाइन टिप्पणी के साथ) सी-निर्देश (वैकल्पिक एंड-ऑफ-लाइन टिप्पणी के साथ) इनमें से प्रत्येक पंक्ति प्रकार का एक विशिष्ट वाक्यविन्यास होता है और इसमें पूर्वनिर्धारित या उपयोगकर्ता परिभाषित प्रतीक या संख्यात्मक स्थिरांक हो सकते हैं। खाली पंक्तियों और टिप्पणियों को असेंबलर द्वारा नजरअंदाज कर दिया जाता है। लेबल घोषणाएँ, ए-निर्देश और सी-निर्देश, जैसा कि नीचे परिभाषित किया गया है, में कोई भी आंतरिक सफेद-स्थान वर्ण शामिल नहीं हो सकते हैं, हालाँकि सफेद स्थान के आगे या पीछे जाने की अनुमति है (और अनदेखा किया जाता है)। टिप्पणी दो-वर्ण अनुक्रम "//" से शुरू होने वाला कोई भी पाठ एक टिप्पणी है। टिप्पणियां अकेले एक स्रोत कोड पंक्ति पर दिखाई दे सकती हैं, या किसी अन्य कार्यक्रम स्रोत पंक्ति के अंत में भी रखी जा सकती हैं। पंक्ति के अंत तक टिप्पणी पहचानकर्ता चरित्र अनुक्रम का पालन करने वाले सभी पाठ को असेंबलर द्वारा पूरी तरह से नजरअंदाज कर दिया जाता है; परिणामस्वरूप, वे कोई मशीन कोड नहीं बनाते हैं। प्रतीक और संख्यात्मक स्थिरांक हैक असेंबली भाषा विभिन्न विशिष्ट उद्देश्यों की संख्या के लिए वर्णानुक्रमिक प्रतीकों के उपयोग की अनुमति देती है। एक प्रतीक वर्णमाला (ऊपरी और निचला मामला) या संख्यात्मक अंकों का कोई भी अनुक्रम हो सकता है। प्रतीकों में निम्नलिखित वर्णों में से कोई भी हो सकता हैः पट्टी के नीचे ("_"), अवधि ("."), डॉलर चिह्न ("$"), और कोलन (":")। प्रतीक एक अंकीय वर्ण से शुरू नहीं हो सकते हैं। प्रतीक मामले के प्रति संवेदनशील होते हैं। उपयोगकर्ता परिभाषित प्रतीकों का उपयोग चर नाम और लेबल बनाने के लिए किया जाता है (नीचे देखें)। हैक असेंबली लैंग्वेज असेंबलर असेंबली लैंग्वेज प्रोग्राम में उपयोग के लिए कुछ पूर्वनिर्धारित प्रतीकों को पहचानता है। प्रतीक R0, R1,., R15 क्रमशः 0 से 15 तक के पूर्णांकों से बंधे हैं। ये प्रतीक सामान्य प्रयोजन रजिस्टरों का प्रतिनिधित्व करने के लिए हैं और प्रतीक मूल्य इसलिए डेटा मेमोरी पते 0 से 15 का प्रतिनिधित्व करते हैं। पूर्वनिर्धारित प्रतीक स्क्रीन और के. बी. डी. को मेमोरी-मैप किए गए वर्चुअल स्क्रीन आउटपुट (16384) और कीबोर्ड इनपुट (24756) की शुरुआत के डेटा मेमोरी पते का प्रतिनिधित्व करने के लिए भी निर्दिष्ट किया गया है। कुछ अन्य प्रतीक (एस. पी., एल. सी. एल., ए. आर. जी., यह और वह) हैं जिनका उपयोग ऑपरेटिंग सिस्टम सॉफ्टवेयर स्टैक के निर्माण में किया जाता है। दशमलव (0-9) अंकों की एक स्ट्रिंग का उपयोग 0 से 32,767 की सीमा में एक गैर-नकारात्मक, दशमलव स्थिरांक का प्रतिनिधित्व करने के लिए किया जा सकता है। ऋणात्मक संख्या को इंगित करने के लिए ऋणात्मक चिह्न का उपयोग करने की अनुमति नहीं है। द्विआधारी या अष्टक प्रतिनिधित्व समर्थित नहीं है। चर उपयोगकर्ता परिभाषित प्रतीकों को चर का प्रतिनिधित्व करने के लिए एक असेंबली भाषा कार्यक्रम में बनाया जा सकता है; यानी, एक नामित रैम रजिस्टर। प्रतीक असेंबली में असेंबलर द्वारा चुने गए रैम पते से बंधा होता है। इसलिए, विधानसभा भाषा स्रोत कोड में दिखाई देते समय चर को पते के रूप में माना जाना चाहिए। चर को विधानसभा भाषा स्रोत कोड में निहित रूप से परिभाषित किया जाता है जब उन्हें पहली बार ए-निर्देश में संदर्भित किया जाता है। जब स्रोत कोड को असेंबलर द्वारा संसाधित किया जाता है, तो चर प्रतीक पता 16 की शुरुआत में एक अद्वितीय सकारात्मक पूर्णांक मूल्य से बंधा होता है। पते स्रोत कोड में उनकी पहली उपस्थिति के क्रम में क्रमिक रूप से परिवर्तनशील प्रतीकों से बंधे होते हैं। परंपरा के अनुसार, प्रोग्राम चर की पहचान करने वाले उपयोगकर्ता-परिभाषित प्रतीकों को सभी छोटे अक्षरों में लिखा जाता है। लेबल लेबल बाएँ "(" और दाएँ ")" कोष्ठक "द्वारा सीमांकित प्रतीक हैं। उन्हें एक अलग स्रोत प्रोग्राम लाइन पर परिभाषित किया गया है और स्रोत कोड में अगले निर्देश के निर्देश स्मृति स्थान के पते के लिए असेंबलर द्वारा बाध्य हैं। लेबल को केवल एक बार परिभाषित किया जा सकता है, लेकिन उन्हें कार्यक्रम के भीतर कहीं भी कई बार उपयोग किया जा सकता है, यहां तक कि उस रेखा से पहले भी जिस पर उन्हें परिभाषित किया गया है। परंपरा के अनुसार, लेबल को ऑल-कैप में व्यक्त किया जाता है। इनका उपयोग शाखा सी-निर्देशों के लक्ष्य पते की पहचान करने के लिए किया जाता है। ए-निर्देश ए-निर्देश में वाक्यविन्यास "@xxxx" होता है, जहाँ XXX या तो 0 से 32767 की सीमा में एक संख्यात्मक दशमलव स्थिरांक है, एक लेबल, या एक चर (पूर्वनिर्धारित या उपयोगकर्ता परिभाषित) है। जब निष्पादित किया जाता है, तो यह निर्देश ए रजिस्टर और एम छद्म-रजिस्टर के मूल्य को "XXX" द्वारा दर्शाए गए 15-बिट द्विआधारी मूल्य पर सेट करता है। 15-बिट मान ए रजिस्टर में 16-बिट तक विस्तारित लेफ्ट-जीरो है। ए-निर्देश का उपयोग तीन उद्देश्यों में से एक के लिए किया जा सकता है। प्रोग्राम नियंत्रण के तहत कंप्यूटर में एक (गैर-नकारात्मक) संख्यात्मक मान पेश करने का यह एकमात्र साधन है; अर्थात, इसका उपयोग प्रोग्राम स्थिरांक बनाने के लिए किया जा सकता है। दूसरा, इसका उपयोग सी-निर्देश द्वारा बाद के संदर्भ के लिए एम छद्म-रजिस्टर तंत्र का उपयोग करके एक रैम मेमोरी स्थान निर्दिष्ट करने के लिए किया जाता है। अंत में, एक सी-निर्देश जो एक शाखा को निर्दिष्ट करता है, शाखा लक्ष्य पते के रूप में ए रजिस्टर के वर्तमान मूल्य का उपयोग करता है। ए-निर्देश का उपयोग शाखा निर्देश से पहले उस लक्ष्य पते को निर्धारित करने के लिए किया जाता है, आमतौर पर एक लेबल के संदर्भ में। सी-निर्देश सी-निर्देश ए. एल. यू. संगणना इंजन और हैक कंप्यूटर की कार्यक्रम प्रवाह नियंत्रण क्षमताओं को निर्देशित करते हैं। निर्देश वाक्यविन्यास को तीन क्षेत्रों द्वारा परिभाषित किया गया है, जिन्हें "कॉम्प", "डेस्ट" और "जंप" कहा जाता है। प्रत्येक सी-निर्देश में कम्प क्षेत्र की आवश्यकता होती है। सी-निर्देश वाक्यविन्यास "डेस्ट = कॉम्प; जंप" है। "=" और ";" वर्णों का उपयोग निर्देश के क्षेत्रों को सीमित करने के लिए किया जाता है। यदि डेस्ट फ़ील्ड का उपयोग नहीं किया जाता है, तो "=" वर्ण को हटा दिया जाता है। यदि कूद क्षेत्र का उपयोग नहीं किया जाता है, तो ";" वर्ण को हटा दिया जाता है। सी-निर्देश कोई आंतरिक स्थान की अनुमति नहीं देता है। कम्प फ़ील्ड उपरोक्त तालिका में परिभाषित 28 प्रलेखित स्मृति संकेतों में से एक होना चाहिए। इन कोडों को अलग-अलग इकाइयाँ माना जाता है; उन्हें बिना किसी आंतरिक स्थान के सभी कैप्स में व्यक्त किया जाना चाहिए। यह ध्यान दिया जाता है कि 6 ए. एल. यू. नियंत्रण बिट्स संभावित रूप से 64 कम्प्यूटेशनल कार्यों को निर्दिष्ट कर सकते हैं; हालाँकि, तालिका में प्रस्तुत केवल 18 को आधिकारिक तौर पर असेंबलर द्वारा मान्यता के लिए प्रलेखित किया जाता है। निर्दिष्ट गणना के परिणाम को संग्रहीत करने के लिए एक या अधिक स्थानों को निर्दिष्ट करने के लिए गंतव्य क्षेत्र का उपयोग किया जा सकता है। यदि इस क्षेत्र को "=" परिसीमक के साथ छोड़ दिया जाता है, तो संगणित मूल्य संग्रहीत नहीं किया जाता है। अनुमत भंडारण स्थान संयोजन ऊपर दी गई तालिका में परिभाषित स्मृति संकेतों द्वारा निर्दिष्ट किए गए हैं। कूद क्षेत्र का उपयोग निष्पादित किए जाने वाले अगले निर्देश के रोम में पते को निर्दिष्ट करने के लिए किया जा सकता है। यदि क्षेत्र को ";" परिसीमक के साथ छोड़ दिया जाता है, तो वर्तमान निर्देश के तुरंत बाद निर्देश के साथ निष्पादन जारी रहता है। शाखा पता लक्ष्य, रोम में, ए रजिस्टर के वर्तमान मूल्य द्वारा प्रदान किया जाता है यदि निर्दिष्ट शाखा शर्त संतुष्ट होती है। यदि शाखा शर्त विफल हो जाती है, तो ROM में अगले निर्देश के साथ निष्पादन जारी रहता है। वर्तमान गणना के मूल्य के आधार पर छह अलग-अलग तुलनाओं के लिए स्मृति संकेत प्रदान किए जाते हैं। इसके अतिरिक्त, सातवें विकल्प के रूप में एक बिना शर्त शाखा प्रदान की जाती है। क्योंकि कॉम्प क्षेत्र की आपूर्ति हमेशा की जानी चाहिए, भले ही बिना शर्त शाखा के लिए मूल्य की आवश्यकता न हो, इस निर्देश का वाक्यविन्यास "0; जे. एम. पी". के रूप में दिया गया है। समर्थित शाखा शर्तों को उपरोक्त तालिका में निर्दिष्ट किया गया है। असेंबलर हैक कंप्यूटर का समर्थन करने वाले स्वतंत्र रूप से उपलब्ध सॉफ्टवेयर में एक कमांड लाइन असेंबलर अनुप्रयोग शामिल है। असेंबलर हैक असेंबली लैंग्वेज सोर्स टाइल्स (*. ए. एस. एम.) पढ़ता है और हैक मशीन लैंग्वेज आउटपुट फाइलों (*. hack) का उत्पादन करता है। मशीन भाषा फ़ाइल भी एक पाठ फ़ाइल है। इस फ़ाइल की प्रत्येक पंक्ति द्विआधारी अंकों की एक 16-वर्ण स्ट्रिंग है जो "इंस्ट्रक्शन सेट आर्किटेक्चर (आईएसए) और मशीन लैंग्वेज" अनुभाग में वर्णित विनिर्देश के अनुसार स्रोत पाठ फ़ाइल की प्रत्येक संबंधित निष्पादन योग्य पंक्ति के एन्कोडिंग का प्रतिनिधित्व करती है। बनाई गई फ़ाइल को एमुलेटर यूजर इंटरफेस द्वारा प्रदान की गई सुविधा द्वारा हैक कंप्यूटर एमुलेटर में लोड किया जा सकता है। निम्नलिखित असेंबली भाषा कार्यक्रम हैक असेंबली भाषा में लिखा गया एक एनोटेटेड उदाहरण कार्यक्रम है। यह प्रोग्राम पहले 100 लगातार पूर्णांकों को जोड़ता है और गणना के परिणाम को उपयोगकर्ता-परिभाषित चर में रखता है जिसे "योग" कहा जाता है। यह पुनरावृत्ति के लिए एक "जबकि" लूप निर्माण को लागू करता है, हालांकि पूर्णांक मान 1 से 100 तक होता है और प्रत्येक पूर्णांक को "योग" चर में जोड़ता है। उपयोगकर्ता-परिभाषित चर "सी. एन. टी". लूप के माध्यम से वर्तमान पूर्णांक मूल्य को बनाए रखता है। यह कार्यक्रम स्मृति-मानचित्रित आई/ओ को छोड़कर हैक कंप्यूटर की "प्रलेखित" असेंबली भाषा क्षमताओं की सभी विशेषताओं को दर्शाता है। हैक असेंबली भाषा स्रोत फ़ाइल की सामग्री को बोल्ड फ़ॉन्ट में दूसरे कॉलम में दिखाया गया है। पंक्ति संख्याएँ निम्नलिखित चर्चा में संदर्भ के लिए प्रदान की गई हैं लेकिन स्रोत कोड में दिखाई नहीं देती हैं। असेंबलर द्वारा उत्पादित हैक मशीन कोड को पिछले कॉलम में निर्धारित रोम पते के साथ अंतिम कॉलम में दिखाया गया है। ध्यान दें कि पूर्ण-पंक्ति टिप्पणियाँ, खाली पंक्तियाँ और लेबल परिभाषा कथन कोई मशीन भाषा कोड उत्पन्न नहीं करते हैं। इसके अलावा, प्रत्येक पंक्ति के अंत में दी गई टिप्पणियों में एक असेंबली भाषा निर्देश होता है जिसे असेंबलर द्वारा नजरअंदाज कर दिया जाता है। असेंबलर आउटपुट, जो अंतिम कॉलम में दिखाया गया है, 16 द्विआधारी वर्णों की एक पाठ स्ट्रिंग है, न कि 16-बिट द्विआधारी पूर्णांक प्रतिनिधित्व। ध्यान दें कि निर्देश अनुक्रम ए-निर्देश, सी-निर्देश, ए-निर्देश, सी-निर्देश के पैटर्न का पालन करता है। यह हैक असेंबली भाषा कार्यक्रमों के लिए विशिष्ट है। ए-निर्देश एक स्थिरांक या स्मृति पते को निर्दिष्ट करता है जिसका उपयोग बाद के सी-निर्देश में किया जाता है। ए-निर्देश के तीनों रूपों को चित्रित किया गया है। पंक्ति 11 (@100) में, स्थिर मान 100 को ए रजिस्टर में लोड किया जाता है। लूप शाखा स्थिति का परीक्षण करने के लिए उपयोग किए जाने वाले मूल्य की गणना करने के लिए इस मान का उपयोग पंक्ति 12 (डी = डी-ए) में किया जाता है। चूंकि पंक्ति 4 (@cnt) में उपयोगकर्ता-परिभाषित चर "cnt" की पहली उपस्थिति होती है, इसलिए यह कथन प्रतीक को अगले अप्रयुक्त RAM पते से जोड़ता है। इस उदाहरण में, पता 16 है, और वह मान ए रजिस्टर में लोड किया जाता है। इसके अलावा, एम छद्म-रजिस्टर भी अब इस पते का संदर्भ देता है, और रैम [16] को सक्रिय रैम मेमोरी स्थान बनाया जाता है। ए-निर्देश का तीसरा उपयोग पंक्ति 21 (@LOOP) में देखा जाता है। यहाँ निर्देश बाध्य लेबल मूल्य को लोड करता है, जो रोम मेमोरी में एक पते का प्रतिनिधित्व करता है, ए रजिस्टर और एम छद्म-रजिस्टर में। लाइन 22 (0; जे. एम. पी.) में बाद में बिना शर्त शाखा निर्देश एम रजिस्टर मूल्य को सी. पी. यू. के प्रोग्राम काउंटर रजिस्टर में लोड करता है ताकि लूप की शुरुआत में नियंत्रण हस्तांतरण को प्रभावित किया जा सके। हैक कंप्यूटर कार्यक्रम निष्पादन को रोकने के लिए कोई मशीन भाषा निर्देश प्रदान नहीं करता है। प्रोग्राम की अंतिम दो पंक्तियाँ (@END और 0; JMP) एक अनंत लूप स्थिति बनाती हैं जिसका उपयोग हैक असेंबली प्रोग्राम पारंपरिक रूप से CPU एमुलेटर में चलाने के लिए डिज़ाइन किए गए प्रोग्रामों को समाप्त करने के लिए करते हैं। हेनेसी, जॉन एल., और पैटरसन, डेविड ए. को भी देखें। (2019)। कंप्यूटर वास्तुकलाः एक मात्रात्मक दृष्टिकोण, छठा संस्करण। कैम्ब्रिज, मैसाचुसेट्सः मॉर्गन कॉफ़मैन पब्लिशर्स जस्टिस, मैथ्यू। (2021)। कंप्यूटर वास्तव में कैसे काम करते हैं? सैन फ्रांसिस्को, कैलिफोर्नियाः कोई स्टार्च प्रेस नहीं। मालविनो, अल्बर्ट पी., और ब्राउन, जेराल्ड ए. (1993)। डिजिटल कंप्यूटर इलेक्ट्रॉनिक्स, तीसरा संस्करण। न्यूयॉर्क, न्यूयॉर्कः ग्लेनको मैकग्रा-हिल नल, लिंडा और लोबर, जूलिया। (2019)। कंप्यूटर संगठन और वास्तुकला की अनिवार्यताएँ। पाँचवाँ संस्करण। बर्लिंगटन, मैसाचुसेट्सः जोन्स और बार्टलेट लर्निंग। पैट, येल एन., और पटेल, संजय जे. (2020)। कम्प्यूटिंग सिस्टम का परिचयः बिट्स एंड गेट्स से लेकर सी एंड बियॉन्ड तक, तीसरा संस्करण। न्यूयॉर्क, न्यूयॉर्कः मैकग्रा हिल एजुकेशन। पेटज़ोल्ड, चार्ल्स। (2009)। कोडः कंप्यूटर हार्डवेयर और सॉफ्टवेयर की छिपी हुई भाषा। रेडमंड, वाशिंगटनः माइक्रोसॉफ्ट प्रेस। स्कॉट, जॉन क्लार्क। (2009)। लेकिन पता कैसे लगे? सभी के लिए कंप्यूटर के मूल सिद्धांत। ओल्डसमार, फ़्लोरिडाः जॉन सी. स्कॉट। व्हिपल, रिचर्ड। (2019)। स्क्रैच से अपना कंप्यूटर बनाएँ। सिएटल, वाशिंगटनः अमेज़न किंडल। संदर्भ कंप्यूटर