باب 4: 6502 مائکرو پروسیسر اسمبلی لینگویج ٹیوٹوریل

Bab 4 6502 Maykrw Prwsysr Asmbly Lyngwyj Yw Wryl



باب 4: 6502 مائکرو پروسیسر اسمبلی لینگویج ٹیوٹوریل

4.1 تعارف

6502 مائیکرو پروسیسر 1975 میں جاری کیا گیا تھا۔ اسے کچھ پرسنل کمپیوٹرز جیسے کہ Apple II، کموڈور 64، اور BBC مائیکرو کے لیے مائکرو پروسیسر کے طور پر استعمال کیا جاتا تھا۔







6502 مائیکرو پروسیسر آج بھی بڑی تعداد میں تیار کیا جا رہا ہے۔ یہ اب کوئی مرکزی پروسیسنگ یونٹ نہیں ہے جو آج پرسنل کمپیوٹرز (لیپ ٹاپ) میں استعمال ہوتا ہے، لیکن یہ اب بھی بڑی تعداد میں تیار ہوتا ہے اور آج بھی الیکٹرانک اور برقی آلات میں استعمال ہوتا ہے۔ زیادہ جدید کمپیوٹر کے فن تعمیر کو سمجھنے کے لیے، 6502 جیسے پرانے لیکن کافی کامیاب مائکرو پروسیسر کی جانچ کرنا بہت مددگار ہے۔



چونکہ یہ سمجھنا اور پروگرام کرنا آسان ہے، اس لیے یہ اسمبلی لینگویج سکھانے کے لیے استعمال کرنے کے لیے بہترین (اگر بہترین نہیں) مائکرو پروسیسر میں سے ایک ہے۔ اسمبلی لینگویج ایک نچلی سطح کی زبان ہے جسے کمپیوٹر پروگرام کرنے کے لیے استعمال کیا جا سکتا ہے۔ نوٹ کریں کہ ایک مائکرو پروسیسر کی اسمبلی کی زبان دوسرے مائکرو پروسیسر کی اسمبلی زبان سے مختلف ہے۔ اس باب میں 6502 مائیکرو پروسیسر اسمبلی لینگویج پڑھائی جاتی ہے۔ مزید واضح طور پر، یہ 65C02 ہے جو پڑھایا جاتا ہے، لیکن اسے صرف 6502 کہا جاتا ہے۔



ماضی کا ایک مشہور کمپیوٹر کموڈور_64 کہلاتا ہے۔ 6502 6500 خاندان کا ایک مائکرو پروسیسر ہے۔ کموڈور_64 کمپیوٹر 6510 مائکرو پروسیسر استعمال کرتا ہے۔ 6510 مائکرو پروسیسر 6500 µP کا ہے۔ 6502 µP کا انسٹرکشن سیٹ تقریباً تمام 6510 µP کی ہدایات ہے۔ اس باب اور اگلے باب کا علم commodore_64 کمپیوٹر پر مبنی ہے۔ اس علم کو آن لائن کیریئر کورس کے اس حصے میں جدید کمپیوٹر فن تعمیر اور جدید آپریٹنگ سسٹمز کی وضاحت کے لیے بنیاد کے طور پر استعمال کیا جاتا ہے۔





کمپیوٹر فن تعمیر سے مراد کمپیوٹر کے مدر بورڈ کے اجزاء ہیں اور اس کی وضاحت ہے کہ ڈیٹا ہر جزو کے اندر کس طرح بہتا ہے، خاص طور پر مائیکرو پروسیسر، ڈیٹا کس طرح اجزاء کے درمیان بہتا ہے، اور یہ بھی کہ ڈیٹا کس طرح سے تعامل کرتا ہے۔ ڈیٹا کا واحد ڈیٹام ہے۔ کمپیوٹر کے کمپیوٹر فن تعمیر کا مطالعہ کرنے کا ایک مؤثر طریقہ مدر بورڈ کی اسمبلی زبان کا مطالعہ کرنا ہے۔

کموڈور_64 کمپیوٹر کو 8 بٹ کمپیوٹر لفظ کا کمپیوٹر کہا جاتا ہے۔ اس کا مطلب یہ ہے کہ معلومات کو آٹھ بٹ بائنری کوڈز کی شکل میں ذخیرہ، منتقل، اور ہیرا پھیری کی جاتی ہے۔



کموڈور 64 مدر بورڈ کا بلاک ڈایاگرام
کموڈور 64 مدر بورڈ کا بلاک ڈایاگرام یہ ہے:


تصویر 4.1 کموڈور_64 سسٹم یونٹ کا بلاک ڈایاگرام

6510 مائکرو پروسیسر کو 6502 مائکرو پروسیسر کے طور پر تصور کریں۔ کل میموری بائٹس کی ایک سیریز ہے (8 بٹس فی بائٹ)۔ بے ترتیب رسائی (پڑھنا/لکھنا) میموری ہے جس پر بائٹس لکھی یا مٹائی جا سکتی ہیں۔ جب کمپیوٹر کی پاور بند ہو جاتی ہے، تو بے ترتیب رسائی میموری (RAM) میں موجود تمام معلومات مٹ جاتی ہیں۔ صرف پڑھنے کے لیے میموری (ROM) بھی ہے۔ جب کمپیوٹر کی پاور بند ہو جاتی ہے تو ROM میں معلومات باقی رہتی ہیں (مٹائی نہیں جاتی ہیں)۔

ان پٹ/آؤٹ پٹ پورٹ (سرکٹ) ہے جسے خاکہ میں ان پٹ/آؤٹ پٹ ڈیوائسز کہا جاتا ہے۔ اس بندرگاہ کو ان بندرگاہوں کے ساتھ الجھن میں نہیں ڈالنا چاہئے جو کمپیوٹر سسٹم یونٹ کے بائیں اور دائیں یا سامنے اور پیچھے عمودی سطحوں پر نظر آتی ہیں۔ یہ دو مختلف چیزیں ہیں۔ اس اندرونی بندرگاہ سے پیری فیرلز جیسے ہارڈ ڈسک (یا فلاپی ڈسک)، کی بورڈ اور مانیٹر کے کنکشنز کو خاکہ میں نہیں دکھایا گیا ہے۔

خاکہ میں تین بسیں ہیں (بجلی کے بہت چھوٹے تار کنڈکٹرز کے گروپ)۔ ہر تار تھوڑا سا 1 یا بٹ 0 منتقل کر سکتا ہے۔ ڈیٹا بس، ایک وقت میں آٹھ بٹ بائٹ (ایک گھڑی کی نبض) کو RAM اور ان پٹ/آؤٹ پٹ پورٹ (ان پٹ/آؤٹ پٹ ڈیوائسز) میں منتقل کرنے کے لیے دو طرفہ ہے۔ ڈیٹا بس آٹھ بٹس چوڑی ہے۔

تمام اجزاء ایڈریس بس سے جڑے ہوئے ہیں۔ ایڈریس بس مائکرو پروسیسر سے یک طرفہ ہے۔ ایڈریس بس کے لیے سولہ کنڈکٹر ہیں، اور ہر ایک میں ایک بٹ (1 یا 0) ہوتا ہے۔ ایک گھڑی کی نبض میں سولہ بٹس بھیجے جاتے ہیں۔

وہاں کنٹرول بس ہے۔ کنٹرول بس کے کچھ کنڈکٹر مائکرو پروسیسر سے ایک ایک بٹ کو دوسرے اجزاء میں منتقل کریں گے۔ کچھ کنٹرول لائنیں بٹس کو ان پٹ/آؤٹ پٹ (IO) پورٹ سے مائکرو پروسیسر تک لے جاتی ہیں۔

کمپیوٹر میموری
RAM اور ROM کو ایک میموری اسمبلی سمجھا جاتا ہے۔ اس اسمبلی کو خاکے کے لحاظ سے اس طرح دکھایا گیا ہے جہاں ہیکساڈیسیمل نمبرز کا '$' سابقہ ​​ہے:


تصویر 4.11 کموڈور 64 کمپیوٹر کے لیے میموری لے آؤٹ

RAM 0000 سے ہے۔ 16 ڈی ایف ایف ایف کو 16 جو $0000 سے $DFFF تک لکھا جاتا ہے۔ 6502 µP اسمبلی لینگویج کے ساتھ، ایک ہیکساڈیسیمل نمبر کو '$' کے ساتھ سابقہ ​​لگایا جاتا ہے اور 16 یا H یا ہیکس کے ساتھ لاحقہ (سب اسکرپٹڈ) نہیں ہوتا ہے۔ کمپیوٹر کے بند ہونے پر RAM میں موجود کوئی بھی معلومات بند ہو جاتی ہے۔ ROM $E000 سے $FFFF تک شروع ہوتا ہے۔ اس میں سب روٹین ہیں جو کمپیوٹر کے بند ہونے پر بند نہیں ہوتے۔ یہ سب روٹینز عام طور پر استعمال ہونے والے معمولات ہیں جو پروگرامنگ میں مدد کرتے ہیں۔ یوزر پروگرام انہیں کال کرتا ہے (اگلے باب کا حوالہ دیں)۔

$0200 سے $D000 تک کی جگہ (بائٹس) صارف کے پروگراموں کے لیے ہے۔ $D000 سے $DFFF تک کی جگہ ان معلومات کے لیے ہے جو براہ راست پیری فیرلز (ان پٹ/آؤٹ پٹ ڈیوائسز) سے متعلق ہے۔ یہ آپریٹنگ سسٹم کا حصہ ہے۔ لہذا، کموڈور-64 کمپیوٹر کا آپریٹنگ سسٹم دو اہم حصوں میں ہے: ROM کا وہ حصہ جو کبھی بند نہیں ہوتا اور وہ حصہ جو $D000 سے $DFFF تک جو پاور بند ہونے پر بند ہوجاتا ہے۔ اس IO (ان پٹ/آؤٹ پٹ) ڈیٹا کو ہر بار کمپیوٹر کے آن ہونے پر ڈسک سے لوڈ کرنا ہوتا ہے۔ آج، اس طرح کے ڈیٹا کو پیریفیرل ڈرائیور کہا جاتا ہے۔ پیری فیرلز ان پٹ/آؤٹ پٹ ڈیوائس پورٹ سے شروع ہوتے ہیں مدر بورڈ پر کنکشن کے ذریعے کمپیوٹر کی عمودی سطحوں پر قابل شناخت بندرگاہوں سے جن سے مانیٹر، کی بورڈ وغیرہ منسلک ہوتے ہیں اور خود پیری فیرلز (مانیٹر، کی بورڈ وغیرہ) سے منسلک ہوتے ہیں۔ .)

میموری 2 پر مشتمل ہے۔ 16 = 65,536 بائٹ مقامات۔ ہیکساڈیسیمل شکل میں، یہ 10000 ہیں۔ 16 = 10000 ایچ = 10000 ہیکس = $10000 مقامات۔ کمپیوٹنگ میں، بیس ٹو، بیس ٹین، بیس سولہ وغیرہ میں گنتی 0 سے شروع ہوتی ہے نہ کہ 1 سے۔ لہذا، پہلی لوکیشن دراصل 0000000000000000 کا لوکیشن نمبر ہے۔ 2 = 0 10 = 0000 16 = $0000۔ 6502 µP اسمبلی لینگویج میں، ایڈریس لوکیشن کی شناخت $ کے ساتھ لگائی گئی ہے اور اس میں کوئی لاحقہ یا سب اسکرپٹ نہیں ہے۔ آخری مقام 1111111111111111 کا مقام نمبر ہے۔ 2 = 65,535 10 = ایف ایف ایف ایف 16 = $FFFF نہ کہ 10000000000000000 2 ، یا 65,536 10 ، یا 10000 16 ، یا $10000۔ 1000000000000000 2 ، 65,536 10 ، 10000 16 ، یا $10000 بائٹ مقامات کی کل تعداد دیتا ہے۔

یہاں، 2 16 = 65,536 = 64 x 1024 = 64 x 2 10 = 64 Kbytes (کلو بائٹس)۔ کموڈور-64 نام میں 64 کے لاحقہ کا مطلب کل میموری (RAM اور ROM) کا 64KB ہے۔ ایک بائٹ 8 بٹس ہے، اور 8 بٹس میموری میں ایک بائٹ کے مقام پر جائیں گے۔

میموری کی 64 Kbytes صفحات میں تقسیم کیا جاتا ہے. ہر صفحہ 0100 ہے۔ 16 = 256 10 بائٹ مقامات. پہلے 256 10 = پہلے 0100 16 مقامات صفحہ 0 ہے۔ دوسرا صفحہ 1 ہے، تیسرا صفحہ 2 ہے، وغیرہ۔

65,536 مقامات کو ایڈریس کرنے کے لیے، ہر مقام (پتہ) کے لیے 16 بٹس ضروری ہیں۔ لہذا، مائکرو پروسیسر سے میموری تک ایڈریس بس 16 لائنوں پر مشتمل ہے۔ ایک لائن ایک بٹ کے لیے۔ تھوڑا سا یا تو 1 یا 0 ہے۔

6502 µP رجسٹر
ایک رجسٹر بائٹ میموری کی جگہ کے لیے بائٹ سیل کی طرح ہوتا ہے۔ 6502 µP کے چھ رجسٹر ہیں: پانچ 8 بٹ رجسٹر اور ایک 16 بٹ رجسٹر۔ 16 بٹ رجسٹر کو پروگرام کاؤنٹر کہا جاتا ہے جسے مختصراً PC کہا جاتا ہے۔ یہ اگلی ہدایات کے لیے میموری ایڈریس رکھتا ہے۔ ایک اسمبلی لینگویج پروگرام ہدایات پر مشتمل ہوتا ہے جو میموری میں رکھی جاتی ہیں۔ میموری میں کسی خاص بائٹ لوکیشن کو ایڈریس کرنے کے لیے سولہ (16) مختلف بٹس کی ضرورت ہوتی ہے۔ ایک خاص گھڑی کی نبض پر، یہ بٹس ایڈریس بس کی 16-بٹ ایڈریس لائنوں کو ہدایت پڑھنے کے لیے بھیجے جاتے ہیں۔ 6502 µP کے تمام رجسٹروں کو اس طرح دکھایا گیا ہے:


تصویر 4.12 6502 µP رجسٹرز

پروگرام کاؤنٹر یا پی سی کو خاکہ میں 16 بٹ رجسٹر کے طور پر دیکھا جا سکتا ہے۔ کم اہم آٹھ بٹس کو پروگرام کاؤنٹر لو کے لیے پی سی ایل کا لیبل لگایا گیا ہے۔ پروگرام کاؤنٹر ہائی کے لیے اعلیٰ اہم آٹھ بٹس پر PCH کا لیبل لگایا گیا ہے۔ کموڈور-64 کے لیے میموری میں ایک ہدایت ایک، دو، یا تین بائٹس پر مشتمل ہو سکتی ہے۔ پی سی میں 16 بٹس اگلے ہدایات کی طرف اشارہ کرتے ہیں جس پر عمل کیا جائے، میموری میں۔ مائیکرو پروسیسر میں موجود سرکٹس میں سے دو کو ریاضی منطقی یونٹ اور انسٹرکشن ڈیکوڈر کہا جاتا ہے۔ اگر موجودہ انسٹرکشن جس پر µP (مائکرو پروسیسر) میں کارروائی کی جارہی ہے ایک بائٹ لمبی ہے، تو یہ دونوں سرکٹس اگلی ہدایات کے لیے پی سی کو 1 یونٹ تک بڑھاتے ہیں۔ اگر موجودہ انسٹرکشن جس پر µP میں کارروائی کی جا رہی ہے وہ دو بائٹس لمبی ہے، یعنی یہ میموری میں لگاتار دو بائٹس پر قبضہ کرتی ہے، یہ دونوں سرکٹس اگلی ہدایات کے لیے PC کو 2 یونٹ تک بڑھاتے ہیں۔ اگر موجودہ انسٹرکشن جس پر µP میں کارروائی کی جا رہی ہے وہ تین بائٹس لمبی ہے، یعنی یہ میموری میں لگاتار تین بائٹس پر قبضہ کرتی ہے، یہ دونوں سرکٹس اگلی ہدایات کے لیے پی سی کو 3 یونٹ تک بڑھاتے ہیں۔

جمع کرنے والا 'A' ایک آٹھ بٹ کا عمومی مقصد کا رجسٹر ہے جو زیادہ تر ریاضی اور منطقی کارروائیوں کے نتائج کو محفوظ کرتا ہے۔

'X' اور 'Y' رجسٹر ہر ایک پروگرام کے مراحل کو شمار کرنے کے لیے استعمال ہوتے ہیں۔ پروگرامنگ میں گنتی 0 سے شروع ہوتی ہے۔ اس لیے انہیں انڈیکس رجسٹر کہا جاتا ہے۔ ان کے کچھ اور مقاصد ہیں۔

اگرچہ اسٹیک پوائنٹر رجسٹر، 'S' میں 9 بٹس ہیں جنہیں آٹھ بٹ رجسٹر سمجھا جاتا ہے۔ اس کا مواد رینڈم ایکسیس میموری (RAM) کے صفحہ 1 میں بائٹ مقام کی طرف اشارہ کرتا ہے۔ صفحہ 1 بائٹ $0100 سے شروع ہوتا ہے (256 10 ) سے بائٹ $01FF (511 10 )۔ جب کوئی پروگرام چل رہا ہوتا ہے، تو یہ میموری میں ایک انسٹرکشن سے اگلی لگاتار انسٹرکشن میں منتقل ہوتا ہے۔ تاہم، یہ ہمیشہ کیس نہیں ہے. ایسے اوقات ہوتے ہیں جب یہ ایک میموری ایریا سے دوسرے میموری ایریا میں چھلانگ لگاتا ہے تاکہ وہاں لگاتار ہدایات کو جاری رکھ سکے۔ RAM میں صفحہ 1 اسٹیک کے طور پر استعمال ہوتا ہے۔ اسٹیک ایک بڑا RAM میموری ایریا ہے جس میں کوڈ کے تسلسل کے لیے اگلے پتے ہوتے ہیں جہاں سے چھلانگ لگتی ہے۔ جمپنگ ہدایات والے کوڈ اسٹیک میں نہیں ہیں۔ وہ میموری میں کہیں اور ہیں. تاہم، جمپ ٹو ہدایات پر عمل درآمد کے بعد، تسلسل کے پتے (کوڈ کے حصے نہیں) اسٹیک میں ہوتے ہیں۔ چھلانگ یا شاخ کی ہدایات کے نتیجے میں انہیں وہاں دھکیل دیا گیا۔

P کا آٹھ بٹ پروسیسر اسٹیٹس رجسٹر ایک خاص قسم کا رجسٹر ہے۔ انفرادی بٹس ایک دوسرے سے منسلک یا جڑے ہوئے نہیں ہیں۔ وہاں کے ہر بٹ کو جھنڈا کہا جاتا ہے اور دوسروں سے آزادانہ طور پر تعریف کی جاتی ہے۔ جھنڈوں کے معانی حسب ضرورت درج ذیل میں دیے گئے ہیں۔

ہر رجسٹر کے لیے پہلا اور آخری بٹ انڈیکس پچھلے خاکے میں ہر رجسٹر کے اوپر اشارہ کیا گیا ہے۔ رجسٹر میں بٹ انڈیکس (پوزیشن) کی گنتی دائیں جانب 0 سے شروع ہوتی ہے۔

بائنری، ہیکساڈیسیمل اور ڈیسیمل میں میموری پیجز
مندرجہ ذیل جدول بائنری، ہیکساڈیسیمل اور ڈیسیمل میں میموری کے صفحات کا آغاز دکھاتا ہے۔

ہر صفحہ میں 1,0000,0000 ہیں۔ 2 بائٹس کی تعداد جو 100 کے برابر ہے۔ ایچ بائٹس کی تعداد جو کہ 256 کے برابر ہے۔ 10 بائٹس کی تعداد پچھلے میموری ڈایاگرام میں، صفحات کو صفحہ 0 سے اوپر جانے اور نیچے نہ جانے کی طرف اشارہ کیا گیا ہے جیسا کہ ٹیبل میں بتایا گیا ہے۔

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

اس باب کا بقیہ حصہ تمام پچھلی معلومات کا استعمال کرتے ہوئے 6502 µP اسمبلی زبان کی وضاحت کرتا ہے۔ زبان کو جلدی سمجھنے کے لیے قاری کو بیس دس کی بجائے بیس سولہ میں جوڑنا اور گھٹانا پڑتا ہے۔ یہ اصل میں بیس ٹو سمجھا جاتا ہے، لیکن بیس دو میں حساب لگانا بوجھل ہے۔ یاد رکھیں کہ بیس ٹو میں دو نمبروں کو جوڑتے وقت، کیری بیس ٹین کی طرح 1 ہوتی ہے۔ لیکن بیس دو میں دو نمبروں کو گھٹاتے وقت، ایک قرضہ دو ہوتا ہے نہ کہ بیس دس کی طرح۔ بیس سولہ میں دو نمبروں کو جوڑتے وقت، کیری بیس ٹین کی طرح 1 ہوتی ہے۔ لیکن بیس سولہ میں دو نمبروں کو گھٹاتے وقت، ایک قرض سولہ ہوتا ہے نہ کہ بیس دس کی طرح۔

4.2 ڈیٹا کی منتقلی کی ہدایات

6502 µP کے لیے اسمبلی لینگوئج ڈیٹا ٹرانسفر ہدایات کے درج ذیل جدول پر غور کریں:

جب بائٹ (8 بٹس) کو میموری بائٹ کے مقام سے جمع کرنے والے رجسٹر، ایکس رجسٹر، یا Y رجسٹر میں کاپی کیا جاتا ہے، تو یہ لوڈ ہو رہا ہے۔ جب ان میں سے کسی بھی رجسٹر سے بائٹ کو میموری بائٹ کے مقام پر کاپی کیا جاتا ہے، تو وہ منتقل ہو رہا ہے۔ جب ایک بائٹ کو ایک رجسٹر سے دوسرے رجسٹر میں کاپی کیا جاتا ہے، وہ اب بھی منتقل ہو رہا ہے۔ ٹیبل کے دوسرے کالم میں، تیر بائٹ کے لیے کاپی کی سمت دکھاتا ہے۔ باقی چار کالم مختلف ایڈریسنگ موڈ دکھاتے ہیں۔

ایڈریسنگ موڈ کالم میں ایک اندراج ہیکساڈیسیمل میں ہدایات کے متعلقہ یادداشت کے حصے کے لیے اصل بائٹ کوڈ ہے۔ AE، مثال کے طور پر، LDX کا اصل بائٹ کوڈ ہے جو کہ AE جیسے مطلق ایڈریسنگ موڈ میں میموری سے X رجسٹر پر بائٹ لوڈ کرنا ہے۔ 16 = 10101110 2 . لہذا، میموری بائٹ مقام میں LDX کے بٹس 10101110 ہیں۔

نوٹ کریں کہ ہدایات کے LDX یادداشت کے حصے کے لیے، تین ممکنہ بائٹس ہیں جو A2، AE، اور A6 ہیں، اور ہر ایک مخصوص ایڈریسنگ موڈ کے لیے ہے۔ جب X رجسٹر میں لوڈ ہونے والے بائٹ کو میموری بائٹ کے مقام سے کاپی نہیں کیا جانا ہے، تو ویلیو کو ہیکساڈیسیمل یا ڈیسیمل میں ہدایات میں LDX یادداشت کے ساتھ (بعد میں) ٹائپ کرنا ہوگا۔ اس باب میں، ایسی قدریں ہیکساڈیسیمل میں ٹائپ کی گئی ہیں۔ یہ فوری ایڈریسنگ ہے، لہذا LDX کی نمائندگی کرنے کے لیے میموری میں اصل بائٹ A2 ہے۔ 16 = 10100010 2 اور AE نہیں 16 جو کہ 10101110 کے برابر ہے۔ 2 .

ٹیبل میں، ایڈریسنگ موڈ کے عنوانات کے تحت تمام بائٹس کو آپریشن کوڈز کہا جاتا ہے جسے مختصراً اوپکوڈز کہا جاتا ہے۔ ایڈریسنگ موڈ کے لحاظ سے ایک یادداشت کے لیے ایک سے زیادہ آپکوڈ ہو سکتے ہیں۔

نوٹ: کمپیوٹر سسٹم یونٹ میں لفظ 'لوڈ' کے دو معنی ہوسکتے ہیں: یہ کسی فائل کو ڈسک سے کمپیوٹر کی میموری پر لوڈ کرنے کا حوالہ دے سکتا ہے یا یہ بائٹ کو میموری بائٹ کے مقام سے مائکرو پروسیسر رجسٹر میں منتقل کرنے کا حوالہ دے سکتا ہے۔ .

6502 µP کے لیے جدول میں چار سے زیادہ ایڈریسنگ موڈز ہیں۔

جب تک کہ دوسری صورت میں بیان نہ کیا گیا ہو، اس باب میں تمام صارف پروگرامنگ کوڈ ایڈریس 0200 سے شروع ہوتا ہے۔ 16 جو میموری میں صارف کے علاقے کا آغاز ہے۔

میموری ایم اور ایکومولیٹر اے

جمع کرنے والے کو میموری

فوری خطاب
درج ذیل ہدایت نمبر FF کو محفوظ کرتی ہے۔ 16 = 255 10 جمع کرنے والے میں:

LDA #$FF

'$' نہ صرف میموری ایڈریس کی شناخت کے لیے استعمال ہوتا ہے۔ عام طور پر، اس کا استعمال اس بات کی نشاندہی کرنے کے لیے کیا جاتا ہے کہ اگلا نمبر ہیکسا ڈیسیمل ہے۔ اس صورت میں، $FF کسی بھی میموری بائٹ لوکیشن کا پتہ نہیں ہے۔ یہ نمبر 255 ہے۔ 10 ہیکساڈیسیمل میں بیس 16 یا اس کے دیگر مساوی سبسکرپٹس کو اسمبلی کی زبان کی ہدایات میں نہیں لکھا جانا چاہیے۔ '#' اشارہ کرتا ہے کہ اس کے بعد جو کچھ بھی آتا ہے وہ قیمت ہے جو جمع کرنے والے رجسٹر میں ڈالی جائے گی۔ قیمت بیس دس میں بھی لکھی جا سکتی ہے، لیکن اس باب میں ایسا نہیں کیا گیا ہے۔ '#' کا مطلب ہے فوری خطاب۔

ایک یادداشت اس کے متعلقہ انگریزی فقرے سے کچھ مشابہت رکھتی ہے۔ 'LDA #$FF' کا مطلب ہے نمبر 255 لوڈ کریں۔ 10 جمع کرنے والے A میں۔ چونکہ یہ پچھلے جدول سے فوری خطاب ہے، LDA A9 ہے نہ کہ AD یا A5۔ بائنری میں A9 101010001 ہے۔ لہذا، اگر LDA کے لیے A9 میموری میں $0200 ایڈریس میں ہے، تو $FF $0301 = 0300 + 1 ایڈریس میں ہے۔ #$FF عین مطابق LDA یادداشت کے لیے آپرینڈ ہے۔

مطلق خطاب
اگر $FF کی قیمت میموری میں $0333 مقام پر ہے، تو پچھلی ہدایت یہ ہے:

ایل ڈی اے $0333

# کی غیر موجودگی کو نوٹ کریں۔ اس صورت میں، # کی عدم موجودگی کا مطلب یہ ہے کہ جو کچھ اس کے بعد آتا ہے وہ میموری ایڈریس ہے نہ کہ دلچسپی کی قدر (وہ قدر نہیں جو جمع کرنے والے میں ڈالی جائے)۔ لہذا، LDA کے لیے opcode، اس بار، AD ہے نہ کہ A9 یا A5۔ یہاں LDA کے لیے اوپرینڈ $0333 ایڈریس ہے نہ کہ $FF ویلیو۔ $FF $0333 مقام پر ہے جو کہ بہت دور ہے۔ 'LDA $0333' ہدایات میموری میں لگاتار تین مقامات پر قابض ہیں، اور دو نہیں، جیسا کہ پچھلی مثال نے کیا تھا۔ LDA کے لیے 'AD' $0200 کے مقام پر ہے۔ 0333 کا نچلا بائٹ جو 33 ہے $0301 مقام پر ہے۔ $0333 کا اعلی بائٹ جو 03 ہے $0302 کے مقام پر ہے۔ یہ ایک چھوٹی سی ختمی ہے جسے 6502 اسمبلی زبان استعمال کرتی ہے۔ مختلف مائیکرو پروسیسرز کی اسمبلی زبانیں مختلف ہوتی ہیں۔

یہ مطلق خطابت کی ایک مثال ہے۔ $0333 اس مقام کا پتہ ہے جس میں $FF ہے۔ ہدایات تین لگاتار بائٹس پر مشتمل ہیں اور اس میں $FF یا اس کا اصل بائٹ مقام شامل نہیں ہے۔

زیرو پیج ایڈریسنگ

فرض کریں کہ $FF قدر صفحہ صفر میں $0050 میموری کی جگہ پر ہے۔ صفر صفحہ کے بائٹ مقامات $0000 سے شروع ہوتے ہیں اور $00FF پر ختم ہوتے ہیں۔ یہ 256 ہیں۔ 10 مجموعی طور پر مقامات. کموڈور-64 میموری کا ہر صفحہ 256 ہے۔ 10 طویل یاد رکھیں کہ میموری میں صفر صفحہ کی جگہ میں تمام ممکنہ مقامات کے لیے ہائی بائٹ صفر ہے۔ صفر صفحہ ایڈریسنگ موڈ مطلق ایڈریسنگ موڈ جیسا ہی ہے، لیکن 00 کا اعلی بائٹ ہدایات میں ٹائپ نہیں کیا گیا ہے۔ لہذا، $FF کو $0050 کے مقام سے جمع کرنے والے میں لوڈ کرنے کے لیے، صفر صفحہ ایڈریسنگ موڈ کی ہدایت یہ ہے:

LDA $50

LDA A5 ہونے کے ساتھ A9 یا AD، A5 نہیں ہے۔ 16 = 10100101 2 . یاد رکھیں کہ میموری میں ہر بائٹ 8 سیلز کا ہوتا ہے اور ہر سیل میں تھوڑا سا ہوتا ہے۔ یہاں کی ہدایات دو لگاتار بائٹس پر مشتمل ہیں۔ LDA کے لیے A5 $0200 میموری والے مقام پر ہے اور $50 ایڈریس، 00 کے زیادہ بائٹ کے بغیر، $0301 کے مقام پر ہے۔ 00 کی غیر موجودگی، جس نے کل 64K میموری میں ایک بائٹ استعمال کیا ہو گا، میموری کی جگہ کو کم کرتا ہے۔

میموری کو جمع کرنے والا

مطلق خطاب
درج ذیل ہدایات ایک بائٹ ویلیو کو کاپی کرتی ہے، چاہے وہ کچھ بھی ہو، جمع کرنے والے سے لے کر $1444 کے میموری مقام تک:

وہ $1444 ہیں۔

کہا جاتا ہے کہ یہ جمع کرنے والے سے میموری میں منتقل ہوتا ہے۔ یہ لوڈ نہیں ہو رہا ہے۔ لوڈنگ اس کے برعکس ہے۔ STA کے لیے opcode بائٹ 8D ہے۔ 16 = 10001101 2 . یہ ہدایت میموری میں لگاتار تین بائٹس پر مشتمل ہے۔ 8 ڈی 16 $0200 کے مقام پر ہے۔ 44 16 $1444 کا پتہ $0201 مقام پر ہے۔ اور 14 16 $0202 کے مقام پر ہے - تھوڑا سا خاتمہ۔ اصل بائٹ جو کاپی کیا گیا ہے وہ ہدایت کا حصہ نہیں ہے۔ صفر صفحہ ایڈریسنگ (ٹیبل میں) کے لیے 8D نہیں 85 یہاں STA کے لیے استعمال کیے گئے ہیں۔

زیرو پیج ایڈریسنگ
درج ذیل ہدایات ایک بائٹ ویلیو کو کاپی کرتی ہے، چاہے وہ کچھ بھی ہو، جمع کرنے والے سے لے کر $0050 کی میموری کے مقام تک صفحہ صفر میں:

STA $0050

یہاں STA کے لیے opcode بائٹ 85 ہے۔ 16 = 10000101 2 . یہ ہدایت میموری میں لگاتار دو بائٹس پر مشتمل ہے۔ 85 16 $0200 مقام پر ہے۔ 50 16 $0050 کا پتہ $0201 میں ہے۔ اینڈیننس کا مسئلہ یہاں پیدا نہیں ہوتا کیونکہ ایڈریس میں صرف ایک بائٹ ہے جو لوئر بائٹ ہے۔ اصل بائٹ جو کاپی کیا گیا ہے وہ ہدایت کا حصہ نہیں ہے۔ 85 اور صفر صفحہ ایڈریسنگ کے لیے 8D نہیں STA کے لیے یہاں استعمال کیا جاتا ہے۔

بائٹ کو جمع کرنے والے سے میموری میں کسی مقام پر منتقل کرنے کے لیے فوری ایڈریسنگ کا استعمال کرنا کوئی معنی نہیں رکھتا۔ اس کی وجہ یہ ہے کہ فی الفور ایڈریسنگ کی ہدایات میں $FF جیسی اصل قدر کا حوالہ دینا ضروری ہے۔ لہذا، µP میں موجود بائٹ ویلیو کو کسی بھی میموری والے مقام پر منتقل کرنے کے لیے فوری ایڈریسنگ ممکن نہیں ہے۔

LDX، STX، LDY، اور STY میمونکس
LDX اور STX بالترتیب LDA اور STA سے ملتے جلتے ہیں۔ لیکن یہاں، X رجسٹر استعمال ہوتا ہے نہ کہ A (جمع کرنے والا) رجسٹر۔ LDY اور STY بالترتیب LDA اور STA سے ملتے جلتے ہیں۔ لیکن یہاں، Y رجسٹر استعمال ہوتا ہے نہ کہ A رجسٹر۔ ہیکساڈیسیمل میں ہر ایک آپکوڈ کے لیے جدول 4.21 سے رجوع کریں جو ایک خاص یادداشت اور ایک مخصوص ایڈریسنگ موڈ سے مطابقت رکھتا ہے۔

رجسٹر سے رجسٹر ٹرانسفرز
جدول 4.21 میں ہدایات کے پچھلے دو سیٹ میموری/مائکرو پروسیسر-رجسٹر کاپینگ (منتقلی) اور رجسٹر/رجسٹر کاپینگ (منتقلی) سے متعلق ہیں۔ TAX, TXA, TAY, TYA, TSX اور TXS ہدایات مائیکرو پروسیسر میں موجود رجسٹر سے اسی مائکرو پروسیسر کے دوسرے رجسٹر میں کاپی (منتقلی) کرتی ہیں۔

بائٹ کو A سے X تک کاپی کرنے کے لیے، ہدایت یہ ہے:

ٹیکس

بائٹ کو X سے A میں کاپی کرنے کے لیے، ہدایت یہ ہے:

TX

بائٹ کو A سے Y میں کاپی کرنے کے لیے، ہدایت یہ ہے:

ہاتھ

بائٹ کو Y سے A میں کاپی کرنے کے لیے، ہدایت یہ ہے:

TYA

کموڈور 64 کمپیوٹر کے لیے، اسٹیک میموری میں صفحہ 0 کے بالکل بعد صفحہ 1 ہے۔ ہر دوسرے صفحہ کی طرح، یہ 25610 پر مشتمل ہے۔ 10 بائٹ مقامات، $0100 سے $01FF تک۔ عام طور پر، ایک پروگرام میموری میں ایک انسٹرکشن سے اگلی لگاتار انسٹرکشن تک چلتا ہے۔ وقتاً فوقتاً، ایک دوسرے میموری کوڈ (ہدایات کا سیٹ) کے حصے میں چھلانگ لگتی ہے۔ اسٹیک ایریا میموری (RAM) میں اگلے ہدایات کے پتے ہیں جہاں سے پروگرام کے تسلسل کے لیے چھلانگیں (یا شاخیں) چھوڑ دی گئی ہیں۔

اسٹیک پوائنٹر 'S' 6502 µP میں ایک 9 بٹ رجسٹر ہے۔ پہلا بٹ (بائیں طرف) ہمیشہ 1 ہوتا ہے۔ صفحہ اول میں تمام بائٹ لوکیشن ایڈریس 1 سے شروع ہوتے ہیں اس کے بعد 256 کے لیے 8 مختلف بٹس ہوتے ہیں۔ 10 مقامات اسٹیک پوائنٹر کے پاس صفحہ 1 میں مقام کا پتہ ہوتا ہے جس میں اگلی ہدایات کا پتہ ہوتا ہے جسے پروگرام کو موجودہ (جمپڈ ٹو) کوڈ سیگمنٹ پر عمل کرنے کے بعد واپس آنا ہوتا ہے اور اسے جاری رکھنا ہوتا ہے۔ چونکہ اسٹیک (صفحہ ایک) کے تمام پتوں کا پہلا بٹ 1 سے شروع ہوتا ہے، اسٹیک پوائنٹر رجسٹر کو صرف باقی آٹھ بٹس رکھنے کی ضرورت ہوتی ہے۔ سب کے بعد، اس کا پہلا بٹ، جو سب سے بائیں بٹ ہے (نواں بٹ اس کے دائیں سے شمار ہوتا ہے)، ہمیشہ 1 ہوتا ہے۔

بائٹ کو S سے X تک کاپی کرنے کے لیے، ہدایت یہ ہے:

ٹی ایس ایکس

بائٹ کو X سے S میں کاپی کرنے کے لیے، ہدایت یہ ہے:

TXT

رجسٹر سے رجسٹر کرنے کی ہدایات کوئی کام نہیں کرتی ہیں۔ وہ صرف یادداشت پر مشتمل ہیں۔ ہر یادداشت کا اپنا اوپکوڈ ہیکساڈیسیمل میں ہوتا ہے۔ یہ مضمر ایڈریسنگ موڈ میں ہے کیونکہ کوئی اوپرینڈ نہیں ہے (کوئی میموری ایڈریس، کوئی قدر نہیں)۔

نوٹ: کوئی X سے Y یا Y سے X منتقلی (کاپی کرنا) نہیں ہے۔

4.3 ریاضی کی کارروائیاں

سرکٹ، 6502 µP میں ریاضی کی منطق کی اکائی، ایک وقت میں صرف دو آٹھ بٹ نمبرز کا اضافہ کر سکتا ہے۔ یہ منہا نہیں کرتا، یہ ضرب نہیں دیتا، اور یہ تقسیم نہیں ہوتا۔ درج ذیل جدول ریاضی کی کارروائیوں کے لیے آپکوڈز اور ایڈریسنگ طریقوں کو دکھاتا ہے:

نوٹ: ریاضی کی کارروائیوں اور دیگر قسم کے آپریشنز (یعنی تمام 6502 میمونکس) کے لیے تمام یادداشتیں ایک بائٹ آپریشن (op) کوڈ لیتی ہیں۔ اگر میمونک کے لیے ایک سے زیادہ ایڈریسنگ موڈ ہیں، تو ایک ہی میمونک کے لیے مختلف اوپکوڈز ہوں گے: ایک فی ایڈریسنگ موڈ۔ ٹیبل میں C، D، اور V اسٹیٹس رجسٹر کے جھنڈے ہیں۔ ان کے معنی بعد میں بتائے جائیں گے جیسا کہ ضرورت پیش آئے گی۔

غیر دستخط شدہ نمبروں کا اضافہ
6502 µP کے ساتھ، دستخط شدہ نمبر دو کے تکمیلی نمبر ہیں۔ غیر دستخط شدہ اعداد عام مثبت اعداد ہیں جو صفر سے شروع ہوتے ہیں۔ لہذا، آٹھ بٹس کے بائٹ کے لیے، سب سے چھوٹی غیر دستخط شدہ نمبر 00000000 ہے 2 = 0 10 = 00 16 اور سب سے بڑا غیر دستخط شدہ نمبر 11111111 ہے۔ 2 = 255 10 = ایف ایف 16 . دو غیر دستخط شدہ نمبروں کے لیے، اضافہ یہ ہے:

A+M+C→A

اس کا مطلب یہ ہے کہ جمع کرنے والے کے 8 بٹ مواد کو ریاضی کی منطق یونٹ کے ذریعہ میموری سے بائٹ (8 بٹس) میں شامل کیا جاتا ہے۔ A اور M کے اضافے کے بعد، نویں بٹ تک کیری اسٹیٹس رجسٹر میں کیری فلیگ سیل میں جاتی ہے۔ پچھلے اضافے سے کوئی بھی پچھلا کیری بٹ جو اسٹیٹس رجسٹر میں ابھی بھی کیری فلیگ سیل میں ہے A اور M کے مجموعہ میں بھی شامل کیا جاتا ہے، جس سے A+M+C→A بنتا ہے۔ نتیجہ واپس جمع کرنے والے میں ڈال دیا جاتا ہے۔

اگر دلچسپی کا اضافہ ہے:

A + M

اور کوئی پچھلی کیری شامل کرنے کی ضرورت نہیں ہے، کیری فلیگ کو صاف کرنا ہوگا جو 0 بنا ہوا ہے، تاکہ اضافہ یہ ہو:

A+M+0→A جیسا کہ A+M→A

نوٹ: اگر M کو A میں شامل کیا جاتا ہے، اور 1 کیری ہوتی ہے کیونکہ نتیجہ 255 سے زیادہ ہوتا ہے۔ 10 = 11111111 2 = ایف ایف 16 یہ ایک نیا کیری ہے۔ 1 کا یہ نیا کیری خود بخود کیری فلیگ سیل کو بھیج دیا جاتا ہے اگر اسے آٹھ بٹس کے اگلے جوڑے کو سمیٹنے کے لیے درکار ہو (ایک اور A + M)۔

دو غیر دستخط شدہ آٹھ بٹس شامل کرنے کے لیے کوڈ
00111111 2 +00010101 2 3F جیسا ہی ہے۔ 16 + 15 16 جو کہ 63 کے برابر ہے۔ 10 +21 10 . نتیجہ 010101002 ہے۔ 2 جو کہ 54 کے برابر ہے۔ 16 اور 84 10 . نتیجہ آٹھ بٹس کے لیے زیادہ سے زیادہ تعداد سے باہر نہیں ہے جو کہ 255 ہے۔ 10 = 11111111 2 = ایف ایف 16 . لہذا، 1 ​​کا کوئی نتیجہ خیز کیری نہیں ہے۔ اسے دوسرے طریقے سے ڈالیں، نتیجے میں کیری 0 ہے۔ اضافے سے پہلے، 1 کی کوئی پچھلی کیری نہیں ہے۔ دوسرے الفاظ میں، پچھلی کیری 0 ہے۔ اس اضافے کو کرنے کا کوڈ ہو سکتا ہے:

سی ایل سی
LDA#$3F
ADC #$15

نوٹ: اسمبلی لینگویج ٹائپ کرتے وقت، کی بورڈ کی 'Enter' کلید ہر ہدایات کے آخر میں دبائی جاتی ہے۔ اس کوڈ میں تین ہدایات ہیں۔ پہلی ہدایات (CLC) کیری فلیگ کو صاف کرتی ہے اگر پچھلے اضافے میں 1 ہو۔ CLC صرف مضمر ایڈریسنگ موڈ میں کیا جا سکتا ہے۔ مضمر ایڈریسنگ موڈ کے لیے یادداشت کوئی آپرینڈ نہیں لیتا ہے۔ یہ پی کے اسٹیٹس رجسٹر کے کیری سیل کو صاف کرتا ہے۔ کلیئرنگ کا مطلب ہے کیری فلیگ سیل کو 0 کا بٹ دینا۔ کوڈ میں اگلی دو ہدایات فوری ایڈریسنگ موڈ کا استعمال کرتی ہیں۔ فوری ایڈریسنگ کے ساتھ، یادداشت کے لیے صرف ایک آپرینڈ ہے جو ایک نمبر ہے (اور نہ ہی میموری اور نہ ہی رجسٹر ایڈریس)۔ اور اس طرح، نمبر سے پہلے '#' ہونا ضروری ہے۔ '$' کا مطلب ہے کہ اس کے بعد آنے والا نمبر ہیکساڈیسیمل ہے۔

دوسری ہدایت نمبر 3F کو لوڈ کرتی ہے۔ 16 جمع کرنے والے میں تیسری ہدایات کے لیے، µP کا ریاضی منطقی یونٹ سرکٹ اسٹیٹس رجسٹر کے کیری فلیگ سیل کے 0 کی پچھلی (کلیئرڈ) کیری لیتا ہے اور اسے 15 میں شامل کرتا ہے۔ 16 نیز اس قدر کے ساتھ جو پہلے سے 3F میں ہے۔ 16 جمع کرنے والا اور مکمل نتیجہ کو جمع کرنے والے میں واپس رکھتا ہے۔ اس صورت میں، نتیجے میں 0 کیری ہوتی ہے۔ ALU (Arithmetic Logic Unit) اسٹیٹس رجسٹر کے کیری فلیگ سیل میں 0 بھیجتا ہے۔ پروسیسر اسٹیٹس رجسٹر اور اسٹیٹس رجسٹر کا مطلب ایک ہی ہے۔ اگر 1 کیری کا نتیجہ نکلتا ہے تو، ALU اسٹیٹس رجسٹر کے کیری فلیگ پر 1 بھیجتا ہے۔

پچھلے کوڈ کی تین لائنوں کو عمل میں لانے سے پہلے میموری میں ہونا ضروری ہے۔ CLC (امپلائیڈ ایڈریسنگ) کے لیے اوپکوڈ 1816 $0200 بائٹ لوکیشن میں ہے۔ اوپکوڈ A9 16 LDA کے لیے (فوری ایڈریسنگ) $0201 بائٹ لوکیشن میں ہے۔ نمبر 3F 10 $0202 بائٹ مقام پر ہے۔ اوپکوڈ 69 16 LDA کے لیے (فوری ایڈریسنگ) $0203 بائٹ لوکیشن میں ہے۔ نمبر 15 10 $0204 بائٹ مقام پر ہے۔

نوٹ: ایل ڈی اے ایک منتقلی (لوڈ) کی ہدایت ہے نہ کہ ریاضی کی ہدایت (میمونی)۔

دو غیر دستخط شدہ سولہ بٹس شامل کرنے کا کوڈ
6502 µP میں تمام رجسٹر بنیادی طور پر آٹھ بٹ رجسٹر ہیں، سوائے PC (پروگرام کاؤنٹر) جو کہ 16 بٹس کا ہے۔ یہاں تک کہ اسٹیٹس رجسٹر 8 بٹس چوڑا ہے، حالانکہ اس کے آٹھ بٹس ایک ساتھ کام نہیں کرتے ہیں۔ اس حصے میں، آٹھ بٹس کے پہلے جوڑے سے آٹھ بٹس کے دوسرے جوڑے تک کیری کے ساتھ، دو 16 غیر دستخط شدہ بٹس کے اضافے پر غور کیا گیا ہے۔ یہاں دلچسپی کی کیری آٹھویں بٹ پوزیشن سے نویں بٹ پوزیشن تک کیری ہے۔

نمبر 0010101010111111 ہونے دیں۔ 2 = 2ABF16 16 = 10,943 10 اور 001010101010010101 2 = 2A95 16 = 10,901 10 . رقم 0101010101010100 ہے۔ 2 = 5554 16 = 21,844 10 .

بیس دو میں ان دو غیر دستخط شدہ نمبروں کو شامل کرنا درج ذیل ہے:

مندرجہ ذیل جدول دائیں سے شروع ہونے والے آٹھویں بٹ سے نویں بٹ پوزیشن تک 1 کے لے جانے کے ساتھ وہی اضافہ دکھاتا ہے:

اس کوڈنگ میں، دو لوئر بائٹس پہلے شامل کیے جاتے ہیں۔ پھر، ALU (Arithmetic Logic Unit) 1 کی کیری کو آٹھویں بٹ پوزیشن سے نویں بٹ پوزیشن پر، اسٹیٹس رجسٹر میں کیری فلیگ سیل کو بھیجتا ہے۔ بغیر کیری کے 0 1 0 1 0 1 0 0 کا نتیجہ جمع کرنے والے کو جاتا ہے۔ پھر، کیری کے ساتھ بائٹس کا دوسرا جوڑا شامل کیا جاتا ہے۔ ADC یادداشت کا مطلب ہے پچھلی کیری کے ساتھ خود بخود شامل کرنا۔ اس صورت میں، پچھلی کیری، جو کہ 1 ہے، کو دوسرے اضافے سے پہلے تبدیل نہیں کرنا چاہیے۔ پہلے اضافے کے لیے، چونکہ کوئی پچھلی کیری اس مکمل اضافے کا حصہ نہیں ہے، اس لیے اسے صاف کرنا چاہیے (0 بنا دیا گیا)۔

بائٹس کے دو جوڑوں کے مکمل اضافے کے لیے، پہلا اضافہ یہ ہے:

A + M + 0 -> A

دوسرا اضافہ یہ ہے:

A + M + 1 -> A

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

سی ایل سی
ایل ڈی اے $0213
ADC $0215
; کوئی کلیئرنگ نہیں کیونکہ کیری فلیگ ویلیو کی ضرورت ہے۔
STA $0217
ایل ڈی اے $0214
ADC $0216
STA $0218

نوٹ کریں کہ 6502 اسمبلی لینگویج کے ساتھ، ایک سیمیکولن ایک تبصرہ شروع کرتا ہے۔ اس کا مطلب یہ ہے کہ پروگرام کے عمل میں، سیمی کالون اور اس کے دائیں طرف موجود ہر چیز کو نظر انداز کر دیا جاتا ہے۔ جو پروگرام پہلے لکھا جاتا ہے وہ ٹیکسٹ فائل میں پروگرامر کی پسند کے نام اور '.asm' ایکسٹینشن کے ساتھ محفوظ ہوتا ہے۔ پچھلا پروگرام قطعی پروگرام نہیں ہے جو میموری پر عملدرآمد کے لیے جاتا ہے۔ میموری میں متعلقہ پروگرام کو ترجمہ شدہ پروگرام کہا جاتا ہے جہاں یادداشتوں کو اوپکوڈز (بائٹس) سے تبدیل کیا جاتا ہے۔ کوئی بھی تبصرہ اسمبلی زبان کی ٹیکسٹ فائل میں رہتا ہے، اور ترجمہ شدہ پروگرام کے میموری تک پہنچنے سے پہلے ہی اسے چھین لیا جاتا ہے۔ درحقیقت، آج ڈسک میں دو فائلیں محفوظ ہیں: '.asm' فائل اور '.exe' فائل۔ '.asm' فائل پچھلی مثال میں موجود فائل ہے۔ '.exe' فائل '.asm' فائل ہے جس میں تمام تبصرے چھین لیے گئے ہیں، اور تمام یادداشتوں کی جگہ ان کے opcodes نے لے لی ہے۔ ٹیکسٹ ایڈیٹر میں کھولے جانے پر، '.exe' فائل ناقابل شناخت ہوتی ہے۔ جب تک کہ دوسری صورت میں بیان نہ کیا گیا ہو، اس باب کے مقصد کے لیے، '.exe' فائل کو $0200 کے مقام سے شروع ہونے والی میموری میں کاپی کیا جاتا ہے۔ یہ لوڈنگ کا دوسرا معنی ہے۔

شامل کیے جانے والے دو 16 بٹ نمبرز مطلق ایڈریسنگ کے لیے میموری میں چار بائٹس پر قبضہ کرتے ہیں: دو بائٹس فی نمبر (میموری بائٹس کی ایک ترتیب ہے)۔ مطلق ایڈریسنگ کے ساتھ، آپرینڈ ٹو اوپ کوڈ میموری میں ہے۔ خلاصہ نتیجہ دو بائٹس چوڑا ہے اور اسے میموری میں بھی رکھنا ہے۔ یہ کل 6 دیتا ہے۔ 10 = 6 16 ان پٹ اور آؤٹ پٹ کے لیے بائٹس۔ ان پٹ کی بورڈ سے نہیں ہیں اور آؤٹ پٹ مانیٹر یا پرنٹر سے نہیں ہے۔ ان پٹ میموری (RAM) میں ہیں اور آؤٹ پٹ (مجموعی نتیجہ) اس صورت حال میں میموری (RAM) میں واپس چلا جاتا ہے۔

کسی پروگرام کو انجام دینے سے پہلے، ترجمہ شدہ ورژن پہلے میموری میں ہونا ضروری ہے۔ پچھلے پروگرام کوڈ کو دیکھتے ہوئے، یہ دیکھا جا سکتا ہے کہ تبصرے کے بغیر ہدایات 19 بنتی ہیں 10 = 13 16 بائٹس لہذا، پروگرام میموری میں $0200 بائٹ لوکیشن سے $0200 + $13 - $1 = $0212 بائٹ لوکیشنز ($0200 سے شروع ہوتا ہے نہ کہ $0201 جس کا مطلب ہے - $1)۔ ان پٹ اور آؤٹ پٹ نمبرز کے لیے 6 بائٹس شامل کرنے سے تمام پروگرام $0212 + $6 = $0218 پر ختم ہوجاتا ہے۔ پروگرام کی کل لمبائی 19 ہے۔ 16 = 25 10 .

augend کا نچلا بائٹ $0213 ایڈریس میں ہونا چاہیے، اور اسی augend کا اونچا بائٹ $0214 ایڈریس میں ہونا چاہیے - تھوڑا سا ختم ہونا۔ اسی طرح، ایڈینڈ کا نچلا بائٹ $0215 ایڈریس میں ہونا چاہیے، اور اسی ایڈینڈ کا اونچا بائٹ $0216 ایڈریس میں ہونا چاہیے - تھوڑا سا اینڈاننس۔ رزلٹ کا نچلا بائٹ (رقم) $0217 ایڈریس میں ہونا چاہیے، اور اسی نتیجے کا زیادہ بائٹ $0218 ایڈریس میں ہونا چاہیے - تھوڑا سا اختتام۔

اوپکوڈ 18 16 CLC کے لیے (مضمون ایڈریسنگ) $0200 کی بائٹ لوکیشن میں ہے۔ 'LDA $0213' کے لیے اوپک کوڈ، یعنی AD 16 LDA (مطلق ایڈریسنگ) کے لیے، $0201 کے بائٹ مقام پر ہے۔ augend کا نچلا بائٹ جو 10111111 ہے $0213 کی میموری بائٹ لوکیشن میں ہے۔ یاد رکھیں کہ ہر اوپکوڈ ایک بائٹ پر قبضہ کرتا ہے۔ 'LDA $0213' کا '$0213' پتہ $0202 اور $0203 کے بائٹ مقامات پر ہے۔ 'LDA $0213' ہدایت augend کے نچلے بائٹ کو جمع کرنے والے پر لوڈ کرتی ہے۔

'ADC $0215' کے لیے opcode، یعنی 6D 16 ADC (مطلق ایڈریسنگ) کے لیے، $0204 کے بائٹ مقام پر ہے۔ اضافی کا نچلا بائٹ جو 10010101 ہے $0215 کے بائٹ مقام پر ہے۔ 'ADC $0215' کا '$0215' پتہ $0205 اور $0206 کے بائٹ مقامات پر ہے۔ 'ADC $0215' انسٹرکشن ایڈینڈ کے نچلے بائٹ کو augend کے نچلے بائٹ میں شامل کرتی ہے جو پہلے سے جمع کرنے والے میں ہے۔ نتیجہ واپس جمع کرنے والے میں رکھا جاتا ہے۔ آٹھویں بٹ کے بعد کوئی بھی کیری اسٹیٹس رجسٹر کے کیری فلیگ پر بھیجی جاتی ہے۔ زیادہ بائٹس کے دوسرے اضافے سے پہلے کیری فلیگ سیل کو صاف نہیں کرنا چاہیے۔ یہ کیری خود بخود زیادہ بائٹس کے مجموعے میں شامل ہو جاتی ہے۔ درحقیقت، CLC کی وجہ سے شروع میں نچلے بائٹس کے مجموعہ میں 0 کی کیری خود بخود شامل ہو جاتی ہے (کوئی کیری شامل نہ ہونے کے برابر)۔

تبصرہ اگلے 48 لیتا ہے 10 = 30 16 بائٹس تاہم، یہ صرف '.asm' ٹیکسٹ فائل میں رہتا ہے۔ یاد تک نہیں پہنچتا۔ اسے ترجمہ کے ذریعہ ہٹا دیا جاتا ہے جو جمع کرنے والے (ایک پروگرام) کے ذریعہ کیا جاتا ہے۔

اگلی ہدایات کے لیے جو کہ 'STA $0217' ہے، STA کا opcode جو 8D ہے 16 (مطلق ایڈریسنگ) $0207 کے بائٹ مقام پر ہے۔ 'STA $0217' کا '$0217' پتہ $0208 اور $0209 کے میموری والے مقامات پر ہے۔ 'STA $0217' ہدایات جمع کرنے والے کے آٹھ بٹ مواد کو $0217 کے میموری مقام پر کاپی کرتی ہے۔

اوجنڈ کا زیادہ بائٹ جو 00101010 ہے $0214 کی میموری لوکیشن میں ہے، اور ایڈینڈ کا زیادہ بائٹ جو 00101010 ہے $02 کی بائٹ لوکیشن میں ہے۔ 16 . 'LDA $0214' کے لیے opcode جو LDA (مطلق ایڈریسنگ) کے لیے AD16 ہے $020A کے بائٹ مقام پر ہے۔ 'LDA $0214' کا '$0214' پتہ $020B اور $020C کے مقامات پر ہے۔ 'LDA $0214' کی ہدایات جمع کرنے والے پر augend کے اعلی بائٹ کو لوڈ کرتی ہے، جو بھی جمع کرنے والے میں ہے اسے مٹا دیتی ہے۔

'ADC $0216' کے لیے opcode جو 6D ہے۔ 16 ADC کے لیے (مطلق ایڈریسنگ) $020D کے بائٹ مقام پر ہے۔ 'ADC 0216' کا '$0216' پتہ $020E اور $020F کے بائٹ مقامات پر ہے۔ 'ADC $0216' انسٹرکشن ایڈینڈ کے اعلی بائٹ کو augend کے اعلی بائٹ میں جوڑتی ہے جو پہلے سے جمع کرنے والے میں ہے۔ نتیجہ واپس جمع کرنے والے میں رکھا جاتا ہے۔ اگر 1 کی کیری ہے، تو اس دوسرے اضافے کے لیے، یہ خود بخود اسٹیٹس رجسٹر کے کیری سیل میں رکھ دیا جاتا ہے۔ اگرچہ اس مسئلے کے لیے سولہویں بٹ (بائیں) سے آگے کیری کی ضرورت نہیں ہے، لیکن یہ چیک کرنا اچھا ہے کہ آیا 1 کی کیری اس بات کی جانچ کر کے آیا کہ آیا کیری فلیگ 1 بن گیا ہے۔

اگلی اور آخری ہدایات کے لیے جو کہ 'STA $0218' ہے، STA کا opcode جو 8D16 ہے (مطلق ایڈریسنگ) $0210 کے بائٹ مقام پر ہے۔ 'STA $0218' کا '$0218' پتہ $0211 اور $0212 کے میموری والے مقامات پر ہے۔ 'STA $0218' ہدایات جمع کرنے والے کے آٹھ بٹ مواد کو $0218 کے میموری مقام پر کاپی کرتی ہے۔ دو سولہ بٹ نمبروں کے اضافے کا نتیجہ 010101010101010100 ہے، جس میں 01010100 کا نچلا بائٹ $0217 کے میموری مقام میں اور 01010101 کا اعلی بائٹ $0218 کے میموری والے مقام پر ہے - تھوڑا سا اختتام۔

گھٹاؤ
6502 µP کے ساتھ، دستخط شدہ نمبر دو کے تکمیلی نمبر ہیں۔ ایک دو کا تکمیلی نمبر آٹھ بٹس، سولہ بٹس، یا آٹھ بٹس کا کوئی بھی کثیر ہو سکتا ہے۔ دو کی تکمیل کے ساتھ، بائیں طرف سے پہلا بٹ سائن بٹ ہے۔ ایک مثبت نمبر کے لیے، یہ پہلا بٹ نشان کی نشاندہی کرنے کے لیے 0 ہے۔ باقی بٹس نارمل طریقے سے نمبر بناتے ہیں۔ منفی نمبر کی دو کی تکمیل حاصل کرنے کے لیے، متعلقہ مثبت نمبر کے لیے تمام بٹس کو الٹ دیں، اور پھر دائیں سرے سے نتیجے میں 1 کا اضافہ کریں۔

ایک مثبت عدد کو دوسرے مثبت نمبر سے گھٹانے کے لیے، ذیلی حرف کو دو کے تکمیلی منفی نمبر میں تبدیل کیا جاتا ہے۔ اس کے بعد، معمولی اور نئے منفی نمبر کو عام طریقے سے شامل کیا جاتا ہے۔ تو، آٹھ بٹس کا گھٹاؤ بن جاتا ہے:

جہاں کیری کو 1 کے طور پر فرض کیا جاتا ہے۔ جمع کرنے والے میں نتیجہ دو کی تکمیل میں فرق ہے۔ لہذا، دو نمبروں کو گھٹانے کے لیے، کیری فلیگ کو سیٹ کرنا ضروری ہے (1 پر بنایا گیا)۔

دو سولہ بٹ نمبروں کو گھٹاتے وقت، گھٹاؤ دو سولہ بٹ نمبروں کے اضافے کے ساتھ دو بار کیا جاتا ہے۔ چونکہ گھٹاؤ 6502 µP کے ساتھ اضافے کی ایک شکل ہے، جب دو سولہ بٹ نمبروں کو گھٹاتے ہیں، تو کیری فلیگ صرف ایک بار پہلے گھٹاؤ کے لیے سیٹ کیا جاتا ہے۔ دوسرے گھٹاؤ کے لیے، کیری فلیگ کی کوئی بھی ترتیب خود بخود ہو جاتی ہے۔

آٹھ بٹ نمبروں یا سولہ بٹ نمبروں کے لئے گھٹاؤ پروگرامنگ اسی طرح کی جاتی ہے جس طرح اضافے کو پروگرام کرنا ہے۔ تاہم، لے جانے والے جھنڈے کو شروع میں ہی سیٹ کرنا چاہیے۔ ایسا کرنے کا یادداشت یہ ہے:

سولہ بٹ مثبت نمبروں کے ساتھ گھٹاؤ
درج ذیل نمبروں کے ساتھ گھٹاؤ پر غور کریں:

اس گھٹاؤ میں دو کی تکمیل شامل نہیں ہے۔ چونکہ 6502 µP میں گھٹاؤ دو کی تکمیل میں کیا جاتا ہے، بیس دو میں گھٹاؤ اس طرح کیا جاتا ہے:

دونوں کا تکمیلی نتیجہ وہی ہے جو عام گھٹاؤ سے حاصل کیا جاتا ہے۔ تاہم، نوٹ کریں کہ 1 جو دائیں طرف سے سترہویں بٹ پوزیشن پر جاتا ہے نظر انداز کر دیا جاتا ہے۔ Minuend اور subtrahend ہر دو آٹھ بٹس میں تقسیم ہوتے ہیں۔ سبٹرا ہینڈ کے نچلے بائٹ کے 10010110 کے دو تکمیل اس کے اعلی بائٹ اور کسی بھی کیری سے آزادانہ طور پر طے کیے جاتے ہیں۔ سبٹرا ہینڈ کے اعلیٰ بائٹ کے 11101011 کے دو تکمیلی اس کے نچلے بائٹ اور کسی بھی کیری سے آزادانہ طور پر طے کیے جاتے ہیں۔

منٹ کے 16 بٹس پہلے ہی دو کی تکمیل میں ہیں، بائیں سے 0 سے شروع ہوتے ہیں۔ لہذا، اسے بٹس میں کسی ایڈجسٹمنٹ کی ضرورت نہیں ہے۔ 6502 µP کے ساتھ، بغیر کسی ترمیم کے minuend کا نچلا بائٹ دونوں کے ذیلی حصے کی تکمیل کے نچلے بائٹ میں شامل کیا جاتا ہے۔ مائنینڈ کا نچلا بائٹ دو کے تکمیل میں تبدیل نہیں ہوتا ہے کیونکہ پورے منٹ کے سولہ بٹس کو پہلے سے ہی دو کی تکمیل میں ہونا ضروری ہے (بائیں طرف پہلے بٹ کے طور پر 0 کے ساتھ)۔ اس پہلے اضافے میں، 1=0 SEC ہدایات کی وجہ سے 1 کا ایک لازمی کیری شامل کیا گیا ہے۔

موجودہ مؤثر گھٹاؤ میں، آٹھویں بٹ سے نویں بٹ (دائیں سے) تک 1 (اضافہ) کا کیری ہے۔ چونکہ یہ مؤثر طریقے سے گھٹاؤ ہے، اس لیے اسٹیٹس رجسٹر میں کیری فلیگ میں جو کچھ بھی ہونا چاہیے اس کی تکمیل (الٹی) ہے۔ تو، 1 کا کیری C پرچم میں 0 بن جاتا ہے۔ دوسرے آپریشن میں، سبٹرا ہینڈ کے اعلیٰ دو کے تکمیلی بائٹ میں مائنینڈ کا اعلیٰ بائٹ شامل کیا جاتا ہے۔ اسٹیٹس رجسٹر کا خود بخود تکمیل شدہ کیری فلیگ بٹ (اس صورت میں 0 ہے) بھی شامل کیا جاتا ہے (اعلی بائٹس میں)۔ کوئی بھی 1 جو دائیں طرف سے سولہویں بٹ سے آگے جاتا ہے نظر انداز کر دیا جاتا ہے۔

اگلی چیز صرف اس تمام اسکیم کو درج ذیل کوڈ کرنا ہے:

ایس ای سی
ایل ڈی اے $0213
SBC $0215
; کوئی کلیئرنگ نہیں کیونکہ الٹی کیری فلیگ ویلیو کی ضرورت ہے۔
STA $0217
ایل ڈی اے $0214
SBC $0216
STA $0218

یاد رکھیں کہ 6502 اسمبلی لینگویج کے ساتھ، ایک سیمی کالون ایک تبصرہ شروع کرتا ہے جو میموری میں ترجمہ شدہ پروگرام ورژن میں شامل نہیں ہوتا ہے۔ تفریق کے لیے دو 16 بٹ نمبر مطلق ایڈریسنگ کے ساتھ میموری کے چار بائٹس پر قبضہ کرتے ہیں۔ دو فی نمبر (میموری بائٹس کی ایک سیریز ہے)۔ یہ ان پٹ کی بورڈ سے نہیں ہیں۔ خلاصہ نتیجہ دو بائٹس ہے اور اسے میموری میں بھی ایک مختلف جگہ پر رکھنا پڑتا ہے۔ یہ آؤٹ پٹ مانیٹر یا پرنٹر پر نہیں جاتا ہے۔ یہ میموری پر جاتا ہے. یہ کل 6 دیتا ہے۔ 10 = 6 16 میموری (RAM) میں رکھے جانے والے ان پٹ اور آؤٹ پٹ کے لیے بائٹس۔

کسی پروگرام کو انجام دینے سے پہلے، اسے پہلے میموری میں ہونا ضروری ہے۔ پروگرام کوڈ پر نظر ڈالیں، یہ دیکھا جا سکتا ہے کہ تبصرے کے بغیر ہدایات 19 بنتی ہیں۔ 10 = 13 16 بائٹس چونکہ اس باب میں تمام پروگرامز $0200 کے میموری لوکیشن سے شروع ہوتے ہیں، اس لیے پروگرام میموری میں $0200 بائٹ لوکیشن سے $0200 + $13 - $1 = $0212 بائٹ لوکیشن ($0200 سے شروع ہوتا ہے نہ کہ $0201)۔ اس رینج میں ان پٹ اور آؤٹ پٹ بائٹس کا علاقہ شامل نہیں ہے۔ دو ان پٹ نمبر 4 بائٹس لیتے ہیں اور ایک آؤٹ پٹ نمبر 2 بائٹس لیتا ہے۔ ان پٹ اور آؤٹ پٹ نمبرز کے لیے 6 بائٹس شامل کرنے سے پروگرام کی حد ہوتی ہے جو $0212 + $6 = $0218 پر ختم ہوتی ہے۔ پروگرام کی کل لمبائی 19 ہے۔ 16 = 25 10 .

Minuend کا نچلا بائٹ $0213 ایڈریس میں ہونا چاہیے، اور اسی minuend کا اونچی بائٹ $0214 ایڈریس میں ہونا چاہیے - تھوڑا سا اختتام۔ اسی طرح، سبٹرا ہینڈ کا نچلا بائٹ $0215 ایڈریس میں ہونا چاہیے، اور اسی سبٹرا ہینڈ کا اونچا بائٹ $0216 ایڈریس میں ہونا چاہیے۔ نتیجہ کا نچلا بائٹ (فرق) $0217 ایڈریس میں ہونا چاہیے، اور اسی نتیجے کا زیادہ بائٹ $0218 ایڈریس میں ہونا چاہیے - تھوڑا سا ختم ہونا۔

38 کا اوپک کوڈ 16 SEC کے لیے (مضمون ایڈریسنگ) $0200 ایڈریس میں ہے۔ اس باب میں تمام پروگراموں کو $0200 کی میموری کی جگہ سے شروع کرنے کا فرض کیا جاتا ہے، کسی بھی پروگرام کو منسوخ کر دیتا ہے جو وہاں موجود ہوتا؛ سوائے دوسری صورت میں بیان کیا گیا ہے۔ 'LDA $0213' کے لیے اوپک کوڈ، یعنی AD 16 ، LDA کے لیے (مطلق ایڈریسنگ) $0201 بائٹ مقام میں ہے۔ مائنینڈ کا نچلا بائٹ جو 10111111 ہے $0213 کی میموری بائٹ لوکیشن میں ہے۔ یاد رکھیں کہ ہر اوپکوڈ ایک بائٹ پر قبضہ کرتا ہے۔ 'LDA $0213' کا '$0213' پتہ $0202 اور $0203 کے بائٹ مقامات پر ہے۔ 'LDA $0213' کی ہدایت مائنس کے نچلے بائٹ کو جمع کرنے والے پر لوڈ کرتی ہے۔

'SBC $0215' کے لیے اوپک کوڈ، یعنی ED 16 ، SBC کے لیے (مطلق ایڈریسنگ) $0204 بائٹ مقام میں ہے۔ سبٹرا ہینڈ کا نچلا بائٹ جو 01101010 ہے $0215 بائٹ مقام پر ہے۔ 'ADC $0215' کا '$0215' پتہ $0205 اور $0206 کے بائٹ مقامات پر ہے۔ 'SBC $0215' انسٹرکشن میں سبٹرا ہینڈ کے نچلے بائٹ کو minuend کے نچلے بائٹ سے گھٹایا جاتا ہے جو پہلے سے جمع کرنے والے میں ہے۔ یہ دو کا تکمیلی گھٹاؤ ہے۔ نتیجہ واپس جمع کرنے والے میں رکھا جاتا ہے۔ آٹھویں بٹ کے بعد کسی بھی کیری کا تکمیلی (الٹا) اسٹیٹس رجسٹر کے کیری فلیگ پر بھیجا جاتا ہے۔ اس کیری فلیگ کو زیادہ بائٹس کے ساتھ دوسرے گھٹاؤ سے پہلے صاف نہیں کرنا چاہیے۔ یہ کیری خود بخود زیادہ بائٹس کے گھٹانے میں شامل ہو جاتی ہے۔

تبصرہ اگلے 57 لیتا ہے 10 = 3916 16 بائٹس تاہم، یہ صرف '.asm' ٹیکسٹ فائل میں رہتا ہے۔ یاد تک نہیں پہنچتا۔ اسے ترجمہ کے ذریعہ ہٹا دیا جاتا ہے جو جمع کرنے والے (ایک پروگرام) کے ذریعہ کیا جاتا ہے۔

اگلی ہدایات کے لیے جو کہ 'STA $0217' ہے، STA کا اوپک کوڈ، یعنی 8D 16 (مطلق ایڈریسنگ)، $0207 بائٹ مقام پر ہے۔ 'STA $0217' کا '$0217' پتہ $0208 اور $0209 کے میموری والے مقامات پر ہے۔ 'STA $0217' ہدایات جمع کرنے والے کے آٹھ بٹ مواد کو $0217 کے میموری مقام پر کاپی کرتی ہے۔

00101010 کا سب سے زیادہ بائٹ جو 00101010 ہے $0214 کی میموری لوکیشن میں ہے، اور سبٹرا ہینڈ کا زیادہ بائٹ جو 00010101 ہے $0216 کی بائٹ لوکیشن میں ہے۔ 'LDA $0214' کے لیے opcode، یعنی AD 16 LDA (مطلق ایڈریسنگ) کے لیے، $020A بائٹ مقام پر ہے۔ 'LDA $0214' کا '$0214' پتہ $020B اور $020C کے مقامات پر ہے۔ 'LDA $0214' کی ہدایات جمع کرنے والے پر منٹ کے اعلی بائٹ کو لوڈ کرتی ہے، جو بھی جمع کرنے والے میں ہے اسے مٹا دیتی ہے۔

'SBC $0216' کے لیے اوپک کوڈ، یعنی ED 16 SBC (مطلق ایڈریسنگ) کے لیے، $020D بائٹ مقام پر ہے۔ 'SBC $0216' کا '$0216' پتہ $020E اور $020F کے بائٹ مقامات پر ہے۔ 'SBC $0216' انسٹرکشنز سبٹرا ہینڈ کے ہائی بائٹ کو مائیونڈ (دو کے تکمیلی) کے ہائی بائٹ سے گھٹاتی ہے جو پہلے سے جمع کرنے والے میں ہے۔ نتیجہ واپس جمع کرنے والے میں رکھا جاتا ہے۔ اگر اس دوسرے گھٹاؤ کے لیے 1 کیری ہے، تو اس کی تکمیل اسٹیٹس رجسٹر کے کیری سیل میں خود بخود رکھ دی جاتی ہے۔ اگرچہ اس مسئلے کے لیے سولہویں بٹ (بائیں) سے آگے کیری کی ضرورت نہیں ہے، لیکن یہ چیک کرنا اچھا ہے کہ آیا کیری فلیگ کو چیک کرکے کمپلیمنٹ کیری ہوتی ہے یا نہیں۔

اگلی اور آخری ہدایات کے لیے جو کہ 'STA$0218' ہے، STA کا opcode، یعنی 8D 16 (مطلق ایڈریسنگ)، $0210 بائٹ مقام پر ہے۔ 'STA $0218' کا '$0218' پتہ $0211 اور $0212 کے میموری والے مقامات پر ہے۔ 'STA $0218' ہدایات جمع کرنے والے کے آٹھ بٹ مواد کو $0218 کے میموری مقام پر کاپی کرتی ہے۔ دو سولہ بٹ نمبروں کے ساتھ گھٹاؤ کا نتیجہ 000101010101010101 ہے جس میں $0217 کی میموری لوکیشن میں 01010101 کا نچلا بائٹ ہے اور $0218 کی میموری لوکیشن میں 00010101 کا زیادہ بائٹ ہے - تھوڑا سا خاتمہ۔

6502 µP میں سرکٹری صرف اضافے کے لیے ہے، اور بالواسطہ طور پر دونوں کے تکمیلی گھٹاؤ کے لیے۔ اس میں ضرب اور تقسیم کے لیے سرکٹری نہیں ہے۔ ضرب اور تقسیم کرنے کے لیے، تفصیلات کے ساتھ ایک اسمبلی لینگوئج پروگرام، جس میں جزوی مصنوعات اور جزوی ڈیویڈنڈ کی تبدیلی بھی شامل ہے، لکھا جانا چاہیے۔

4.4 منطقی آپریشنز

6502 µP میں، OR کے لیے یادداشت ORA ہے اور خصوصی OR کے لیے یادداشت EOR ہے۔ نوٹ کریں کہ منطقی کارروائیوں میں مضمر ایڈریسنگ نہیں ہوتی ہے۔ مضمر ایڈریسنگ کوئی آپرینڈ نہیں لیتا ہے۔ منطقی آپریٹرز میں سے ہر ایک کو دو آپرینڈز لینے چاہئیں۔ پہلا جمع کرنے والے میں ہے، اور دوسرا میموری یا ہدایات میں ہے۔ نتیجہ (8 بٹس) واپس جمع کرنے والے میں آ گیا ہے۔ جمع کرنے والے میں پہلا یا تو فوری ہدایت کے ذریعہ ڈال دیا جاتا ہے یا مطلق ایڈریسنگ کے ساتھ میموری سے کاپی کیا جاتا ہے۔ اس سیکشن میں، صرف صفر صفحہ ایڈریسنگ کو مثال کے لیے استعمال کیا گیا ہے۔ یہ منطقی آپریٹرز تمام Bitwise آپریٹرز ہیں۔

اور
درج ذیل جدول Bitwise AND کو بائنری، hexadecimal اور decimal میں واضح کرتا ہے:

اس باب میں تمام پروگرامز $0200 کے میموری بائٹ مقام سے شروع ہونے چاہئیں۔ تاہم، اس سیکشن کے پروگرام صفحہ صفر میں ہیں، جس کا مقصد 00000000 کے اعلی بائٹ کے بغیر صفحہ صفر کے استعمال کو واضح کرنا ہے۔ 2 . پچھلی ANDing کو اس طرح کوڈ کیا جا سکتا ہے:

LDA #$9A ; یادداشت سے نہیں - فوری خطاب
اور #$CD ; یادداشت سے نہیں - فوری خطاب
STA $30 ; $88 صفر کی بنیاد پر $0030 پر اسٹور کرتا ہے۔

یا
درج ذیل جدول Bitwise OR کو بائنری، hexadecimal اور decimal میں واضح کرتا ہے:

LDA #$9A ; یادداشت سے نہیں - فوری خطاب
ORA #$CD ؛ یادداشت سے نہیں - فوری خطاب
STA $30 ; $CF کو صفر کی بنیاد پر $0030 پر اسٹور کرتا ہے۔

مفت
درج ذیل جدول Bitwise XOR کو بائنری، ہیکساڈیسیمل اور ڈیسیمل میں واضح کرتا ہے:

LDA #$9A ; یادداشت سے نہیں - فوری خطاب
EOR #$CD ; یادداشت سے نہیں - فوری خطاب
STA $30 ; $57 صفر کی بنیاد پر $0030 پر اسٹور کرتا ہے۔

4.5 شفٹ اور روٹیٹ آپریشنز

شفٹ اور روٹیٹ آپریٹرز کے لیے یادداشت اور اوپکوڈز یہ ہیں:

ASL: خالی کردہ سب سے دائیں سیل میں 0 داخل کرتے ہوئے، جمع کرنے والے یا میموری کی جگہ کے ایک بٹ کو بائیں طرف شفٹ کریں۔

LSR: خالی کردہ سب سے بائیں سیل میں 0 داخل کرتے ہوئے، جمع کرنے والے یا میموری کی جگہ کے ایک بٹ کو دائیں طرف شفٹ کریں۔
ROL: جمع کرنے والے یا میموری کے مقام کے ایک بٹ کو بائیں طرف گھمائیں، اس بٹ کو داخل کریں جو بائیں جانب چھوڑا گیا ہے خالی کردہ دائیں طرف والے سیل میں۔
ROR: جمع کرنے والے یا میموری کے مقام کے ایک بٹ کو دائیں طرف گھمائیں، اس بٹ کو داخل کریں جو دائیں طرف چھوڑا گیا ہے خالی کردہ سب سے بائیں سیل میں۔

جمع کرنے والے کے ساتھ شفٹ یا گردش کرنے کے لیے، ہدایات کچھ اس طرح ہیں:

ایل ایس آر اے

یہ ایک اور ایڈریسنگ موڈ استعمال کرتا ہے جسے جمع کرنے والا ایڈریسنگ موڈ کہتے ہیں۔

بائٹ میموری لوکیشن کے ساتھ شفٹ یا روٹیشن کرنے کے لیے، ہدایات کچھ اس طرح ہیں:

ROR $2BCD

جہاں 2BCD میموری کا مقام ہے۔

نوٹ کریں کہ شفٹ کرنے یا گھومنے کے لیے کوئی فوری یا مضمر ایڈریسنگ موڈ نہیں ہے۔ کوئی فوری ایڈریسنگ موڈ نہیں ہے کیونکہ کسی ایسے نمبر کو تبدیل کرنے یا گھمانے کا کوئی فائدہ نہیں ہے جو صرف ہدایات میں رہتا ہے۔ کوئی مضمر ایڈریسنگ موڈ نہیں ہے کیونکہ 6502 µP کے ڈیزائنرز چاہتے ہیں کہ صرف جمع کرنے والے کے مواد (A رجسٹر) یا میموری بائٹ کی جگہ کو شفٹ یا گھمایا جائے۔

4.6 رشتہ دار ایڈریسنگ موڈ

مائیکرو پروسیسر پروگرام کاؤنٹر (PC) کو ہمیشہ بڑھاتا ہے (1، 2، یا 3 یونٹس) تاکہ اگلی ہدایات کی طرف اشارہ کیا جا سکے جس پر عمل کیا جانا ہے۔ 6502 µP میں ایک ہدایت ہے جس کی یادداشت BVS ہے جس کا مطلب ہے اوور فلو سیٹ پر برانچ۔ پی سی دو بائٹس پر مشتمل ہے۔ یہ ہدایت پی سی کے پاس ایک مختلف میموری ایڈریس کا سبب بنتی ہے کہ اگلی ہدایات پر عمل درآمد کیا جائے جس کے نتیجے میں عام اضافہ نہ ہو۔ یہ پی سی کے مواد میں ایک قدر کو شامل یا گھٹا کر کرتا ہے، جسے آفسیٹ کہا جاتا ہے۔ اور اس طرح، پی سی پھر کمپیوٹر کے لیے ایک مختلف (شاخوں والی) میموری کی جگہ کی طرف اشارہ کرتا ہے تاکہ وہاں سے کام جاری رکھا جا سکے۔ آفسیٹ -128 سے ایک عدد عدد ہے۔ 10 +127 تک 10 (دو کی تکمیل) لہذا، آفسیٹ میموری میں چھلانگ کو آگے بڑھا سکتا ہے۔ اگر یہ مثبت ہے یا یادداشت میں پیچھے ہے، یا اگر یہ منفی ہے۔

BVS انسٹرکشن صرف ایک آپرینڈ لیتا ہے جو آفسیٹ ہے۔ BVS متعلقہ ایڈریسنگ کا استعمال کرتا ہے۔ مندرجہ ذیل ہدایات پر غور کریں:

BVS $7F

بیس دو میں، 7 ایف ایچ 01111111 ہے۔ 2 = 127 10 . فرض کریں کہ پی سی میں اگلی ہدایات کے لیے مواد $0300 ہے۔ BVS ہدایات $037F دینے کے لیے $7F (پہلے سے ہی دو کی تکمیل میں ایک مثبت نمبر) کو $0300 میں شامل کرنے کا سبب بنتی ہے۔ لہذا، $0300 کے میموری لوکیشن پر عمل کرنے کے لیے اگلی ہدایات کے بجائے، یہ $037F (تقریبا نصف صفحہ کا فرق) کے میموری مقام پر ہے۔

برانچ کی دیگر ہدایات ہیں، لیکن متعلقہ ایڈریسنگ کو واضح کرنے کے لیے استعمال کرنے کے لیے BVS بہت اچھا ہے۔ متعلقہ ایڈریسنگ برانچ ہدایات سے متعلق ہے۔

4.7 انڈیکسڈ ایڈریسنگ اور بالواسطہ ایڈریسنگ الگ الگ

یہ ایڈریسنگ موڈز 6502 µP کو ہدایات کی کم تعداد کے ساتھ مختصر وقت میں ڈیٹا کی بہت زیادہ مقدار کو سنبھالنے کے قابل بناتے ہیں۔ پوری کوموڈور-64 میموری کے لیے 64KB مقامات ہیں۔ لہذا، 16 بٹس کے کسی بھی بائٹ مقام تک رسائی کے لیے، دو بائٹس بنانے کی ضرورت ہے۔ دو بائٹس کی ضرورت کا واحد استثنا صفحہ صفر کے لیے ہے جہاں $00 کے اعلی بائٹ کو اس جگہ کو کم کرنے کے لیے چھوڑ دیا جاتا ہے جو میموری میں ہدایات کے ذریعے لی جاتی ہے۔ غیر صفحہ صفر ایڈریسنگ موڈ کے ساتھ، 16 بٹ میموری ایڈریس کے اعلی اور کم دونوں بائٹس زیادہ تر کسی نہ کسی طرح اشارہ کیے جاتے ہیں۔

بنیادی انڈیکسڈ ایڈریسنگ

مطلق انڈیکس ایڈریسنگ
یاد رہے کہ X یا Y رجسٹر کو انڈیکس رجسٹر کہا جاتا ہے۔ مندرجہ ذیل ہدایات پر غور کریں:

LDA $C453,X

فرض کریں کہ 6 کی قدر ایچ ایکس رجسٹر میں ہے۔ نوٹ کریں کہ ہدایات میں کہیں بھی 6 ٹائپ نہیں کیا گیا ہے۔ یہ ہدایت 6H کی قدر کو C453 میں شامل کرتی ہے۔ ایچ جو کہ ٹیکسٹ فائل میں ٹائپ کی گئی ہدایات کا حصہ ہے جسے ابھی جمع ہونا باقی ہے - C453 ایچ +6 ایچ = C459 ایچ . ایل ڈی اے کا مطلب ہے جمع کرنے والے پر بائٹ لوڈ کرنا۔ جمع کرنے والے میں لوڈ ہونے والا بائٹ $C459 ایڈریس سے آتا ہے۔ $C459 جو کہ $C453 کا مجموعہ ہے جو ہدایات کے ساتھ ٹائپ کیا گیا ہے اور 6 ایچ جو کہ X رجسٹر میں پایا جاتا ہے وہ موثر پتہ بن جاتا ہے جہاں سے جمع کرنے والے میں لوڈ ہونے والا بائٹ آتا ہے۔ اگر 6 ایچ Y رجسٹر میں تھا، ہدایات میں X کی جگہ Y ٹائپ کیا گیا ہے۔

ٹائپ کردہ ہدایات کے بیان میں، $C453 کو بنیادی پتہ اور 6 کے نام سے جانا جاتا ہے۔ ایچ X یا Y رجسٹر میں موثر ایڈریس کے لیے گنتی یا اشاریہ کے حصے کے طور پر جانا جاتا ہے۔ بیس ایڈریس میموری میں کسی بھی بائٹ ایڈریس اور اگلے 256 کا حوالہ دے سکتا ہے۔ 10 پتوں تک رسائی حاصل کی جا سکتی ہے، یہ فرض کرتے ہوئے کہ X یا Y رجسٹر میں شروع کردہ انڈیکس (یا شمار) 0 ہے۔ یاد رکھیں کہ ایک بائٹ 256 تک کی مسلسل رینج دے سکتا ہے۔ 10 نمبرز (یعنی 00000000 2 11111111 پر 2

لہذا، مطلق ایڈریسنگ X یا Y رجسٹر میں جو کچھ بھی پہلے سے ڈالا گیا ہے (کسی اور ہدایت کے ذریعہ ڈالا گیا ہے) کو 16 پتوں میں شامل کرتا ہے جو موثر ایڈریس حاصل کرنے کے لئے ہدایات کے ساتھ ٹائپ کیے گئے ہیں۔ ٹائپ شدہ ہدایات میں، انڈیکس کے دو رجسٹروں کو X یا Y سے ممتاز کیا جاتا ہے جو کوما کے بعد ٹائپ کیا جاتا ہے۔ یا تو X یا Y ٹائپ کیا جاتا ہے۔ دونوں نہیں

تمام پروگرام کو ٹیکسٹ ایڈیٹر میں ٹائپ کرنے اور '.asm' ایکسٹینشن فائل نام کے ساتھ محفوظ کرنے کے بعد، اسمبلر، جو ایک اور پروگرام ہے، کو ٹائپ کردہ پروگرام کا ترجمہ میموری میں (لوڈ شدہ) کرنا ہوتا ہے۔ پچھلی ہدایات، جو کہ 'LDA $C453,X' ہے، میموری میں تین بائٹ مقامات پر قابض ہے، پانچ نہیں۔

یاد رکھیں کہ ایک یادداشت جیسے LDA میں ایک سے زیادہ آپکوڈ (مختلف بائٹس) ہو سکتے ہیں۔ X رجسٹر کا استعمال کرنے والی ہدایات کے لیے اوپک کوڈ Y رجسٹر کا استعمال کرنے والے اوپکوڈ سے مختلف ہے۔ اسمبلر جانتا ہے کہ ٹائپ شدہ ہدایات کی بنیاد پر کون سا اوپکوڈ استعمال کرنا ہے۔ 'LDA $C453,X' کے لیے ایک بائٹ آپکوڈ 'LDA $C453,Y' کے لیے ایک بائٹ آپکوڈ سے مختلف ہے۔ درحقیقت، 'LDA $C453,X' میں LDA کے لیے opcode BD ہے، اور 'LDA $C453,9' میں LDA کے لیے opcode BD ہے۔

اگر LDA کے لیے opcode $0200 بائٹ والے مقام پر ہے۔ پھر، $C453 کا 16 بٹ ایڈریس میموری میں موجود بائٹ مقامات کے آگے لے جاتا ہے جو $0201 اور $0202 ہیں۔ مخصوص اوپکوڈ بائٹ اس بات کی نشاندہی کرتا ہے کہ آیا یہ X رجسٹر ہے یا Y رجسٹر جو اس میں شامل ہے۔ اور اس طرح، جمع شدہ زبان کی ہدایت جو کہ 'LDA $C453,X' یا 'LDA $C453,Y' میموری میں لگاتار تین بائٹس پر قبضہ کرتی ہے، نہ کہ چار یا پانچ۔

زیرو پیج انڈیکسڈ ایڈریسنگ
صفر صفحہ انڈیکس ایڈریسنگ مطلق انڈیکس ایڈریسنگ کی طرح ہے جو پہلے بیان کیا گیا ہے، لیکن ہدف بائٹ صرف صفحہ صفر پر ہونا چاہیے ($0000 سے $00FF تک)۔ اب، صفر صفحہ کے ساتھ کام کرتے وقت، زیادہ بائٹ جو ہمیشہ 00 ہوتا ہے۔ ایچ میموری کے مقامات کے لیے عام طور پر گریز کیا جاتا ہے۔ لہذا، یہ عام طور پر ذکر کیا جاتا ہے کہ صفحہ صفر $00 سے FF تک شروع ہوتا ہے۔ اور اس طرح، 'LDA $C453,X' کی پچھلی ہدایت یہ ہے:

LDA $53.X

$C4، ایک اعلی بائٹ جو صفحہ صفر کے اوپر والے صفحہ کا حوالہ دیتا ہے، اس ہدایت میں استعمال نہیں کیا جا سکتا کیونکہ یہ متوقع ہدف بائٹ کو صفحہ صفر کے باہر اور اوپر جمع شدہ بائٹ میں لوڈ کرنے کے لیے رکھتا ہے۔

جب ہدایات میں ٹائپ کردہ ویلیو کو انڈیکس رجسٹر میں موجود ویلیو میں شامل کیا جاتا ہے، تو رقم کو صفحہ صفر (FF) سے اوپر کا نتیجہ نہیں دینا چاہیے۔ ایچ )۔ لہذا، 'LDA $FF, X' جیسی ہدایات اور FF جیسی قدر کا ہونا سوال سے باہر ہے۔ ایچ انڈیکس رجسٹر میں کیونکہ FF ایچ + ایف ایف ایچ = 200 ایچ جو کہ میموری میں صفحہ 2 (تیسرے صفحہ) کا پہلا بائٹ ($0200) مقام ہے، صفحہ 0 سے کافی دوری پر ہے۔ لہٰذا، صفر صفحہ کے اشاریہ شدہ ایڈریسنگ کے ساتھ، موثر پتہ صفحہ صفر میں ہونا چاہیے۔

بالواسطہ خطاب

چھلانگ مطلق خطاب
مطلق بالواسطہ خطاب پر بحث کرنے سے پہلے، یہ بہتر ہے کہ پہلے JMP مطلق خطاب کو دیکھیں۔ فرض کریں کہ وہ ایڈریس جس میں دلچسپی کی قدر ہے (ٹارگٹ بائٹ) $8765 ہے۔ یہ 16 بٹس ہے جو دو بائٹس پر مشتمل ہے: اعلی بائٹ جو 87 ہے۔ ایچ اور لوئر بائٹ جو 65 ہے۔ ایچ . لہذا، 8765 ڈالر کے دو بائٹس اگلی ہدایات کے لیے پی سی (پروگرام کاؤنٹر) میں ڈالے جاتے ہیں۔ اسمبلی لینگویج پروگرام (فائل) میں کیا ٹائپ کیا جاتا ہے:

JMP $8765

میموری میں ایگزیکیوٹنگ پروگرام کسی بھی ایڈریس سے چھلانگ لگا کر $8765 تک پہنچ جاتا ہے۔ جے ایم پی میمونک میں تین اوپکوڈز ہیں جو 4C، 6C، اور 7C ہیں۔ اس مطلق ایڈریسنگ کا آپکوڈ 4C ہے۔ JMP مطلق بالواسطہ ایڈریسنگ کے لیے opcode 6C ہے (مندرجہ ذیل مثالوں کو دیکھیں)۔

مطلق بالواسطہ خطاب
یہ صرف جمپ (JMP) ہدایات کے ساتھ استعمال ہوتا ہے۔ فرض کریں کہ جس ایڈریس میں بائٹ آف انٹرسٹ (ٹارگٹ بائٹ) ہے وہ $8765 ہے۔ یہ 16 بٹس ہے جو دو بائٹس پر مشتمل ہے: اعلی بائٹ جو 87 ہے۔ ایچ اور لوئر بائٹ جو 65 ہے۔ ایچ . مطلق بالواسطہ ایڈریسنگ کے ساتھ، یہ دو بائٹس دراصل میموری میں دوسری جگہوں پر لگاتار دو بائٹ مقامات پر واقع ہیں۔

فرض کریں کہ وہ $0210 اور $0211 کے میموری والے مقامات پر واقع ہیں۔ پھر، دلچسپی کے پتے کا نچلا بائٹ جو 65 ہے۔ ایچ $0210 ایڈریس میں ہے، اور زیادہ بائٹ جو 87 ہے۔ ایچ $0211 ایڈریس میں ہے۔ اس کا مطلب یہ ہے کہ دلچسپی کا نچلا میموری بائٹ کم لگاتار ایڈریس پر جاتا ہے، اور دلچسپی کا زیادہ میموری بائٹ اعلی مسلسل ایڈریس پر جاتا ہے - تھوڑا سا اختتام۔

16 بٹ ایڈریس میموری میں لگاتار دو پتوں کا حوالہ دے سکتا ہے۔ اس روشنی میں، $0210 ایڈریس سے مراد $0210 اور $0211 کے پتے ہیں۔ $0210 اور $0211 کا ایڈریس جوڑا ٹارگٹ بائٹ کا حتمی ایڈریس (دو بائٹس کے 16 بٹس) رکھتا ہے، نچلے بائٹ کے ساتھ 65 ایچ $0210 میں اور 87 کا اعلی بائٹ ایچ $0211 میں۔ لہذا، جمپ کی ہدایت جو ٹائپ کی گئی ہے وہ ہے:

JMP ($0210)

جے ایم پی میمونک میں تین اوپکوڈز ہیں جو 4C، 6C، اور 7C ہیں۔ مطلق بالواسطہ ایڈریسنگ کے لیے opcode 6C ہے۔ ٹیکسٹ فائل میں جو ٹائپ کیا گیا ہے وہ ہے 'JMP ($0210)'۔ قوسین کی وجہ سے، جمع کرنے والا (مترجم) JMP کے لیے opcode 6C استعمال کرتا ہے، نہ کہ 4C یا 7C۔

مطلق بالواسطہ ایڈریسنگ کے ساتھ، اصل میں میموری کے تین علاقے ہیں۔ پہلا خطہ $0200، $0201، اور $0202 کے بائٹ مقامات پر مشتمل ہوسکتا ہے۔ اس میں 'JMP ($0210)' ہدایات کے لیے تین بائٹس ہیں۔ دوسرا خطہ، جو ضروری نہیں کہ پہلے کے آگے ہو، دو لگاتار بائٹ مقامات پر مشتمل ہے $0210 اور $0211۔ یہ یہاں کا نچلا بائٹ ہے ($0210) جو اسمبلی لینگویج پروگرام کی ہدایات میں ٹائپ کیا گیا ہے۔ اگر دلچسپی کا پتہ $8765 ہے، تو 65 کا کم بائٹ ایچ $0210 بائٹ کے مقام پر ہے، اور 87 کے اعلی بائٹ میں ہے۔ ایچ $0211 بائٹ مقام پر ہے۔ تیسرا علاقہ صرف ایک بائٹ مقام پر مشتمل ہے۔ یہ ٹارگٹڈ بائٹ (حتمی دلچسپی کی بائٹ) کے لیے $8765 ایڈریس کا ہے۔ لگاتار پتوں کا جوڑا، $0210 اور $0211، $8765 پوائنٹر رکھتا ہے جو دلچسپی کا پتہ ہے۔ کمپیوٹنگ تشریح کے بعد، یہ $8765 ہے جو ٹارگٹ بائٹ تک رسائی کے لیے PC (پروگرام کاؤنٹر) میں جاتا ہے۔

صفر صفحہ بالواسطہ خطاب
یہ ایڈریسنگ بالکل بالواسطہ ایڈریسنگ کی طرح ہے، لیکن پوائنٹر صفحہ صفر میں ہونا چاہیے۔ پوائنٹر ریجن کا نچلا بائٹ ایڈریس وہی ہے جو ٹائپ شدہ ہدایات میں درج ذیل ہے:

JMP ($50)

پوائنٹر کا اعلی بائٹ $51 بائٹ مقام پر ہے۔ موثر ایڈریس (پوائنٹڈ) صفحہ صفر میں ہونا ضروری نہیں ہے۔

لہٰذا، انڈیکس ایڈریسنگ کے ساتھ، انڈیکس رجسٹر میں ویلیو کو بیس ایڈریس میں شامل کیا جاتا ہے جو کہ موثر ایڈریس رکھنے کی ہدایات میں دیا گیا ہے۔ بالواسطہ ایڈریسنگ پوائنٹر کا استعمال کرتا ہے۔

4.8 انڈیکسڈ بالواسطہ ایڈریسنگ

مطلق انڈیکسڈ بالواسطہ ایڈریسنگ
یہ ایڈریسنگ موڈ صرف JMP ہدایات کے ساتھ استعمال ہوتا ہے۔
مطلق بالواسطہ ایڈریسنگ کے ساتھ، اس کے اپنے دو لگاتار بائٹ ایڈریس کے ساتھ پوائنٹڈ ویلیو (بائٹ) ہوتی ہے۔ یہ دو لگاتار پتے پوائنٹر کو میموری میں لگاتار دو بائٹس کے پوائنٹر والے علاقے میں بناتے ہیں۔ پوائنٹر ریجن کا نچلا بائٹ وہ ہے جو قوسین میں دی گئی ہدایات میں ٹائپ کیا گیا ہے۔ پوائنٹر پوائنٹڈ ویلیو کا پتہ ہے۔ پچھلی صورت حال میں، $8765 پوائنٹڈ ویلیو کا پتہ ہے۔ $0210 (اس کے بعد $0211) وہ پتہ ہے جس کا مواد $8765 ہے جو پوائنٹر ہے۔ مطلق بالواسطہ ایڈریسنگ موڈ کے ساتھ، یہ ($0210) ہے جو پروگرام (ٹیکسٹ فائل) میں ٹائپ کیا جاتا ہے، بشمول قوسین۔

دوسری طرف، مطلق انڈیکسڈ بالواسطہ ایڈریسنگ موڈ کے ساتھ، پوائنٹر ریجن کے لیے نچلا ایڈریس بائٹ X رجسٹر میں ٹائپ کردہ ایڈریس میں ویلیو شامل کرکے بنتا ہے۔ مثال کے طور پر، اگر پوائنٹر $0210 کے پتے کی جگہ پر ہے، تو ٹائپ کردہ ہدایات کچھ اس طرح ہو سکتی ہیں:

JMP ($020A,X)

جہاں X رجسٹر کی قیمت 6 ہے۔ ایچ . 020A ایچ +6 ایچ = 0210 ایچ . اس ایڈریسنگ موڈ کے ساتھ Y رجسٹر استعمال نہیں کیا جاتا ہے۔

زیرو پیج انڈیکسڈ بالواسطہ ایڈریسنگ
یہ ایڈریسنگ موڈ X رجسٹر کا استعمال کرتا ہے نہ کہ Y رجسٹر۔ اس ایڈریسنگ موڈ کے ساتھ، اس کے دو بائٹ ایڈریس پوائنٹر ریجن میں اب بھی پوائنٹڈ ویلیو اور پوائنٹر موجود ہے۔ پوائنٹر کے لیے صفحہ صفر میں لگاتار دو بائٹس ہونے چاہئیں۔ ہدایات میں جو ایڈریس ٹائپ کیا گیا ہے وہ ایک بائٹ ایڈریس ہے۔ اس قدر کو X رجسٹر میں موجود قدر میں شامل کیا جاتا ہے اور کسی بھی کیری کو ضائع کر دیا جاتا ہے۔ نتیجہ صفحہ 0 میں پوائنٹر کے علاقے کی طرف اشارہ کرتا ہے۔ مثال کے طور پر، اگر دلچسپی کا پتہ (پوائنٹڈ) $8765 ہے اور یہ صفحہ 0 کے $50 اور $51 کے بائٹ مقامات پر ہے، اور X رجسٹر میں قیمت $30 ہے، ٹائپ شدہ ہدایت کچھ اس طرح ہے:

LDA ($20.X)

کیونکہ $20 + $30 = $50۔

بالواسطہ انڈیکسڈ ایڈریسنگ
یہ ایڈریسنگ موڈ Y رجسٹر کا استعمال کرتا ہے نہ کہ X رجسٹر۔ اس ایڈریسنگ موڈ کے ساتھ، اب بھی پوائنٹڈ ویلیو اور پوائنٹر ریجن موجود ہے، لیکن پوائنٹر ریجن کا مواد مختلف طریقے سے کام کرتا ہے۔ پوائنٹر ریجن کے لیے صفحہ صفر میں لگاتار دو بائٹس ہونے چاہئیں۔ پوائنٹر ریجن کا نچلا پتہ ہدایات میں ٹائپ کیا گیا ہے۔ یہ نمبر (بائٹس کا جوڑا) جو پوائنٹر کے علاقے میں موجود ہے حقیقی پوائنٹر رکھنے کے لیے Y رجسٹر میں موجود قدر میں شامل کیا جاتا ہے۔ مثال کے طور پر، دلچسپی کا پتہ (پوائنٹڈ) $8765، Y رجسٹر میں 6H کی قدر، اور نمبر (دو بائٹس) 50 کے پتے پر ہونے دیں۔ ایچ اور 51 ایچ . دونوں بائٹس ایک ساتھ $875F ہیں $875F + $6 = $8765 سے۔ ٹائپ شدہ ہدایت کچھ اس طرح ہے:

LDA ($50)، Y

4.9 اضافہ، کمی، اور ٹیسٹ-BITs کی ہدایات

درج ذیل جدول میں اضافہ اور کمی کی ہدایات کی کارروائیاں دکھائی گئی ہیں۔

INA اور DEA بالترتیب جمع کرنے والے کو بڑھاتے اور گھٹاتے ہیں۔ اسے جمع کرنے والا ایڈریسنگ کہتے ہیں۔ INX، DEX، INY، اور DEY بالترتیب X اور Y رجسٹروں کے لیے ہیں۔ وہ کوئی کام نہیں لیتے۔ لہذا، وہ مضمر ایڈریسنگ موڈ استعمال کرتے ہیں۔ اضافہ کا مطلب ہے رجسٹر یا میموری بائٹ میں 1 کا اضافہ کرنا۔ کمی کا مطلب ہے رجسٹر یا میموری بائٹ سے 1 کو گھٹانا۔

INC اور DEC بالترتیب میموری بائٹ میں اضافہ اور کمی کرتے ہیں (اور رجسٹر نہیں)۔ مطلق ایڈریسنگ کے بجائے صفر صفحہ ایڈریسنگ کا استعمال ہدایات کے لیے میموری کو کم کرنا ہے۔ زیرو پیج ایڈریسنگ میموری میں ہدایات کے لیے مطلق ایڈریسنگ سے ایک بائٹ کم ہے۔ تاہم، صفر صفحہ ایڈریسنگ موڈ صرف صفحہ صفر کو متاثر کرتا ہے۔

BIT ہدایات جمع کرنے والے میں 8 بٹس کے ساتھ میموری میں بائٹ کے بٹس کی جانچ کرتی ہے، لیکن دونوں میں کوئی تبدیلی نہیں ہوتی ہے۔ پروسیسر اسٹیٹس رجسٹر 'P' کے صرف کچھ جھنڈے سیٹ کیے گئے ہیں۔ مخصوص میموری کی جگہ کے بٹس کو منطقی طور پر جمع کرنے والے کے ساتھ جوڑا جاتا ہے۔ پھر، درج ذیل اسٹیٹس بٹس سیٹ کیے جاتے ہیں:

  • N جو اسٹیٹس رجسٹر کا بٹ 7 اور آخری بٹ (بائیں) ہے، ANDing سے پہلے میموری لوکیشن کا بٹ 7 وصول کرتا ہے۔
  • V جو اسٹیٹس رجسٹر کا بٹ 6 ہے ANDing سے پہلے میموری لوکیشن کا بٹ 6 حاصل کرتا ہے۔
  • اسٹیٹس رجسٹر کا Z جھنڈا سیٹ کیا جاتا ہے (1 بنایا گیا) اگر AND کا نتیجہ صفر ہے (00000000) 2 )۔ بصورت دیگر، یہ صاف ہو جائے گا (0 بنا دیا گیا ہے)۔

4.10 ہدایات کا موازنہ کریں۔

6502 µP کے لیے موازنہ ہدایات یادداشتیں CMP، CPX، اور CPY ہیں۔ ہر موازنہ کے بعد، پروسیسر اسٹیٹس رجسٹر 'P' کے N، Z، اور C جھنڈے متاثر ہوتے ہیں۔ جب نتیجہ منفی نمبر ہو تو N جھنڈا سیٹ کیا جاتا ہے (1 بنایا گیا)۔ جب نتیجہ صفر (000000002) ہو تو Z جھنڈا سیٹ کیا جاتا ہے (1 بنایا گیا)۔ C جھنڈا سیٹ کیا جاتا ہے (1 بنایا گیا) جب آٹھ سے نویں بٹ تک کیری ہوتی ہے۔ مندرجہ ذیل جدول ایک تفصیلی مثال دیتا ہے۔

مطلب 'اس سے بڑا'۔ اس کے ساتھ، موازنہ میز خود وضاحتی ہونا چاہئے.

4.11 چھلانگ اور شاخ کی ہدایات

مندرجہ ذیل جدول چھلانگ اور شاخ کی ہدایات کا خلاصہ کرتا ہے:

JMP ہدایت مطلق اور بالواسطہ ایڈریسنگ کا استعمال کرتی ہے۔ ٹیبل میں باقی ہدایات شاخ کی ہدایات ہیں۔ وہ 6502 µP کے ساتھ صرف رشتہ دار ایڈریس استعمال کرتے ہیں۔ اس کے ساتھ، میز خود وضاحتی ہو جاتا ہے اگر اسے بائیں سے دائیں اور اوپر سے نیچے پڑھا جائے۔

نوٹ کریں کہ شاخیں صرف دیے گئے پتے سے -128 سے +127 بائٹس کے اندر کے پتوں پر لاگو کی جا سکتی ہیں۔ یہ رشتہ دار خطاب ہے۔ JMP اور برانچ ہدایات دونوں کے لیے، پروگرام کاؤنٹر (PC) براہ راست متاثر ہوتا ہے۔ 6502 µP شاخوں کو مطلق پتہ کی اجازت نہیں دیتا، حالانکہ چھلانگ مطلق ایڈریس کر سکتی ہے۔ JMP ہدایات شاخ کی ہدایت نہیں ہے۔

نوٹ: متعلقہ ایڈریسنگ صرف برانچ ہدایات کے ساتھ استعمال کی جاتی ہے۔

4.12 اسٹیک ایریا

ایک سب روٹین دو نمبروں کو شامل کرنے یا دو نمبروں کو گھٹانے کے لئے پچھلے مختصر پروگراموں میں سے ایک کی طرح ہے۔ میموری میں اسٹیک ایریا $0100 سے $01FF تک شامل ہوتا ہے۔ اس علاقے کو محض اسٹیک کہا جاتا ہے۔ جب مائیکرو پروسیسر سب روٹین انسٹرکشن (JSR - مندرجہ ذیل بحث کا حوالہ دیتے ہیں) پر ایک چھلانگ لگاتا ہے، تو اسے یہ جاننے کی ضرورت ہوتی ہے کہ ختم ہونے پر کہاں واپس جانا ہے۔ 6502 µP اس معلومات (واپسی کا پتہ) کو $0100 سے $01FF (اسٹیک ایریا) تک کم میموری میں رکھتا ہے اور اسٹیک پوائنٹر رجسٹر کا مواد استعمال کرتا ہے جو کہ مائیکرو پروسیسر میں 'S' بطور پوائنٹر (9 بٹس) آخری واپس کیے گئے پتے پر ہوتا ہے۔ جو میموری کے صفحہ 1 ($0100 سے $01FF) میں محفوظ ہے۔ اسٹیک $01FF سے نیچے بڑھتا ہے اور سب روٹینز کو 128 سطحوں تک گہرا کرنا ممکن بناتا ہے۔

اسٹیک پوائنٹر کا ایک اور استعمال مداخلتوں کو سنبھالنا ہے۔ 6502 µP میں IRQ اور NMI کا لیبل لگا ہوا پن ہوتا ہے۔ یہ ممکن ہے کہ کچھ چھوٹے برقی سگنل ان پنوں پر لگائے جائیں اور 6502 µP کو ایک پروگرام پر عمل کرنا چھوڑ دیں اور اسے دوسرے پر عمل کرنا شروع کر دیں۔ اس صورت میں، پہلے پروگرام میں خلل پڑتا ہے۔ سب روٹینز کی طرح، انٹرپٹ کوڈ سیگمنٹس کو نیسٹ کیا جا سکتا ہے۔ مداخلت پروسیسنگ پر اگلے باب میں بحث کی گئی ہے۔

نوٹ : اسٹیک پوائنٹر میں $0100 سے $01FF تک کے مقامات کو ایڈریس کرنے کے لیے نچلے بائٹ ایڈریس کے لیے 8 بٹس ہوتے ہیں۔ 00000001 کا اعلی بائٹ 2 فرض کیا جاتا ہے.

مندرجہ ذیل جدول وہ ہدایات دیتا ہے جو اسٹیک پوائنٹر 'S' کو A, X, Y، اور P رجسٹروں کے ساتھ میموری میں اسٹیک ایریا سے جوڑتا ہے:

4.13 سبروٹین کال اور واپسی

سب روٹین ہدایات کا ایک مجموعہ ہے جو کسی خاص مقصد کو حاصل کرتا ہے۔ پچھلا اضافہ یا گھٹاؤ پروگرام ایک بہت مختصر سبروٹین ہے۔ سبروٹینز کو بعض اوقات صرف معمولات کہا جاتا ہے۔ سب روٹین کو کال کرنے کی ہدایت یہ ہے:

JSR : سب روٹین پر جائیں۔

سب روٹین سے واپسی کی ہدایت یہ ہے:

RTS: سبروٹین سے واپسی

مائیکرو پروسیسر کا رحجان ہوتا ہے کہ وہ میموری میں ہدایات کو ایک کے بعد ایک لگاتار عمل میں لاتا ہے۔ فرض کریں کہ مائیکرو پروسیسر فی الحال ایک کوڈ سیگمنٹ پر عملدرآمد کر رہا ہے اور اسے ایک جمپ (JMP) کی ہدایت کا سامنا کرنا پڑتا ہے کہ وہ ایک کوڈ سیگمنٹ پر عمل درآمد کرے جس کے پیچھے کوڈ کیا گیا ہو کہ اس پر پہلے ہی عملدرآمد ہو سکتا ہے۔ یہ اس کوڈ سیگمنٹ کو پیچھے چلاتا ہے اور کوڈ سیگمنٹ کے پیچھے کے تمام کوڈ سیگمنٹ (ہدایات) پر عمل درآمد جاری رکھتا ہے، جب تک کہ یہ موجودہ کوڈ سیگمنٹ کو دوبارہ عمل میں نہیں لاتا اور نیچے جاری رہتا ہے۔ JMP اگلی ہدایات کو اسٹیک پر نہیں دھکیلتا ہے۔

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

JSR اور RTS کے استعمال کے لیے درج ذیل مثال دیکھیں:

4.14 کاؤنٹ ڈاؤن لوپ کی مثال

مندرجہ ذیل ذیلی روٹین کی گنتی $FF سے $00 تک ہوتی ہے (کل 256 10 شمار):

LDX #$FF شروع کریں؛ X کو $FF = 255 کے ساتھ لوڈ کریں۔
لوپ DEX ؛ X = X – 1
BNE لوپ؛ اگر X صفر نہیں تو لوپ پر جائیں۔
آر ٹی ایس؛ واپسی

ہر لائن میں ایک تبصرہ ہے۔ تبصرے پھانسی کے لئے کبھی بھی میموری میں نہیں جاتے ہیں۔ اسمبلر (مترجم) جو کسی پروگرام کو اس میں تبدیل کرتا ہے جو اس کی یادداشت میں ہے عملدرآمد (چلانے) کے لیے ہمیشہ تبصروں کو ختم کر دیتا ہے۔ ایک تبصرہ '؛' سے شروع ہوتا ہے . اس پروگرام میں 'شروع' اور 'لوپ' کو لیبل کہتے ہیں۔ ایک لیبل ہدایات کے پتے کے لیے (نام) کی شناخت کرتا ہے۔ اگر انسٹرکشن ایک سنگل بائٹ انسٹرکشن (مضمون ایڈریسنگ) ہے تو لیبل اس ہدایت کا پتہ ہے۔ اگر انسٹرکشن ملٹی بائٹ انسٹرکشن ہے تو لیبل ملٹی بائٹ انسٹرکشن کے لیے پہلے بائٹ کی شناخت کرتا ہے۔ اس پروگرام کی پہلی ہدایات دو بائٹس پر مشتمل ہے۔ یہ فرض کرتے ہوئے کہ یہ $0300 ایڈریس سے شروع ہوتا ہے، $0300 ایڈریس کو پروگرام میں 'اسٹارٹ' کے ساتھ تبدیل کیا جا سکتا ہے۔ دوسری انسٹرکشن (DEX) سنگل بائٹ انسٹرکشن ہے، اور اسے $0302 ایڈریس پر ہونا چاہیے۔ اس کا مطلب ہے کہ $0302 ایڈریس کو پروگرام میں نیچے 'لوپ' کے ساتھ تبدیل کیا جا سکتا ہے، جو دراصل 'BNE لوپ' میں ہے۔

'BNE لوپ' کا مطلب دیئے گئے پتے کی شاخ ہے جب اسٹیٹس رجسٹر کا Z جھنڈا 0 ہے۔ جب A یا X یا Y رجسٹر میں ویلیو 00000000 ہو 2 آخری آپریشن کی وجہ سے، Z جھنڈا 1 (سیٹ) ہے۔ لہذا، جبکہ یہ 0 ہے (1 نہیں)، پروگرام میں دوسری اور تیسری ہدایات اسی ترتیب میں دہرائی جاتی ہیں۔ ہر دہرائی جانے والی ترتیب میں، X رجسٹر میں قدر (پوری تعداد) میں 1 کی کمی واقع ہوتی ہے۔ DEX کا مطلب ہے X = X – 1۔ جب X رجسٹر میں قیمت $00 = 00000000 ہے۔ 2 ، Z 1 بن جاتا ہے۔ اس وقت، دو ہدایات کی مزید تکرار نہیں ہوتی ہے۔ پروگرام میں آخری RTS انسٹرکشن، جو کہ سنگل بائٹ انسٹرکشن (مضمون ایڈریسنگ) ہے، سب روٹین سے واپس آتی ہے۔ اس ہدایت کا اثر یہ ہے کہ اس کوڈ کے لیے اسٹیک میں پروگرام کا کاؤنٹر ایڈریس بنا دیا جائے جسے سب روٹین کال سے پہلے عمل میں لانا ہے اور پروگرام کاؤنٹر (PC) پر واپس جانا ہے۔ یہ پتہ اس ہدایت کا پتہ ہے جو سب روٹین کو بلانے سے پہلے عمل میں لانا ہے۔

نوٹ: 6502 µP کے لیے اسمبلی لینگویج پروگرام لکھتے وقت، صرف ایک لیبل لائن کے شروع میں شروع ہونا چاہیے۔ کسی دوسرے لائن کوڈ کو کم از کم ایک جگہ دائیں طرف منتقل کرنا ضروری ہے۔

سبروٹین کو کال کرنا
میموری کی جگہ کو نظر انداز کرتے ہوئے جو پچھلے لیبلز کے ذریعے لی جاتی ہے، پروگرام میموری (RAM) میں لگاتار مقامات کے 6 بائٹس $0300 سے $0305 تک لیتا ہے۔ اس صورت میں، پروگرام ہے:

LDX #$FF ; X کو $FF = 255 کے ساتھ لوڈ کریں۔
DEX ؛ X = X – 1
BNE $0302 ; اگر X صفر نہیں تو لوپ پر جائیں۔
آر ٹی ایس؛ واپسی

میموری میں $0200 ایڈریس سے شروع کرنا سب روٹین کے لیے کال ہو سکتا ہے۔ کال کی ہدایت یہ ہے:

JSR شروع؛ شروعات کا پتہ $0300 ہے، یعنی JSR $0300

سب روٹین اور اس کی کال جو کہ ٹیکسٹ ایڈیٹر فائل میں مناسب طریقے سے لکھی گئی ہے وہ ہے:

LDX #$FF شروع کریں؛ X کو $FF = 255 کے ساتھ لوڈ کریں۔
لوپ DEX ؛ X = X – 1

BNE لوپ؛ اگر X صفر نہیں تو لوپ پر جائیں۔
آر ٹی ایس؛ واپسی

JSR آغاز: $0300 سے شروع ہونے والے معمول پر جائیں۔

اب، ایک طویل پروگرام میں بہت سے سب روٹینز ہو سکتے ہیں۔ ان سب کا نام 'شروع' نہیں ہو سکتا۔ ان کے مختلف نام ہونے چاہئیں۔ درحقیقت، ان میں سے کسی کا نام 'شروع' نہیں ہوسکتا ہے۔ 'شروع' یہاں تدریسی وجوہات کے لیے استعمال ہوتا ہے۔

4.15 پروگرام کا ترجمہ کرنا

کسی پروگرام کا ترجمہ کرنے یا اسے جمع کرنے کا مطلب ایک ہی چیز ہے۔ مندرجہ ذیل پروگرام پر غور کریں:

LDX #$FF شروع کریں : X کو $FF = 255 کے ساتھ لوڈ کریں۔
لوپ DEX : X = X - 1
BNE لوپ: اگر X صفر نہیں ہے تو لوپ پر جائیں۔
RTS: واپسی
JSR آغاز: $0300 سے شروع ہونے والے معمول پر جائیں۔

یہ وہ پروگرام ہے جو پہلے لکھا گیا ہے۔ اس میں سبروٹین، اسٹارٹ اور سبروٹین کی کال شامل ہوتی ہے۔ پروگرام کی گنتی 255 سے نیچے ہے۔ 10 0 سے 10 . پروگرام $0200 (RAM) کے صارف کے ابتدائی پتہ سے شروع ہوتا ہے۔ پروگرام کو ٹیکسٹ ایڈیٹر میں ٹائپ کیا جاتا ہے اور ڈسک میں محفوظ کیا جاتا ہے۔ اس کا ایک نام ہے جیسے 'sample.asm' جہاں 'sample' پروگرامر کی پسند کا نام ہے لیکن اسمبلی لینگویج کے لیے '.asm' ایکسٹینشن فائل نام کے ساتھ منسلک ہونا چاہیے۔

اسمبل پروگرام دوسرے پروگرام کے ذریعہ تیار کیا جاتا ہے جسے اسمبلر کہا جاتا ہے۔ اسمبلر 6502 µP کے مینوفیکچرر یا کسی تیسرے فریق کے ذریعے فراہم کیا جاتا ہے۔ اسمبلر پروگرام کو اس طرح دوبارہ تیار کرتا ہے کہ یہ میموری (RAM) میں ہوتا ہے جیسا کہ یہ چلتا ہے (رن)۔

فرض کریں کہ JSR ہدایات $0200 ایڈریس سے شروع ہوتی ہے اور سب روٹین $0300 ایڈریس سے شروع ہوتی ہے۔ اسمبلر تمام تبصروں اور سفید جگہوں کو ہٹا دیتا ہے۔ تبصرے اور سفید جگہیں یادداشت کو ضائع کرتی ہیں جو ہمیشہ نایاب ہوتی ہے۔ پچھلے سب روٹین کوڈ سیگمنٹ اور سب روٹین کال کے درمیان ممکنہ خالی لائن وائٹ اسپیس کی ایک مثال ہے۔ اسمبل فائل اب بھی ڈسک میں محفوظ ہے، اور اس کا نام 'sample.exe' جیسا ہے۔ 'نمونہ' پروگرامر کی پسند کا نام ہے، لیکن '.exe' ایکسٹینشن اس بات کی نشاندہی کرنے کے لیے ہونی چاہیے کہ یہ ایک قابل عمل فائل ہے۔

جمع پروگرام کو مندرجہ ذیل دستاویز کیا جا سکتا ہے:

اس طرح کی دستاویز تیار کرنا ہاتھ سے جمع کرنا کہا جاتا ہے۔ نوٹ کریں کہ اس دستاویز میں تبصرے میموری میں ظاہر نہیں ہوتے ہیں (عمل درآمد کے لیے)۔ ٹیبل میں ایڈریس کالم میموری میں ہدایات کے ابتدائی پتوں کی نشاندہی کرتا ہے۔ نوٹ کریں کہ 'JSR اسٹارٹ' جو کہ 'JSR $0300' ہے، جس کو '20 03 00' کے طور پر کوڈ کرنے کی توقع ہے، اصل میں '20 00 03' کے طور پر کوڈ کیا جاتا ہے جس میں لوئر میموری بائٹ ایڈریس میموری میں لوئر بائٹ لے کر جاتا ہے۔ زیادہ میموری بائٹ ایڈریس میموری میں زیادہ بائٹ لے رہا ہے - تھوڑا سا ختم ہونا۔ JSR کے لیے opcode 20 ہے۔ 16 .

نوٹ کریں کہ برانچ انسٹرکشن کا آفسیٹ جیسا کہ BNE 128 کی حد میں دو کا تکمیلی نمبر ہے۔ 10 + 127 تک 10 . لہذا، 'BNE لوپ' کا مطلب ہے 'BNE -1 10 جو دراصل FF کے کوڈ فارم میں 'D0 FF' ہے۔ 16 دو کی تکمیل میں -1 ہے جسے بیس دو میں = 11111111 لکھا جاتا ہے۔ اسمبلر پروگرام لیبلز اور فیلڈز کو اصل ہیکساڈیسیمل نمبرز سے بدل دیتا ہے (ہیکساڈیسیمل نمبرز بائنری نمبرز ہوتے ہیں جو چار بٹس میں گروپ ہوتے ہیں)۔ اصل پتے جہاں سے ہر ہدایت شروع ہوتی ہے اصل میں شامل ہیں۔

نوٹ: 'JSR اسٹارٹ' ہدایات کو مختصر ہدایات سے بدل دیا گیا ہے جو پروگرام کاؤنٹر کے موجودہ مواد (ہائی اور لو بائٹس) کو اسٹیک پوائنٹر کے ساتھ اسٹیک پر بھیجتی ہیں جو دو بار کم ہوتی ہے (ایک بار ہائی بائٹ کے لیے اور ایک بار لو بائٹ کے لیے) اور پھر پی سی کو $0300 ایڈریس کے ساتھ دوبارہ لوڈ کرتا ہے۔ اسٹیک پوائنٹر اب $00FD کی طرف اشارہ کرتا ہے، یہ فرض کرتے ہوئے کہ اسے $01FF پر شروع کیا گیا ہے۔

اس کے علاوہ، آر ٹی ایس ہدایات کو بہت سی چھوٹی ہدایات سے تبدیل کیا جاتا ہے جو اسٹیک پوائنٹر 'S' کو دو بار بڑھاتا ہے (ایک بار کم بائٹ کے لیے اور ایک بار ہائی بائٹ کے لیے) اور متعلقہ دو بائٹس کو اسٹیک پوائنٹر سے پی سی کی طرف کھینچتا ہے۔ اگلی ہدایت.

نوٹ: ایک لیبل ٹیکسٹ میں 8 حروف سے زیادہ نہیں ہونا چاہیے۔

'BNE لوپ' متعلقہ ایڈریسنگ کا استعمال کرتا ہے۔ اس کا مطلب ہے -3 شامل کرنا 10 $0305 کے اگلے پروگرام کاؤنٹر مواد کے لیے۔ 'BNE لوپ' کے بائٹس 'D0 FD' ہیں جہاں FD دونوں کا -3 کا تکمیلی ہے۔ 10 .

نوٹ: یہ باب 6502 µP کے لیے تمام ہدایات پیش نہیں کرتا ہے۔ تمام ہدایات اور ان کی تفصیلات 'SY6500 8-Bit Microprocessor Family' کے عنوان سے دستاویز میں دیکھی جا سکتی ہیں۔ اس دستاویز کے لیے '6502.pdf' نام کے ساتھ ایک پی ڈی ایف فائل ہے جو انٹرنیٹ پر مفت دستیاب ہے۔ اس دستاویز میں بیان کردہ 6502 µP 65C02 ہے۔

4.16 رکاوٹیں

کموڈور 64 کی بیرونی (عمودی سطح) بندرگاہوں سے منسلک کسی بھی ڈیوائس کے سگنلز کو 6502 مائکرو پروسیسر تک پہنچنے سے پہلے CIA 1 یا CIA 2 سرکٹس (ICs) سے گزرنا پڑتا ہے۔ 6502 µP کی ڈیٹا بس سے سگنلز کو کسی بھی بیرونی ڈیوائس تک پہنچنے سے پہلے CIA 1 یا CIA 2 چپ سے گزرنا پڑتا ہے۔ سی آئی اے کا مطلب ہے کمپلیکس انٹرفیس اڈاپٹر۔ تصویر 4.1 میں 'Block Diagram of the Commodore_64 Motherboard'، بلاک ان پٹ/آؤٹ پٹ ڈیوائسز CIA 1 اور CIA 2 کی نمائندگی کرتے ہیں۔ جب کوئی پروگرام چل رہا ہوتا ہے، تو اسے جاری رکھنے سے پہلے کوڈ کے کسی اور ٹکڑے کو چلانے میں رکاوٹ ڈالی جا سکتی ہے۔ ہارڈ ویئر میں رکاوٹ اور سافٹ ویئر کی رکاوٹ ہے۔ ہارڈویئر میں رکاوٹ کے لیے، 6502 µP میں دو ان پٹ سگنل پن ہیں۔ ان پنوں کے نام یہ ہیں۔ IRQ اور این ایم آئی . یہ µP ڈیٹا لائنیں نہیں ہیں۔ µP کے لیے ڈیٹا لائنیں D7, D6, D5, D4, D3, D2, D1 اور D0 ہیں۔ کم از کم اہم بٹ کے لیے D0 اور سب سے اہم بٹ کے لیے D7 کے ساتھ۔

IRQ Interrupt ReQuest 'فعال' کم کا مطلب ہے۔ µP کی یہ ان پٹ لائن عام طور پر زیادہ ہوتی ہے، تقریباً 5 وولٹ پر۔ جب یہ تقریباً 0 وولٹ تک نیچے چلا جاتا ہے، تو یہ ایک مداخلت کی درخواست ہے جو µP کا اشارہ دیتی ہے۔ جیسے ہی درخواست منظور ہوتی ہے، لائن واپس اوپر جاتی ہے۔ مداخلت کی درخواست کو منظور کرنے کا مطلب ہے کہ µP کوڈ (سب روٹین) پر برانچ کرتا ہے جو مداخلت کو ہینڈل کرتا ہے۔

این ایم آئی نان ماسک ایبل انٹرپٹ 'ایکٹو' لو کا مطلب ہے۔ جبکہ کے لیے کوڈ IRQ پھانسی دی جا رہی ہے این ایم آئی کم جا سکتا ہے. اس معاملے میں، این ایم آئی ہینڈل کیا جاتا ہے (اس کا اپنا کوڈ عمل میں آتا ہے)۔ اس کے بعد، کے لئے کوڈ IRQ جاری ہے کے لئے کوڈ کے بعد IRQ ختم ہوتا ہے، مرکزی پروگرام کوڈ جاری رہتا ہے۔ یہ ہے کہ، این ایم آئی میں خلل ڈالتا ہے IRQ ہینڈلر کے لیے سگنل این ایم آئی µP کو تب بھی دیا جا سکتا ہے یہاں تک کہ جب µP بیکار ہو اور کچھ بھی نہیں سنبھال رہا ہو یا کوئی اہم پروگرام نہ چلا رہا ہو۔

نوٹ: یہ اصل میں اعلی سے کم کی منتقلی ہے این ایم آئی ، یہ ہے این ایم آئی سگنل - اس پر مزید بعد میں۔ IRQ عام طور پر CIA 1 اور سے آتا ہے۔ این ایم آئی عام طور پر سی آئی اے 2 سے آتا ہے۔ این ایم آئی ، جس کا مطلب ہے نان ماسک ایبل انٹرپٹ، اسے نان اسٹاپ ایبل انٹرپٹ سمجھا جا سکتا ہے۔

مداخلتوں کو ہینڈل کرنا
خواہ درخواست کی طرف سے ہو۔ IRQ یا این ایم آئی موجودہ ہدایات کو مکمل کرنا ضروری ہے۔ 6502 میں صرف A، X، اور Y رجسٹر ہیں۔ جب ایک سب روٹین کام کر رہا ہے، ہو سکتا ہے وہ ان تینوں رجسٹروں کو ایک ساتھ استعمال کر رہا ہو۔ ایک انٹرپٹ ہینڈلر اب بھی ایک سب روٹین ہے، حالانکہ اس طرح نہیں دیکھا جاتا ہے۔ موجودہ ہدایات کے مکمل ہونے کے بعد، 65C02 µP کے A, X, اور Y رجسٹروں کے مواد کو اسٹیک میں محفوظ کیا جاتا ہے۔ پروگرام کاؤنٹر کی اگلی ہدایات کا پتہ بھی اسٹیک پر بھیجا جاتا ہے۔ µP پھر مداخلت کے لیے کوڈ کی شاخیں بناتا ہے۔ اس کے بعد، A، X، اور Y رجسٹروں کے مواد کو پھر اسٹیک سے ریورس ترتیب میں بحال کیا جاتا ہے جس پر وہ بھیجے جاتے ہیں۔

مداخلت کے لیے کوڈنگ کی مثال
سادگی کے لیے، فرض کریں کہ µP کے لیے معمول IRQ interrupt صرف نمبرز $01 اور $02 کو شامل کرنا ہے اور $03 کا نتیجہ $0400 کے میموری ایڈریس پر محفوظ کرنا ہے۔ کوڈ ہے:

آئی ایس آر پی ایچ اے
پی ایچ ایکس
پی ایچ وائی
;
LDA #$01
ADC #$02
ان کی قیمت $0400 ہے۔
;
PLY
PLX
پی ایل اے
آر ٹی آئی

ISR ایک لیبل ہے اور میموری ایڈریس کی نشاندہی کرتا ہے جہاں PHA ہدایات ہے۔ ISR کا مطلب ہے انٹرپٹ سروس روٹین۔ پی ایچ اے، پی ایچ ایکس، اور پی ایچ وائی A، X، اور Y رجسٹروں کے مواد کو اس امید کے ساتھ اسٹیک پر بھیجتے ہیں کہ ان کی ضرورت کسی بھی کوڈ (پروگرام) کو ہو گی جو رکاوٹ سے بالکل پہلے چل رہا ہے۔ اگلی تین ہدایات انٹرپٹ ہینڈلر کا بنیادی حصہ بنتی ہیں۔ PLY، PLX، اور PLA ہدایات کو اسی ترتیب میں ہونا چاہیے، اور وہ Y، X، اور A رجسٹروں کے مواد کو واپس لاتے ہیں۔ آخری ہدایات، جو کہ آر ٹی آئی ہے، (بغیر کسی آپرینڈ کے) کسی بھی کوڈ (پروگرام) پر عمل درآمد کے تسلسل کو لوٹاتا ہے جو رکاوٹ سے پہلے عمل میں آ رہا ہے۔ RTI اس کوڈ کی اگلی ہدایات کا پتہ کھینچتا ہے جو اسٹیک سے پروگرام کاؤنٹر پر واپس چلا جاتا ہے۔ آر ٹی آئی کا مطلب ہے انٹرپٹ سے واپسی۔ اس کے ساتھ ہی، انٹرپٹ ہینڈلنگ (سب روٹین) ختم ہو گئی ہے۔

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

سبروٹین اور انٹرپٹ سروس روٹین کا موازنہ اور تضاد
درج ذیل جدول سبروٹائن اور انٹرپٹ سروس روٹین کا موازنہ اور اس کے برعکس کرتا ہے:

4.17 6502 مین ایڈریسنگ موڈز کا خلاصہ

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

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

LDA #$77

مطلق ایڈریسنگ موڈ
مطلق ایڈریسنگ موڈ میں، ایک آپرینڈ ہوتا ہے۔ یہ آپرینڈ میموری میں قدر کا پتہ ہے (عام طور پر ہیکساڈیسیمل یا لیبل میں)۔ 64K ہیں۔ 10 = 65,536 10 6502 µP کے لیے میموری ایڈریس۔ عام طور پر، ایک بائٹ قدر ان پتوں میں سے ایک پر ہوتی ہے۔ 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 رجسٹر کو ایک یونٹ سے کم کریں۔

رشتہ دار ایڈریسنگ موڈ
متعلقہ ایڈریسنگ موڈ صرف برانچ ہدایات سے متعلق ہے۔ رشتہ دار ایڈریسنگ موڈ میں، صرف ایک آپرینڈ ہے. یہ -128 سے ایک قدر ہے۔ 10 +127 تک 10 . اس قدر کو آفسیٹ کہا جاتا ہے۔ نشانی کی بنیاد پر، اس قدر کو پروگرام کاؤنٹر کی اگلی ہدایات میں شامل یا گھٹا دیا جاتا ہے جس کے نتیجے میں مطلوبہ اگلی ہدایت کا پتہ مل جاتا ہے۔ متعلقہ ایڈریس موڈ ہدایات ہیں: BCC, BCS, BEQ, BMI, BNE, BPL, BRA, BVC, BVS۔ ہدایات کی مثالیں ہیں:

BNE $7F : (برانچ اگر اسٹیٹس رجسٹر میں Z = 0، P)

جو موجودہ پروگرام کاؤنٹر میں 127 کا اضافہ کر دیتا ہے (ایگزیکیویٹ کے لیے ایڈریس) اور اس ایڈریس پر ہدایات پر عمل درآمد شروع کر دیتا ہے۔ اسی طرح:

BEQ $F9 : (برانچ اگر Z = : اسٹیٹس رجسٹر میں، P)

جو موجودہ پروگرام کاؤنٹر میں ایک -7 کا اضافہ کرتا ہے اور نئے پروگرام کاؤنٹر ایڈریس پر عملدرآمد شروع کرتا ہے۔ اوپرینڈ ایک دو کا تکمیلی نمبر ہے۔

مطلق انڈیکسڈ ایڈریسنگ
مطلق انڈیکس ایڈریسنگ میں، X یا Y رجسٹر کا مواد دیئے گئے مطلق پتے میں شامل کیا جاتا ہے ($0000 سے $FFFF تک، یعنی 0 سے 10 65536 تک 10 ) حقیقی پتہ حاصل کرنا۔ یہ دیا ہوا مطلق پتہ بنیادی پتہ کہلاتا ہے۔ اگر X رجسٹر استعمال کیا جاتا ہے، تو اسمبلی کی ہدایات کچھ اس طرح ہیں:

LDA $C453,X

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

LDA $C453,Y

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

مکمل انڈیکس ایڈریسنگ ہدایات ہیں: 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 ہدایات میں قوسین میں ہے جہاں 34 لوئر بائٹ ہے اور 56 اعلی بائٹ ہے۔

4.18 6502 µP اسمبلی لینگویج کے ساتھ سٹرنگ بنانا

جیسا کہ اگلے باب میں دکھایا گیا ہے، میموری میں فائل بنانے کے بعد، فائل کو ڈسک میں محفوظ کیا جا سکتا ہے۔ فائل کو ایک نام دینے کی ضرورت ہے۔ نام تار کی ایک مثال ہے۔ پروگرامنگ میں تاروں کی بہت سی دوسری مثالیں ہیں۔

ASCII کوڈز کی سٹرنگ بنانے کے دو اہم طریقے ہیں۔ دونوں طریقوں سے، تمام ASCII کوڈز (کردار) میموری میں لگاتار بائٹ مقامات لیتے ہیں۔ ایک طریقے سے، بائٹس کی اس ترتیب سے پہلے ایک عدد بائٹ ہوتا ہے جو ترتیب (سٹرنگ) میں لمبائی (حروف کی تعداد) ہے۔ دوسرے طریقے سے، حروف کی ترتیب کو Null بائٹ کے ذریعے کامیاب کیا جاتا ہے (فوری طور پر اس کے بعد) جو کہ 00 ہے۔ 16 ، یعنی $00۔ اسٹرنگ کی لمبائی (حروف کی تعداد) اس طرح سے ظاہر نہیں کی گئی ہے۔ Null حرف پہلے طریقے سے استعمال نہیں ہوتا ہے۔

مثال کے طور پر، 'میں تم سے پیار کرتا ہوں!' پر غور کریں۔ حوالوں کے بغیر تار۔ یہاں لمبائی 11 ہے۔ ایک جگہ ایک ASCII بائٹ (کردار) کے طور پر شمار ہوتی ہے۔ فرض کریں کہ سٹرنگ کو میموری میں رکھا جانا ہے جس کا پہلا کریکٹر ایڈریس $0300 پر ہے۔

جب پہلا بائٹ 11 ہوتا ہے تو درج ذیل جدول سٹرنگ میموری کی ترتیب دکھاتا ہے۔ 10 = 0B 16 :

جب پہلی بائٹ 'I' ہو اور آخری بائٹ Null ($00) ہو تو درج ذیل جدول سٹرنگ میموری کی ترتیب دکھاتا ہے:

سٹرنگ بنانا شروع کرنے کے لیے درج ذیل ہدایات کا استعمال کیا جا سکتا ہے:

ان کی قیمت $0300 ہے۔

فرض کریں کہ پہلا بائٹ جمع کرنے والے میں ہے جسے $0300 کے ایڈریس لوکیشن پر بھیجا جانا ہے۔ یہ ہدایت دونوں صورتوں (دونوں قسم کے تاروں) کے لیے درست ہے۔

میموری سیلز میں تمام حروف کو فٹ کرنے کے بعد، ایک ایک کرکے، سٹرنگ کو لوپ کے ذریعے پڑھا جا سکتا ہے۔ پہلی صورت کے لیے، طوالت کے بعد حروف کی تعداد پڑھی جاتی ہے۔ دوسری صورت میں، حروف کو 'I' سے پڑھا جاتا ہے جب تک کہ Null کریکٹر جو 'Null' ہے پورا نہ ہو جائے۔

4.19 6502 µP اسمبلی لینگویج کے ساتھ ایک صف بنانا

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

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

4.20 مسائل

قارئین کو مشورہ دیا جاتا ہے کہ اگلے باب میں جانے سے پہلے ایک باب میں تمام مسائل حل کر لیں۔

  1. ایک اسمبلی لینگویج پروگرام لکھیں جو 6502 µP کے لیے $0200 سے شروع ہوتا ہے اور 2A94 کے غیر دستخط شدہ نمبروں کو شامل کرتا ہے۔ ایچ (اضافہ کریں) 2ABF میں ایچ (agend) ان پٹ اور آؤٹ پٹ کو میموری میں رہنے دیں۔ اس کے علاوہ، اسمبل شدہ پروگرام دستاویز کو ہاتھ سے تیار کریں۔
  2. ایک اسمبلی لینگویج پروگرام لکھیں جو 6502 µP کے لیے $0200 سے شروع ہوتا ہے اور 1569 کے غیر دستخط شدہ نمبروں کو گھٹا دیتا ہے۔ ایچ (subtrahend) 2ABF سے ایچ (ذہین) ان پٹ اور آؤٹ پٹ کو میموری میں رہنے دیں۔ اس کے علاوہ، اسمبل شدہ پروگرام دستاویز کو ہاتھ سے تیار کریں۔
  3. 6502 µP کے لیے ایک اسمبلی لینگوئج پروگرام لکھیں جو لوپ کا استعمال کرتے ہوئے $00 سے $09 تک شمار ہوتا ہے۔ پروگرام $0200 سے شروع ہونا چاہیے۔ اس کے علاوہ، اسمبل شدہ پروگرام دستاویز کو ہاتھ سے تیار کریں۔
  4. ایک اسمبلی لینگوئج پروگرام لکھیں جو 6502 µP کے لیے $0200 سے شروع ہوتا ہے۔ پروگرام کے دو ذیلی روٹینز ہیں۔ پہلا سب روٹین 0203 کے غیر دستخط شدہ نمبروں کو شامل کرتا ہے۔ ایچ (agend) اور 0102H (اضافہ)۔ دوسرا سب روٹین پہلے سب روٹین سے جوڑتا ہے جو کہ 0305H سے 0006 ہے ایچ (agend) حتمی نتیجہ میموری میں محفوظ ہے۔ پہلی سبروٹین کو کال کریں جو FSTSUB ہے اور دوسری سبروٹین جو SECSUB ہے۔ ان پٹ اور آؤٹ پٹ کو میموری میں رہنے دیں۔ اس کے علاوہ، پورے پروگرام کے لیے اسمبل شدہ پروگرام دستاویز ہاتھ سے تیار کریں۔
  5. یہ دیکھتے ہوئے کہ ایک IRQ ہینڈلر کور ہینڈلنگ کے دوران جمع کرنے والے پر $02 سے $01 کا اضافہ کرتا ہے۔ این ایم آئی جاری کیا جاتا ہے اور اس کے لیے بنیادی ہینڈلنگ این ایم آئی جمع کرنے والے پر $05 سے $04 کا اضافہ کرتا ہے، دونوں ہینڈلرز کے لیے ان کی کالوں سمیت اسمبلی کی زبان لکھیں۔ کو کال IRQ ہینڈلر کو $0200 کے پتے پر ہونا چاہیے۔ دی IRQ ہینڈلر کو $0300 کے پتے سے شروع کرنا چاہئے۔ دی این ایم آئی ہینڈلر کو $0400 کے پتے سے شروع کرنا چاہئے۔ کا نتیجہ IRQ ہینڈلر کو $0500 کے پتے پر رکھا جانا چاہیے، اور اس کا نتیجہ این ایم آئی ہینڈلر کو $0501 کے پتے پر رکھا جانا چاہیے۔
  6. مختصراً بیان کریں کہ کس طرح BRK ہدایات کو 65C02 کمپیوٹر میں سافٹ ویئر انٹرپٹ بنانے کے لیے استعمال کیا جاتا ہے۔
  7. ایک ٹیبل تیار کریں جو ایک عام سب روٹین کا موازنہ اور اس کے برعکس سروس روٹین کے درمیان ہو۔
  8. 65C02 µP کے بنیادی ایڈریسنگ موڈز کو اسمبلی لینگویج ہدایات کی مثالوں کے ساتھ مختصراً بیان کریں۔
  9. a) 'I love you!' ڈالنے کے لیے 6502 مشینی زبان کا پروگرام لکھیں۔ میموری میں ASCII کوڈز کی سٹرنگ، سٹرنگ کی لمبائی کے ساتھ $0300 ایڈریس سے شروع ہوتی ہے۔ پروگرام $0200 ایڈریس سے شروع ہونا چاہئے۔ ہر ایک کردار کو جمع کرنے والے سے ایک ایک کرکے حاصل کریں، یہ فرض کرتے ہوئے کہ وہ وہاں بھیجے گئے ہیں، کسی ذیلی روٹین کے ذریعے۔ اس کے علاوہ، ہاتھ سے پروگرام کو جمع کریں. (اگر آپ کو 'میں تم سے پیار کرتا ہوں!' کے ASCII کوڈز جاننے کی ضرورت ہے۔ وہ یہ ہیں: 'I':49 16 جگہ: 20 16 , 'l': 6C 16 , 'o':6F 16 , 'میں':76 16 , 'e':65, 'y':79 16 , 'میں':75 16 ، اور '!':21 16 (نوٹ: ہر کوڈ 1 بائٹ پر قبضہ کرتا ہے)۔
    ب) 'میں تم سے پیار کرتا ہوں!' ڈالنے کے لیے 6502 مشینی زبان کا پروگرام لکھیں۔ میموری میں ASCII کوڈز کی سٹرنگ، سٹرنگ کی لمبائی کے بغیر $0300 ایڈریس سے شروع ہوتی ہے لیکن 00 پر ختم ہوتی ہے۔ 16 . پروگرام $0200 ایڈریس سے شروع ہونا چاہئے۔ جمع کرنے والے سے ہر ایک کردار کو حاصل کریں، یہ فرض کرتے ہوئے کہ وہ وہاں بھیجے گئے ہیں، ایک ایک کرکے، کسی ذیلی روٹین کے ذریعے۔ اس کے علاوہ، ہاتھ سے پروگرام کو جمع کریں.