शुरुआत से ही पूर्ण ऑनलाइन कंप्यूटर विज्ञान डेटाबेस और इंटरनेट कैरियर पाठ्यक्रम के अध्याय 4 की समस्याओं का समाधान

Suru Ata Se Hi Purna Onala Ina Kampyutara Vijnana Detabesa Aura Intaraneta Kairiyara Pathyakrama Ke Adhyaya 4 Ki Samasya Om Ka Samadhana



समस्याएँ और उनके समाधान

1) एक असेंबली भाषा प्रोग्राम लिखें जो 6502 µP के लिए $0200 से शुरू होता है और 2A94 के अहस्ताक्षरित नंबर जोड़ता है एच (जोड़ें) 2एबीएफ में एच (अगेंड)। इनपुट और आउटपुट को मेमोरी में रहने दें। इसके अलावा, इकट्ठे किए गए प्रोग्राम दस्तावेज़ को हाथ से तैयार करें।







समाधान:



सीएलसी
एलडीए $0213
एडीसी $0215
एसटीए $0217
एलडीए $0214
एडीसी $0216
एसटीए $0218



इकट्ठे कार्यक्रम:





2) एक असेंबली भाषा प्रोग्राम लिखें जो 6502 μP के लिए $0200 से शुरू होता है, और अहस्ताक्षरित संख्याओं को घटाता है, 1569 एच (सबट्रेंड) 2एबीएफ से एच (मिनट). इनपुट और आउटपुट को मेमोरी में रहने दें। इकट्ठे किए गए प्रोग्राम दस्तावेज़ को भी हाथ से तैयार करें।



समाधान:

सेकंड
एलडीए $0213
एसबीसी $0215
एसटीए $0217
एलडीए $0214
एसबीसी $0216
एसटीए $0218

इकट्ठे कार्यक्रम:

3) 6502 µP के लिए एक असेंबली भाषा प्रोग्राम लिखें जो एक लूप का उपयोग करके $00 से $09 तक गिना जाता है। कार्यक्रम $0200 से शुरू होना चाहिए। इसके अलावा, इकट्ठे किए गए प्रोग्राम दस्तावेज़ को हाथ से तैयार करें।

समाधान:

एलडीए #$09
एसटीए $0220 ; X और $09 की तुलना करने के लिए
एलडीएक्स #$00
लूप आईएनएक्स
सीपीएक्स $0220
बीएनई लूप

इकट्ठे कार्यक्रम:

4) एक असेंबली भाषा प्रोग्राम लिखें जो 6502 µP के लिए $0200 से शुरू होता है। प्रोग्राम में दो सबरूटीन हैं. पहला सबरूटीन 0203 की अहस्ताक्षरित संख्याएँ जोड़ता है एच (अगस्त) और 0102 एच (जोड़ें). दूसरा सबरूटीन पहले सबरूटीन का योग जोड़ता है जो 0305 है एच 0006 तक एच (अगेंड)। अंतिम परिणाम मेमोरी में संग्रहीत होता है। पहले सबरूटीन को कॉल करें जो कि FSTSUB है और दूसरे सबरूटीन को जो SECSUB है। इनपुट और आउटपुट को मेमोरी में रहने दें। इसके अलावा, पूरे कार्यक्रम के लिए इकट्ठे प्रोग्राम दस्तावेज़ को हाथ से तैयार करें।

समाधान:

SECSUB सीएलसी
एलडीए $021ए
एडीसी $0234
एसटीए $0236
एलडीए $021बी
एडीसी $0235
एसटीए $0237
आरटीएस

एफएसटीएसयूबी सीएलसी
एलडीए $0216
एडीसी $0218
एसटीए $021ए
एलडीए $0217
एडीसी $0219
एसटीए $021बी
आरटीएस

जेएसआर एफएसटीएसयूबी

इकट्ठे कार्यक्रम:

5) यह देखते हुए कि ए ¯आईआरक्यू हैंडलर कोर हैंडलिंग के रूप में संचायक पर $02 से $01 जोड़ता है ¯एनएमआई जारी किया गया है, और इसके लिए मुख्य प्रबंधन ¯एनएमआई संचायक पर $05 से $04 जोड़ता है, दोनों हैंडलर के लिए उनकी कॉल सहित एक असेंबली भाषा लिखता है। को कॉल ¯आईआरक्यू हैंडलर $0200 के पते पर होना चाहिए। ¯आईआरक्यू हैंडलर को $0300 के पते पर शुरू करना चाहिए। ¯एनएमआई हैंडलर को $0400 के पते पर शुरू करना चाहिए। का परिणाम ¯आईआरक्यू हैंडलर को $0500 के पते पर डाला जाना चाहिए, और इसका परिणाम ¯एनएमआई हैंडलर को $0501 के पते पर डाला जाना चाहिए।

समाधान:

एनएमआईएसआर पीएचए; एनएमआई रूटीन यहां $0400 पते पर शुरू होता है
पीएचएक्स
PHY
;
एलडीए #$04
एडीसी #$05
एसटीए $0501
;
प्लाई
पीएलएक्स
प्ला
सूचना का अधिकार

आईएसआर पीएचए; यह निर्देश $0300 पते पर है
पीएचएक्स
PHY
;
एलडीए #$01
एडीसी #$02
; जेएमपी एनएमआईएसआर: टिप्पणी की गई क्योंकि यह दिनचर्या का हिस्सा नहीं है
एसटीए $0500 ; ढेर में चला जाएगा
;
प्लाई
पीएलएक्स
प्ला
सूचना का अधिकार
;
जेएमपी आईएसआर; यह निर्देश $0200 पते पर है

6) संक्षेप में बताएं कि 65सी02 कंप्यूटर में सॉफ्टवेयर इंटरप्ट उत्पन्न करने के लिए बीआरके निर्देश का उपयोग कैसे किया जाता है।

समाधान:

65C02 µP के लिए सॉफ़्टवेयर व्यवधान का मुख्य तरीका BRK निहित पता अनुदेश का उपयोग करना है। मान लें कि मुख्य प्रोग्राम चल रहा है, और उसे BRK निर्देश का सामना करना पड़ता है। उस बिंदु से, पीसी में अगले निर्देश का पता वर्तमान निर्देश पूरा होने पर स्टैक पर भेजा जाना चाहिए। सॉफ़्टवेयर अनुदेश को संभालने के लिए एक सबरूटीन को आगे बुलाया जाना चाहिए। इस इंटरप्ट सबरूटीन को ए, एक्स और वाई रजिस्टर सामग्री को स्टैक पर धकेलना चाहिए। सबरूटीन के कोर को निष्पादित करने के बाद, ए, एक्स और वाई रजिस्टरों की सामग्री को पूर्ण सबरूटीन द्वारा स्टैक से उनके रजिस्टरों में वापस खींच लिया जाना चाहिए। दिनचर्या में अंतिम कथन है आरटीआई. आरटीआई के कारण पीसी सामग्री भी स्वचालित रूप से स्टैक से पीसी पर वापस खींच ली जाती है।

7) एक तालिका तैयार करें जो एक सामान्य सबरूटीन की एक इंटरप्ट सर्विस रूटीन के साथ तुलना और अंतर करती है।

समाधान:

8) असेंबली भाषा अनुदेश उदाहरणों को देखते हुए 65C02 µP के मुख्य एड्रेसिंग मोड को संक्षेप में समझाएं।

समाधान:

6502 के लिए प्रत्येक निर्देश एक बाइट है, जिसके बाद शून्य या अधिक ऑपरेंड होते हैं।

तत्काल संबोधन मोड
तत्काल एड्रेसिंग मोड के साथ, ऑपरेंड के बाद, वैल्यू है न कि मेमोरी एड्रेस। मान के पहले # लगाना होगा. यदि मान हेक्साडेसिमल में है, तो '#' के बाद '$' लगाना होगा। 65C02 के लिए तत्काल संबोधित निर्देश हैं: ADC, AND, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC। यहां सूचीबद्ध निर्देशों का उपयोग कैसे करें, जिन्हें इस अध्याय में नहीं समझाया गया है, यह जानने के लिए पाठक को 65C02 µP के लिए दस्तावेज़ देखना चाहिए। एक उदाहरण निर्देश है:

एलडीए #$77

एब्सोल्यूट एड्रेसिंग मोड
एब्सोल्यूट एड्रेसिंग मोड के साथ, एक ऑपरेंड होता है। यह ऑपरेंड मेमोरी में मान का पता है (आमतौर पर हेक्साडेसिमल या लेबल में)। 6502 µP के लिए 64K10 = 65,53610 मेमोरी पते हैं। आमतौर पर, एक-बाइट मान इनमें से किसी एक पते पर होता है। 65C02 के लिए पूर्ण संबोधन निर्देश हैं: ADC, AND, ASL, BIT, CMP, CPX, CPY, DEC, EOR, INC, JMP, JSR, LDA, LDX, LDY, LSR, ORA, ROL, ROR, SBC, STA , एसटीएक्स, एसटीवाई, एसटीजेड, टीआरबी, टीएसबी। पाठक को यह जानने के लिए 65C02 µP के लिए दस्तावेज़ देखना चाहिए कि यहां सूचीबद्ध निर्देशों के साथ-साथ बाकी एड्रेसिंग मोड का उपयोग कैसे किया जाए जिन्हें इस अध्याय में नहीं समझाया गया है। एक उदाहरण निर्देश है:

वे $1234 हैं

निहित संबोधन मोड
निहित एड्रेसिंग मोड के साथ, कोई ऑपरेंड नहीं है। इसमें शामिल कोई भी µP रजिस्टर अनुदेश द्वारा निहित है। 65C02 के लिए निहित संबोधन निर्देश हैं: BRK, CLC, CLD, CLI, CLV, DEX, DEY, INX, INY, NOP, PHA, PHP, PHX, PHY, PLA, PLP, PLX, PLY,RTI, RTS, SEC , एसईडी, एसईआई, टैक्स, टीएवाई, टीएसएक्स, टीएक्सए, टीएक्सएस, टीवाईए। एक उदाहरण निर्देश है:

DEX: X रजिस्टर को एक इकाई से घटाएँ।

रिलेटिव एड्रेसिंग मोड
रिलेटिव एड्रेसिंग मोड केवल शाखा निर्देशों से संबंधित है। रिलेटिव एड्रेसिंग मोड के साथ, केवल एक ऑपरेंड होता है। यह -12810 से +12710 तक का मान है। इस मान को ऑफसेट कहा जाता है. संकेत के आधार पर, यह मान प्रोग्राम काउंटर के अगले निर्देश से इच्छित अगले निर्देश के पते पर परिणाम में जोड़ा या घटाया जाता है। सापेक्ष पता मोड निर्देश हैं: बीसीसी, बीसीएस, बीईक्यू, बीएमआई, बीएनई, बीपीएल, बीआरए, बीवीसी, बीवीएस। निर्देश उदाहरण हैं:

बीएनई $7एफ : (यदि स्थिति रजिस्टर में शाखा जेड = 0 है, पी)

जो वर्तमान प्रोग्राम काउंटर (निष्पादित करने के लिए पता) में 127 जोड़ता है और उस पते पर निर्देश निष्पादित करना शुरू करता है। इसी प्रकार:

BEQ $F9 : (शाखा यदि Z = : स्थिति रजिस्टर में, P)

जो वर्तमान प्रोग्राम काउंटर में -7 जोड़ता है और नए प्रोग्राम काउंटर पते पर निष्पादन शुरू करता है। ऑपरेंड दो की पूरक संख्या है।

निरपेक्ष सूचकांक संबोधन
निरपेक्ष सूचकांक पते के साथ, वास्तविक पता पाने के लिए एक्स या वाई रजिस्टर की सामग्री को दिए गए निरपेक्ष पते (कहीं भी $0000 से $FFFF, यानी 010 से 6553610 तक) में जोड़ा जाता है। इस दिए गए निरपेक्ष पते को आधार पता कहा जाता है। यदि एक्स रजिस्टर का उपयोग किया जाता है, तो असेंबली निर्देश कुछ इस प्रकार है:

एलडीए $C453,एक्स

यदि Y रजिस्टर का उपयोग किया जाता है, तो यह कुछ इस तरह होगा:

एलडीए $C453,Y

X या Y रजिस्टर के मान को गिनती या सूचकांक मान कहा जाता है और यह $00 (010) से $FF (25010) तक कहीं भी हो सकता है। इसे ऑफसेट नहीं कहा जाता.

संपूर्ण सूचकांक को संबोधित करने वाले निर्देश हैं: ADC, AND, ASL (केवल X), BIT (संचयक और मेमोरी के साथ, केवल X के साथ), CMP, DEC (केवल मेमोरी और X के साथ), EOR, INC (केवल मेमोरी और X), LDA , एलडीएक्स, एलडीवाई, एलएसआर (केवल एक्स), ओआरए, आरओएल (केवल एक्स), आरओआर (केवल एक्स), एसबीसी, एसटीए, एसटीजेड (केवल एक्स)।

पूर्णतया अप्रत्यक्ष सम्बोधन
इसका उपयोग केवल जंप निर्देश के साथ किया जाता है। इसके साथ, दिए गए निरपेक्ष पते में एक सूचक पता होता है। सूचक पते में दो बाइट्स होते हैं। दो-बाइट्स सूचक मेमोरी में गंतव्य बाइट मान को इंगित करता है (पता है)। तो, असेंबली भाषा निर्देश इस प्रकार है:

जेएमपी ($3456)

$3456 पते में कोष्ठक और $13 के साथ, जबकि $EB $3457 (= $3456 + 1) पते में है, गंतव्य पता $13EB है और $13EB सूचक है। निर्देश में पूर्ण $3456 कोष्ठक में है।

9) क) 'आई लव यू!' डालने के लिए 6502 मशीन भाषा प्रोग्राम लिखें। मेमोरी में ASCII कोड की स्ट्रिंग, स्ट्रिंग की लंबाई के साथ $0300 पते से शुरू होती है। कार्यक्रम $0200 के पते पर शुरू होना चाहिए। प्रत्येक अक्षर को एक्यु-मुलेटर से प्राप्त करें, यह मानते हुए कि वे किसी सबरूटीन द्वारा एक-एक करके वहां भेजे गए हैं। इसके अलावा, प्रोग्राम को हाथ से असेंबल करें। (यदि आपको 'आई लव यू!' के लिए ASCII कोड जानने की आवश्यकता है, तो वे यहां हैं: 'I':4916, स्पेस : 2016, 'l': 6C16, 'o':6F16, 'v':7616, ' e':65, 'y':7916, 'u':7516, और '!':2116। नोट: प्रत्येक कोड 1 बाइट लेता है)।

ख) 'आई लव यू!' डालने के लिए 6502 मशीन भाषा प्रोग्राम लिखें। मेमोरी में ASCII कोड की स्ट्रिंग, स्ट्रिंग की लंबाई के बिना $0300 पते से शुरू होती है लेकिन 0016 पर समाप्त होती है। प्रोग्राम $0200 पते पर शुरू होना चाहिए। संचायक से प्रत्येक अक्षर प्राप्त करें, यह मानते हुए कि वे किसी सबरूटीन द्वारा एक-एक करके वहां भेजे गए हैं। साथ ही, प्रोग्राम को हाथ से असेंबल करें।

समाधान:

ए) रणनीति: स्ट्रिंग के लिए 12 बाइट्स हैं: स्ट्रिंग की लंबाई के लिए 1 बाइट और स्ट्रिंग शाब्दिक के लिए 11 बाइट्स। तो, 0 से गिनती करते हुए 12 पुनरावृत्तियाँ (लूपिंग) होनी चाहिए। वह है: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11। ये 12 संख्याएँ हैं।

0 पूर्णांक को X रजिस्टर में डाला जाता है और संख्या 1110 = 1210 - 110 = B16 = $0B को मेमोरी में एक पते वाले स्थान पर रखा जाता है, मान लीजिए पता $0250। प्रत्येक पुनरावृत्ति के लिए, एक्स रजिस्टर में मूल्य बढ़ाया जाता है, और परिणाम की तुलना $0250 पता स्थान में $0B से की जाती है। X में मान $0B के मान के बराबर होने के तुरंत बाद, पुनरावृत्ति बंद हो जाती है। इस बिंदु पर, स्ट्रिंग की लंबाई (बाइट्स की संख्या) और स्ट्रिंग शाब्दिक $0300 से $030B (समावेशी) पता स्थानों पर कब्जा कर लेते हैं। मेमोरी एड्रेस को $0300 से बढ़ाने के लिए, Y रजिस्टर का उपयोग किया जाता है। कोड है:

एलडीए #$0B
वे $0250 हैं
एलडीएक्स #$00
एलडीवाई #$00
एसटीए $0300 ; 11 की लंबाई को कुछ सबरूटीन द्वारा ए में डाल दिया जाता है और $0300 तक चला जाता है
लूप आईएनएक्स
वहाँ
सीपीवाई $0250
बीईक्यू लूप

बी) रणनीति: स्ट्रिंग के लिए 12 बाइट्स हैं: $00 नल टर्मिनेटर के लिए 1 बाइट और स्ट्रिंग शाब्दिक के लिए 11 बाइट्स। तो, 0 से गिनती करते हुए 12 पुनरावृत्तियाँ (लूपिंग) होनी चाहिए। वह है: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11। ये 12 संख्याएँ हैं।

0 पूर्णांक को X रजिस्टर में डाला जाता है और संख्या 1110 = 1210 - 110 = B16 = $0B को मेमोरी में एक पते वाले स्थान पर रखा जाता है, मान लीजिए पता $0250। प्रत्येक पुनरावृत्ति के लिए, एक्स रजिस्टर में मूल्य बढ़ाया जाता है, और परिणाम की तुलना $0250 पता स्थान में $0B से की जाती है। X में मान $0B के मान के बराबर होने के तुरंत बाद, पुनरावृत्ति बंद हो जाती है। इस बिंदु पर, स्ट्रिंग शाब्दिक के बाइट्स की संख्या और शून्य वर्ण $0300 से $030B (समावेशी) पता स्थानों पर कब्जा कर लेते हैं। मेमोरी पतों को $0300 से बढ़ाने के लिए, Y रजिस्टर का उपयोग किया जाता है। कोड है:

एलडीए #$0B
वे $0250 हैं
एलडीएक्स #$00
एलडीवाई #$00
एसटीए $0300 ; कुछ सबरूटीन द्वारा 'I' को A में डाल दिया जाता है और $0300 पर चला जाता है
लूप आईएनएक्स
वहाँ
सीपीवाई $0250
बीईक्यू लूप