শুরু থেকে সম্পূর্ণ অনলাইন কম্পিউটার সায়েন্স ডেটাবেস এবং ইন্টারনেট ক্যারিয়ার কোর্সের অধ্যায় 4 এর সমস্যার সমাধান

Suru Theke Sampurna Anala Ina Kampi Utara Sayensa Detabesa Ebam Intaraneta Kyariyara Korsera Adhyaya 4 Era Samasyara Samadhana



সমস্যা এবং তাদের সমাধান

1) একটি সমাবেশ ভাষা প্রোগ্রাম লিখুন যা 6502 µP এর জন্য $0200 থেকে শুরু হয় এবং 2A94 এর স্বাক্ষরবিহীন সংখ্যা যোগ করে এইচ 2ABF-তে (যোগ করুন) এইচ (augend)। ইনপুট এবং আউটপুট মেমরিতে থাকতে দিন। এছাড়াও, হাতে একত্রিত প্রোগ্রাম নথি তৈরি করুন।







সমাধান:



সিএলসি
এলডিএ $0213
ADC $0215
STA $0217
এলডিএ $0214
ADC $0216
STA $0218



একত্রিত প্রোগ্রাম:





2) একটি অ্যাসেম্বলি ল্যাঙ্গুয়েজ প্রোগ্রাম লিখুন যা $0200 থেকে শুরু হয়, 6502 µP এর জন্য, এবং স্বাক্ষরবিহীন সংখ্যাগুলি বিয়োগ করে, 1569 এইচ (subtrahend) 2ABF থেকে এইচ (minuend)। ইনপুট এবং আউটপুট মেমরিতে থাকতে দিন। এছাড়াও একত্রিত প্রোগ্রাম নথি, হাতে দ্বারা উত্পাদন.



সমাধান:

এসইসি
এলডিএ $0213
এসবিসি $0215
STA $0217
এলডিএ $0214
এসবিসি $0216
STA $0218

একত্রিত প্রোগ্রাম:

3) লুপ ব্যবহার করে 6502 µP এর জন্য একটি সমাবেশ ভাষা প্রোগ্রাম লিখুন যা $00 থেকে $09 পর্যন্ত গণনা করে। প্রোগ্রামটি $0200 এ শুরু হওয়া উচিত। এছাড়াও, হাতে একত্রিত প্রোগ্রাম নথি তৈরি করুন।

সমাধান:

LDA #$09
STA $0220; X এবং $09 তুলনা করার জন্য
LDX #$00
লুপ INX
CPX $0220
BNE লুপ

একত্রিত প্রোগ্রাম:

4) একটি সমাবেশ ভাষা প্রোগ্রাম লিখুন যা 6502 µP এর জন্য $0200 থেকে শুরু হয়। প্রোগ্রাম দুটি সাবরুটিন আছে. প্রথম সাবরুটিনে 0203-এর স্বাক্ষরবিহীন সংখ্যা যোগ করা হয়েছে এইচ (augend) এবং 0102 এইচ (সংযোজন)। দ্বিতীয় সাবরুটিন প্রথম সাবরুটিন থেকে যোগফল যোগ করে যা 0305 এইচ 0006 থেকে এইচ (augend)। চূড়ান্ত ফলাফল মেমরিতে সংরক্ষণ করা হয়। প্রথম সাবরুটিনটিকে কল করুন যা হল FSTSUB এবং দ্বিতীয় সাবরুটিনটি হল SECSUB৷ ইনপুট এবং আউটপুট মেমরিতে থাকতে দিন। এছাড়াও, হাতে দ্বারা পুরো প্রোগ্রামের জন্য একত্রিত প্রোগ্রাম নথি তৈরি করুন।

সমাধান:

SECSUB CLC
LDA $021A
ADC $0234
STA $0236
LDA $021B
ADC $0235
STA $0237
আরটিএস

FSTSUB CLC
এলডিএ $0216
ADC $0218
STA $021A
এলডিএ $0217
ADC $0219
STA $021B
আরটিএস

JSR FSTSUB

একত্রিত প্রোগ্রাম:

5) দেওয়া যে একটি আইআরকিউ হ্যান্ডলার মূল পরিচালনার সময় সঞ্চয়কারীতে $02 থেকে $01 যোগ করে ¯NMI জারি করা হয়, এবং মূল হ্যান্ডলিং জন্য ¯NMI সঞ্চয়কারীতে $05 থেকে $04 যোগ করে, উভয় হ্যান্ডলারের কল সহ তাদের জন্য একটি সমাবেশ ভাষা লিখুন। কল আইআরকিউ হ্যান্ডলার $0200 ঠিকানায় থাকা উচিত। দ্য আইআরকিউ হ্যান্ডলার $0300 ঠিকানায় শুরু করা উচিত। দ্য ¯NMI হ্যান্ডলার $0400 ঠিকানায় শুরু করা উচিত। এর ফলাফল আইআরকিউ হ্যান্ডলারকে $0500 এর ঠিকানায় রাখা উচিত এবং এর ফলাফল ¯NMI হ্যান্ডলারকে $0501 ঠিকানায় রাখতে হবে।

সমাধান:

এনএমআইএসআর পিএইচএ; NMI রুটিন এখানে $0400 ঠিকানায় শুরু হয়
পিএইচএক্স
PHY
;
LDA #$04
ADC #$05
STA $0501
;
PLY
পিএলএক্স
পিএলএ
আরটিআই

আইএসআর পিএইচএ; এই নির্দেশ $0300 ঠিকানায় আছে
পিএইচএক্স
PHY
;
LDA #$01
ADC #$02
; JMP NMISR : মন্তব্য করা হয়েছে কারণ এটি রুটিনের অংশ নয়৷
STA $0500; স্ট্যাক যেতে হবে
;
PLY
পিএলএক্স
পিএলএ
আরটিআই
;
JMP ISR; এই নির্দেশ $0200 ঠিকানায় আছে

6) একটি 65C02 কম্পিউটারে সফ্টওয়্যার বিঘ্ন তৈরি করতে BRK নির্দেশ কীভাবে ব্যবহার করা হয় তা সংক্ষেপে ব্যাখ্যা করুন।

সমাধান:

65C02 µP-এর জন্য একটি সফ্টওয়্যার বাধা দেওয়ার প্রধান উপায় হল BRK নিহিত ঠিকানা নির্দেশনা ব্যবহার করা। অনুমান করুন যে মূল প্রোগ্রামটি চলছে, এবং এটি BRK নির্দেশের সম্মুখীন হয়েছে। সেই বিন্দু থেকে, বর্তমান নির্দেশ সম্পূর্ণ হওয়ার সাথে সাথে পিসিতে পরবর্তী নির্দেশের ঠিকানা স্ট্যাকে পাঠানো উচিত। সফ্টওয়্যার নির্দেশাবলী পরিচালনা করার জন্য একটি সাবরুটিন পরবর্তী কল করা উচিত। এই বিঘ্নিত সাবরুটিন A, X, এবং Y রেজিস্টার বিষয়বস্তুকে স্ট্যাকের দিকে ঠেলে দেবে। সাবরুটিনের মূলটি কার্যকর করার পরে, A, X, এবং Y রেজিস্টারের বিষয়বস্তুগুলিকে স্ট্যাক থেকে তাদের রেজিস্টারে ফিরিয়ে আনতে হবে সম্পূর্ণ সাবরুটিন দ্বারা। রুটিনের শেষ বক্তব্য হল আরটিআই। আরটিআই-এর কারণে পিসি বিষয়বস্তু স্বয়ংক্রিয়ভাবে স্ট্যাক থেকে পিসিতে ফিরে আসে।

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 , STX, STY, STZ, TRB, TSB। পাঠকের 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 , SED, SEI, TAX, TAY, TSX, TXA, TXS, TYA। একটি উদাহরণ নির্দেশনা হল:

DEX: X রেজিস্টার এক ইউনিট দ্বারা কমিয়ে দিন।

আপেক্ষিক ঠিকানা মোড
আপেক্ষিক ঠিকানা মোড শুধুমাত্র শাখা নির্দেশাবলীর সাথে ডিল করে। আপেক্ষিক ঠিকানা মোড সহ, শুধুমাত্র একটি অপারেন্ড আছে। এটি -12810 থেকে +12710 পর্যন্ত একটি মান। এই মানটিকে অফসেট বলা হয়। চিহ্নের উপর ভিত্তি করে, এই মানটি প্রোগ্রাম কাউন্টারের পরবর্তী নির্দেশ থেকে পরবর্তী নির্দেশের ঠিকানায় ফলাফলে যোগ বা বিয়োগ করা হয়। আপেক্ষিক ঠিকানা মোড নির্দেশাবলী হল: BCC, BCS, BEQ, BMI, BNE, BPL, BRA, BVC, BVS। নির্দেশের উদাহরণ হল:

BNE $7F : (স্ট্যাটাস রেজিস্টারে Z = 0 হলে শাখা, P)

যা বর্তমান প্রোগ্রাম কাউন্টারে 127 যোগ করে (চালানোর ঠিকানা) এবং সেই ঠিকানায় নির্দেশনা কার্যকর করা শুরু করে। একইভাবে:

BEQ $F9 : (শাখা যদি Z = : স্ট্যাটাস রেজিস্টারে, P)

যা বর্তমান প্রোগ্রাম কাউন্টারে একটি -7 যোগ করে এবং নতুন প্রোগ্রাম কাউন্টার ঠিকানায় এক্সিকিউশন শুরু করে। অপারেন্ড একটি দুই এর পরিপূরক সংখ্যা।

পরম সূচক ঠিকানা
পরম সূচক ঠিকানা সহ, প্রকৃত ঠিকানা পেতে X বা Y রেজিস্টারের বিষয়বস্তু প্রদত্ত পরম ঠিকানায় ($0000 থেকে $FFFF, অর্থাৎ 010 থেকে 6553610 পর্যন্ত) যোগ করা হয়। এই প্রদত্ত পরম ঠিকানাকে বেস ঠিকানা বলা হয়। যদি এক্স রেজিস্টার ব্যবহার করা হয়, সমাবেশ নির্দেশনাটি এরকম কিছু:

LDA $C453, X

যদি Y রেজিস্টার ব্যবহার করা হয় তবে এটি এরকম কিছু হবে:

LDA $C453,Y

X বা Y রেজিস্টারের মানকে গণনা বা সূচক মান বলা হয় এবং এটি $00 (010) থেকে $FF (25010) হতে পারে। একে অফসেট বলা হয় না।

নিখুঁত সূচক ঠিকানা নির্দেশাবলী হল: ADC, AND, ASL (শুধুমাত্র X), BIT (শুধুমাত্র এক্সকিউমুলেটর এবং মেমরি সহ), CMP, DEC (শুধুমাত্র মেমরি এবং X), EOR, INC (কেবল মেমরি এবং X), LDA , LDX, LDY, LSR (শুধুমাত্র X), ORA, ROL (শুধুমাত্র X), ROR (শুধুমাত্র X), SBC, STA, STZ (শুধুমাত্র X)।

পরোক্ষ অ্যাড্রেসিং
এটি শুধুমাত্র জাম্প নির্দেশের সাথে ব্যবহার করা হয়। এর সাথে, প্রদত্ত পরম ঠিকানার একটি পয়েন্টার ঠিকানা রয়েছে। পয়েন্টার ঠিকানা দুটি বাইট নিয়ে গঠিত। দুই-বাইট পয়েন্টার মেমরিতে গন্তব্য বাইট মান নির্দেশ করে (এর ঠিকানা)। সুতরাং, সমাবেশের ভাষা নির্দেশনা নিম্নরূপ:

JMP ($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। প্রতিটি পুনরাবৃত্তির জন্য, X রেজিস্টারে মান বৃদ্ধি করা হয়, এবং ফলাফলটি $0250 ঠিকানার অবস্থানে $0B এর সাথে তুলনা করা হয়। X-এর মান $0B-এর মানের সমান হওয়ার পর, পুনরাবৃত্তি বন্ধ হয়ে যায়। এই মুহুর্তে, স্ট্রিং এর দৈর্ঘ্য (বাইটের সংখ্যা) এবং স্ট্রিং আক্ষরিক $0300 থেকে $030B (অন্তর্ভুক্ত) ঠিকানা অবস্থানগুলি দখল করে। $0300 থেকে মেমরি অ্যাড্রেস বাড়ানোর জন্য, Y রেজিস্টার ব্যবহার করা হয়। কোড হল:

LDA #$0B
তারা $0250
LDX #$00
LDY #$00
STA $0300; 11 এর দৈর্ঘ্য কিছু সাবরুটিন দ্বারা A তে রাখা হয় এবং $0300 এ যায়
লুপ INX
সেখানে
CPY $0250
BEQ লুপ

খ) কৌশল: স্ট্রিংয়ের জন্য 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। প্রতিটি পুনরাবৃত্তির জন্য, X রেজিস্টারে মান বৃদ্ধি করা হয়, এবং ফলাফলটি $0250 ঠিকানার অবস্থানে $0B এর সাথে তুলনা করা হয়। X-এর মান $0B-এর মানের সমান হওয়ার পর, পুনরাবৃত্তি বন্ধ হয়ে যায়। এই মুহুর্তে, স্ট্রিং লিটারেলের বাইটের সংখ্যা এবং নাল অক্ষরটি $0300 থেকে $030B (অন্তর্ভুক্ত) ঠিকানা অবস্থানগুলি দখল করে। মেমরি ঠিকানা $0300 থেকে বৃদ্ধি করার জন্য, Y রেজিস্টার ব্যবহার করা হয়। কোড হল:

LDA #$0B
তারা $0250
LDX #$00
LDY#$00
STA $0300; কিছু সাবরুটিন দ্বারা 'I' কে A তে রাখা হয় এবং $0300 এ যায়
লুপ INX
সেখানে
CPY $0250
BEQ লুপ