شروع سے مکمل آن لائن کمپیوٹر سائنس ڈیٹا بیس اور انٹرنیٹ کیریئر کورس کے باب 4 کے مسائل کے حل

Shrw S Mkml An Layn Kmpyw R Sayns Y A Bys Awr An Rny Kyryyr Kwrs K Bab 4 K Msayl K Hl



مسائل اور ان کا حل

1) اسمبلی لینگوئج پروگرام لکھیں جو 6502 µP کے لیے $0200 سے شروع ہوتا ہے اور 2A94 کے غیر دستخط شدہ نمبروں کو شامل کرتا ہے۔ ایچ (اضافہ کریں) 2ABF میں ایچ (agend) ان پٹ اور آؤٹ پٹ کو میموری میں رہنے دیں۔ اس کے علاوہ، اسمبل شدہ پروگرام دستاویز کو ہاتھ سے تیار کریں۔







حل:



سی ایل سی
ایل ڈی اے $0213
ADC $0215
STA $0217
ایل ڈی اے $0214
ADC $0216
STA $0218



جمع پروگرام:





2) ایک اسمبلی لینگویج پروگرام لکھیں جو 6502 µP کے لیے $0200 سے شروع ہوتا ہے، اور غیر دستخط شدہ نمبروں کو گھٹا دیتا ہے، 1569 ایچ (subtrahend) 2ABF سے ایچ (ذہین) ان پٹ اور آؤٹ پٹ کو میموری میں رہنے دیں۔ اسمبل شدہ پروگرام دستاویز بھی ہاتھ سے تیار کریں۔



حل:

ایس ای سی
ایل ڈی اے $0213
SBC $0215
STA $0217
ایل ڈی اے $0214
SBC $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 کے غیر دستخط شدہ نمبروں کو شامل کرتا ہے۔ ایچ (agend) اور 0102 ایچ (اضافہ کریں)۔ دوسرا سب روٹین پہلے سب روٹین سے جوڑتا ہے جو کہ 0305 ہے۔ ایچ 0006 تک ایچ (agend) حتمی نتیجہ میموری میں محفوظ ہے۔ پہلی سبروٹین کو کال کریں جو 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 کے پتے پر رکھا جانا چاہیے۔

حل:

NMISR PHA ؛ NMI روٹین یہاں $0400 ایڈریس سے شروع ہوتی ہے۔
پی ایچ ایکس
پی ایچ وائی
;
LDA #$04
ADC #$05
STA $0501
;
PLY
PLX
پی ایل اے
آر ٹی آئی

ISR PHA ؛ یہ ہدایت $0300 ایڈریس پر ہے۔
پی ایچ ایکس
پی ایچ وائی
;
LDA #$01
ADC #$02
; JMP NMISR : تبصرہ کیا کیونکہ یہ معمول کا حصہ نہیں ہے۔
STA $0500 ; اسٹیک پر جائیں گے
;
PLY
PLX
پی ایل اے
آر ٹی آئی
;
JMP ISR ؛ یہ ہدایت $0200 ایڈریس پر ہے۔

6) مختصر طور پر وضاحت کریں کہ BRK ہدایات کو 65C02 کمپیوٹر میں سافٹ ویئر انٹرپٹ بنانے کے لیے کس طرح استعمال کیا جاتا ہے۔

حل:

65C02 µP کے لیے سافٹ ویئر میں خلل ڈالنے کا بنیادی طریقہ BRK مضمر ایڈریس انسٹرکشن کا استعمال ہے۔ فرض کریں کہ مرکزی پروگرام چل رہا ہے، اور اس کا سامنا BRK ہدایات سے ہوتا ہے۔ اس مقام سے، پی سی میں اگلی ہدایات کا ایڈریس اسٹیک پر بھیج دیا جانا چاہیے کیونکہ موجودہ ہدایات مکمل ہوتی ہیں۔ سافٹ ویئر کی ہدایات کو ہینڈل کرنے کے لیے ایک ذیلی روٹین کو اگلا بلایا جانا چاہیے۔ اس انٹرپٹ سبروٹین کو A، X، اور Y رجسٹر کے مواد کو اسٹیک پر دھکیلنا چاہیے۔ سبروٹین کے کور کے مکمل ہونے کے بعد، A, X اور Y رجسٹروں کے مواد کو مکمل کرنے والے سبروٹین کے ذریعے اسٹیک سے ان کے رجسٹروں میں واپس لے جانا چاہیے۔ روٹین میں آخری بیان آر ٹی آئی ہے۔ RTI کی وجہ سے PC کا مواد بھی خود بخود اسٹیک سے PC پر واپس آ جاتا ہے۔

7) ایک ٹیبل تیار کریں جو ایک عام سب روٹین کا موازنہ اور اس کے برعکس سروس کے روٹین سے کرے۔

حل:

8) اسمبلی لینگویج ہدایات کی مثالوں کے ساتھ 65C02 µP کے بنیادی ایڈریسنگ طریقوں کی مختصر وضاحت کریں۔

حل:

6502 کے لیے ہر ہدایت ایک بائٹ ہے، اس کے بعد صفر یا زیادہ آپرینڈز ہیں۔

فوری ایڈریسنگ موڈ
فوری ایڈریسنگ موڈ کے ساتھ، اوپرینڈ کے بعد، قدر ہے نہ کہ میموری ایڈریس۔ قدر کو # سے پہلے ہونا ضروری ہے۔ اگر ویلیو ہیکسا ڈیسیمل میں ہے، تو '#' کے بعد '$' ہونا ضروری ہے۔ 65C02 کے لیے فوری ایڈریسنگ ہدایات ہیں: ADC, AND, BIT, CMP, CPX, CPY, EOR, LDA, LDX, LDY, ORA, SBC۔ قاری کو 65C02 µP کے لیے دستاویزات سے مشورہ کرنا چاہیے تاکہ یہ جاننے کے لیے کہ یہاں درج ہدایات کو کیسے استعمال کیا جائے جن کی اس باب میں وضاحت نہیں کی گئی ہے۔ ایک مثال ہدایت ہے:

LDA #$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 تک) حقیقی پتہ رکھنے کے لیے۔ یہ دیا ہوا مطلق پتہ بنیادی پتہ کہلاتا ہے۔ اگر X رجسٹر استعمال کیا جاتا ہے، تو اسمبلی کی ہدایات کچھ اس طرح ہیں:

LDA $C453,X

اگر Y رجسٹر استعمال کیا جاتا ہے، تو یہ کچھ اس طرح ہوگا:

LDA $C453,Y

X یا Y رجسٹر کی قدر کو شمار یا اشاریہ کی قدر کہا جاتا ہے اور یہ $00 (010) سے $FF (25010) تک کہیں بھی ہو سکتا ہے۔ اسے آفسیٹ نہیں کہا جاتا ہے۔

مکمل انڈیکس ایڈریسنگ ہدایات ہیں: ADC، AND، ASL (صرف X)، BIT (ایکومولیٹر اور میموری کے ساتھ، صرف X کے ساتھ)، CMP، DEC (صرف میموری اور X)، EOR، INC (صرف میموری اور X)، LDA ، LDX، LDY، LSR (صرف X)، ORA، ROL (صرف X)، ROR (صرف X)، SBC، STA، STZ (صرف X)۔

مطلق بالواسطہ خطاب
یہ صرف جمپ انسٹرکشن کے ساتھ استعمال ہوتا ہے۔ اس کے ساتھ، دیئے گئے مطلق ایڈریس میں ایک پوائنٹر ایڈریس ہوتا ہے۔ پوائنٹر ایڈریس دو بائٹس پر مشتمل ہے۔ دو بائٹس پوائنٹر میموری میں منزل بائٹ ویلیو کی طرف اشارہ کرتا ہے (کا پتہ ہے)۔ لہذا، اسمبلی کی زبان کی ہدایات مندرجہ ذیل ہے:

JMP ($3456)

قوسین اور $13 کے ساتھ $3456 ایڈریس میں جبکہ $EB $3457 (=$3456 + 1) ایڈریس میں ہے، منزل کا پتہ $13EB ہے اور $13EB پوائنٹر ہے۔ مکمل $3456 ہدایات میں قوسین میں ہے۔

9) a) 'I love you!' ڈالنے کے لیے 6502 مشینی زبان کا پروگرام لکھیں۔ میموری میں ASCII کوڈز کی سٹرنگ، سٹرنگ کی لمبائی کے ساتھ $0300 ایڈریس سے شروع ہوتی ہے۔ پروگرام $0200 ایڈریس سے شروع ہونا چاہئے۔ یہ فرض کرتے ہوئے کہ وہ ایک ایک کریکٹر کسی نہ کسی ذیلی روٹین کے ذریعے وہاں بھیجے گئے ہیں، ہر ایک کیریکٹر کو ایکومولیٹر سے حاصل کریں۔ اس کے علاوہ، پروگرام کو ہاتھ سے تیار کریں۔ (اگر آپ کو 'I love you!' کے لیے ASCII کوڈز جاننے کی ضرورت ہے، تو وہ یہ ہیں: 'I':4916، space : 2016, 'l': 6C16, 'o':6F16, 'v':7616, ' e':65, 'y':7916, 'u':7516, اور '!':2116. نوٹ: ہر کوڈ 1 بائٹ پر قبضہ کرتا ہے)۔

ب) 'میں تم سے پیار کرتا ہوں!' ڈالنے کے لیے 6502 مشینی زبان کا پروگرام لکھیں۔ میموری میں ASCII کوڈز کی سٹرنگ، سٹرنگ کی لمبائی کے بغیر $0300 ایڈریس سے شروع ہوتی ہے لیکن 0016 میں ختم ہوتی ہے۔ پروگرام $0200 ایڈریس سے شروع ہونا چاہیے۔ ہر ایک کردار کو جمع کرنے والے سے حاصل کریں، یہ فرض کرتے ہوئے کہ وہ وہاں کسی نہ کسی ذیلی روٹین کے ذریعہ ایک ایک کرکے بھیجے گئے ہیں۔ اس کے علاوہ، ہاتھ سے پروگرام کو جمع کریں.

حل:

a) حکمت عملی: سٹرنگ کے لیے 12 بائٹس ہیں: سٹرنگ کی لمبائی کے لیے 1 بائٹ اور سٹرنگ لٹریل کے لیے 11 بائٹس۔ لہذا، 0 سے گنتی 12 تکرار (لوپنگ) ہونی چاہیے۔ یعنی: 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، 10، 11۔ یہ 12 نمبر ہیں۔

X رجسٹر میں 0 انٹیجر ڈالا جاتا ہے اور نمبر 1110 = 1210 - 110 = B16 = $0B میموری میں ایڈریس کی جگہ پر رکھا جاتا ہے، ایڈریس $0250 کہیں۔ ہر تکرار کے لیے، X رجسٹر میں قدر میں اضافہ ہوتا ہے، اور نتیجہ کا موازنہ $0B کے ساتھ $0250 ایڈریس کے مقام پر کیا جاتا ہے۔ X میں قدر $0B کی قدر کے برابر ہونے کے بعد، تکرار رک جاتی ہے۔ اس مقام پر، سٹرنگ کی لمبائی (بائٹس کی تعداد) اور سٹرنگ لٹریل $0300 سے $030B (شامل) ایڈریس کے مقامات پر قابض ہیں۔ میموری ایڈریس کو $0300 سے بڑھانے کے لیے، Y رجسٹر استعمال کیا جاتا ہے۔ کوڈ ہے:

LDA #$0B
وہ $0250 ہیں۔
LDX #$00
LDY#$00
STA $0300 ; 11 کی لمبائی کچھ سب روٹین کے ذریعہ A میں ڈالی جاتی ہے اور $0300 تک جاتی ہے۔
لوپ INX
وہاں
CPY $0250
BEQ لوپ

ب) حکمت عملی: سٹرنگ کے لیے 12 بائٹس ہیں: $00 Null ٹرمینیٹر کے لیے 1 بائٹ اور سٹرنگ لٹریل کے لیے 11 بائٹس۔ لہذا، 0 سے گنتی 12 تکرار (لوپنگ) ہونی چاہیے۔ یعنی: 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، 10، 11۔ یہ 12 نمبر ہیں۔

X رجسٹر میں 0 انٹیجر ڈالا جاتا ہے اور نمبر 1110 = 1210 - 110 = B16 = $0B میموری میں ایڈریس کی جگہ پر رکھا جاتا ہے، ایڈریس $0250 کہیں۔ ہر تکرار کے لیے، X رجسٹر میں قدر میں اضافہ ہوتا ہے، اور نتیجہ کا موازنہ $0B کے ساتھ $0250 ایڈریس کے مقام پر کیا جاتا ہے۔ X میں قدر $0B کی قدر کے برابر ہونے کے بعد، تکرار رک جاتی ہے۔ اس مقام پر، سٹرنگ لٹریل کے بائٹس کی تعداد کے علاوہ Null کریکٹر $0300 سے $030B (شامل) ایڈریس کے مقامات پر قابض ہے۔ میموری ایڈریس کو $0300 سے بڑھانے کے لیے، Y رجسٹر استعمال کیا جاتا ہے۔ کوڈ ہے:

LDA #$0B
وہ $0250 ہیں۔
LDX #$00
LDY#$00
STA $0300 ; 'I' کو کچھ سب روٹین کے ذریعے A میں ڈالا جاتا ہے اور $0300 پر جاتا ہے۔
لوپ INX
وہاں
CPY $0250
BEQ لوپ