الفصل الرابع: البرنامج التعليمي للغة تجميع المعالجات الدقيقة 6502

Alfsl Alrab Albrnamj Alt Lymy Llght Tjmy Alm Aljat Aldqyqt 6502



الفصل الرابع: البرنامج التعليمي للغة تجميع المعالجات الدقيقة 6502

4.1 مقدمة

أُطلق المعالج الدقيق 6502 في عام 1975. وقد تم استخدامه كمعالج دقيق لبعض أجهزة الكمبيوتر الشخصية مثل Apple II وCommodore 64 وBBC Micro.







لا يزال يتم إنتاج المعالج الدقيق 6502 بأعداد كبيرة حتى اليوم. ولم تعد وحدة معالجة مركزية تستخدم في أجهزة الكمبيوتر الشخصية (أجهزة الكمبيوتر المحمولة) اليوم، ولكنها لا تزال تنتج بكميات كبيرة وتستخدم في الأجهزة الإلكترونية والكهربائية اليوم. من أجل فهم بنيات الكمبيوتر الأكثر حداثة، من المفيد جدًا فحص معالج دقيق أقدم ولكنه ناجح جدًا مثل 6502.



نظرًا لأنه سهل الفهم والبرمجة، فهو أحد أفضل المعالجات الدقيقة (إن لم يكن الأفضل) المستخدمة في تدريس لغة التجميع. لغة التجميع هي لغة منخفضة المستوى يمكن استخدامها لبرمجة الكمبيوتر. لاحظ أن لغة التجميع الخاصة بأحد المعالجات الدقيقة تختلف عن لغة التجميع الخاصة بمعالج دقيق آخر. يتم تدريس لغة تجميع المعالجات الدقيقة 6502 في هذا الفصل. وبشكل أكثر دقة، فإن 65C02 هو الذي يتم تدريسه، ولكن يشار إليه ببساطة باسم 6502.



كمبيوتر مشهور في الماضي اسمه commodore_64. 6502 هو معالج دقيق من عائلة 6500. يستخدم الكمبيوتر commodore_64 المعالج الدقيق 6510. المعالج الدقيق 6510 هو من 6500 ميكروP. مجموعة التعليمات الخاصة بـ 6502 μP هي تقريبًا جميع تعليمات 6510 μP. تعتمد معرفة هذا الفصل والفصل الذي يليه على جهاز الكمبيوتر commodore_64. تُستخدم هذه المعرفة كأساس لشرح بنيات الكمبيوتر الحديثة وأنظمة التشغيل الحديثة في هذا الجزء من الدورة المهنية عبر الإنترنت.





تشير هندسة الكمبيوتر إلى مكونات اللوحة الأم للكمبيوتر وشرح لكيفية تدفق البيانات داخل كل مكون، وخاصة المعالج الدقيق، وكيفية تدفق البيانات بين المكونات، وأيضا كيفية تفاعل البيانات. المفرد للبيانات هو مسند. إحدى الطرق الفعالة لدراسة بنية الكمبيوتر هي دراسة لغة التجميع الخاصة باللوحة الأم.

يُقال إن جهاز الكمبيوتر commodore_64 هو جهاز كمبيوتر مكون من كلمة كمبيوتر 8 بت. وهذا يعني أنه يتم تخزين المعلومات ونقلها ومعالجتها في شكل رموز ثنائية مكونة من ثمانية بتات.



رسم تخطيطي للوحة الأم كومودور 64
المخطط التفصيلي للوحة الأم كومودور 64 هو:


الشكل 4.1 مخطط كتلة لوحدة نظام Commodore_64

تخيل أن المعالج الدقيق 6510 هو المعالج الدقيق 6502. إجمالي الذاكرة عبارة عن سلسلة من البايتات (8 بت لكل بايت). هناك ذاكرة الوصول العشوائي (القراءة / الكتابة) التي يمكن كتابة البايتات أو مسحها. عند إيقاف تشغيل الكمبيوتر، يتم مسح كافة المعلومات الموجودة في ذاكرة الوصول العشوائي (RAM). هناك أيضًا ذاكرة القراءة فقط (ROM). عند إيقاف تشغيل الكمبيوتر، تظل المعلومات الموجودة في ذاكرة القراءة فقط (لا يتم مسحها).

يوجد منفذ الإدخال / الإخراج (الدائرة) والذي يشار إليه بأجهزة الإدخال / الإخراج في الرسم التخطيطي. لا ينبغي الخلط بين هذا المنفذ والمنافذ المرئية على الأسطح العمودية اليمنى واليسرى أو الأمامية والخلفية لوحدة نظام الكمبيوتر. هذان شيئان مختلفان. لا يتم عرض الاتصالات من هذا المنفذ الداخلي إلى الأجهزة الطرفية مثل القرص الصلب (أو القرص المرن) ولوحة المفاتيح والشاشة في الرسم التخطيطي.

توجد ثلاث حافلات (مجموعات من الموصلات الكهربائية الصغيرة جدًا) في المخطط. يمكن لكل سلك نقل بت 1 أو بت 0. ناقل البيانات، لنقل بايت 8 بت في المرة الواحدة (نبضة ساعة واحدة) إلى ذاكرة الوصول العشوائي ومنفذ الإدخال / الإخراج (أجهزة الإدخال / الإخراج) ثنائي الاتجاه. يبلغ عرض ناقل البيانات ثمانية بتات.

جميع المكونات متصلة بحافلة العناوين. ناقل العنوان أحادي الاتجاه من المعالج الدقيق. يوجد ستة عشر موصلًا لناقل العناوين، ويحمل كل منها بتًا واحدًا (1 أو 0). يتم إرسال ستة عشر بتًا في نبضة ساعة واحدة.

هناك حافلة التحكم. تقوم بعض موصلات ناقل التحكم بنقل بت واحد من المعالج الدقيق إلى المكونات الأخرى. تحمل بعض خطوط التحكم البتات من منفذ الإدخال / الإخراج (IO) إلى المعالج الدقيق.

ذاكرة الكمبيوتر
تعتبر ذاكرة الوصول العشوائي (RAM) وذاكرة القراءة فقط (ROM) بمثابة مجموعة ذاكرة واحدة. يتم تمثيل هذا التجميع بشكل تخطيطي على النحو التالي حيث تحتوي الأرقام السداسية العشرية على البادئة '$':


الشكل 4.11 تخطيط الذاكرة لجهاز الكمبيوتر Commodore 64

ذاكرة الوصول العشوائي من 0000 16 إلى DFFF 16 وهو مكتوب من 0000 دولار إلى DFFF دولار. مع لغة التجميع 6502 μP، يُسبق الرقم السداسي العشري بـ '$' ولا يُلحق (مشترك) بـ 16 أو H أو سداسي عشري. تختفي أي معلومات موجودة في ذاكرة الوصول العشوائي (RAM) عند إيقاف تشغيل الكمبيوتر. يبدأ ROM من $E000 إلى $FFFF. يحتوي على إجراءات فرعية لا تنفجر عند إيقاف تشغيل الكمبيوتر. هذه الإجراءات الفرعية هي الإجراءات الشائعة الاستخدام والتي تساعد في البرمجة. يقوم برنامج المستخدم باستدعاءهم (ارجع إلى الفصل التالي).

المسافة (البايت) من $0200 إلى $D000 مخصصة لبرامج المستخدم. المسافة من $D000 إلى $DFFF مخصصة للمعلومات المرتبطة مباشرة بالأجهزة الطرفية (أجهزة الإدخال/الإخراج). هذا جزء من نظام التشغيل لذلك، فإن نظام التشغيل لجهاز الكمبيوتر Commodore-64 يتكون من جزأين رئيسيين: الجزء الموجود في ROM الذي لا ينطفئ أبدًا والجزء من $D000 إلى $DFFF الذي ينطفئ عند انقطاع التيار الكهربائي. يجب تحميل بيانات الإدخال/الإخراج هذه من القرص في كل مرة يتم فيها تشغيل الكمبيوتر. اليوم، تسمى هذه البيانات برامج التشغيل الطرفية. تبدأ الأجهزة الطرفية من منفذ جهاز الإدخال/الإخراج عبر التوصيلات الموجودة على اللوحة الأم إلى المنافذ المحددة على الأسطح الرأسية للكمبيوتر التي تتصل بها الشاشة ولوحة المفاتيح وما إلى ذلك وبالأجهزة الطرفية نفسها (الشاشة ولوحة المفاتيح وما إلى ذلك) .).

تتكون الذاكرة من 2 16 = 65,536 موقع بايت. في الشكل الست عشري، هذه هي 10000 16 = 10000 ح = 10000 عرافة = 10000 دولار للمواقع. في الحوسبة، يبدأ العد على أساس اثنين، وأساس عشرة، وأساس ستة عشر، وما إلى ذلك من 0 وليس من 1. وبالتالي، فإن الموقع الأول هو في الواقع رقم الموقع 0000000000000000. 2 = 0 10 = 0000 16 = 0000 دولار. في لغة التجميع 6502 μP، يكون تعريف موقع العنوان مسبوقًا بـ $ ولا توجد لاحقة أو منخفض. الموقع الأخير هو رقم الموقع 111111111111111 2 = 65,535 10 = فففف 16 = $FFFF وليس 1000000000000000 2 أو 65.536 10 أو 10000 16 ، أو 10000 دولار. 1000000000000000 2 ، 65,536 10 ، 10000 16 أو 10000 دولار يعطي العدد الإجمالي لمواقع البايت.

هنا، 2 16 = 65,536 = 64 × 1024 = 64 × 2 10 = 64 كيلو بايت (كيلو بايت). اللاحقة 64 في اسم Commodore-64 تعني 64 كيلو بايت من إجمالي الذاكرة (RAM وROM). البايت هو 8 بت، وسوف تذهب 8 بت إلى موقع بايت واحد في الذاكرة.

64 كيلو بايت من الذاكرة مقسمة إلى صفحات. تحتوي كل صفحة على 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 بت في الرسم التخطيطي. يتم تسمية البتات الثمانية ذات الأهمية الأقل باسم PCL لـ Program Counter Low. يتم تسمية البتات الثمانية الأعلى أهمية باسم PCH لـ Program Counter High. يمكن أن تتكون التعليمات الموجودة في ذاكرة Commodore-64 من بايت واحد أو اثنين أو ثلاثة بايت. تشير الـ 16 بت الموجودة في جهاز الكمبيوتر إلى التعليمات التالية التي سيتم تنفيذها في الذاكرة. من بين الدوائر الموجودة في المعالج الدقيق، هناك اثنتان منها تسمى وحدة المنطق الحسابي ووحدة فك ترميز التعليمات. إذا كانت التعليمات الحالية التي تتم معالجتها في μP (المعالج الدقيق) يبلغ طولها بايت واحد، فإن هاتين الدائرتين تزيدان من حجم الكمبيوتر للتعليمة التالية بمقدار وحدة واحدة. إذا كانت التعليمات الحالية التي تتم معالجتها في μP يبلغ طولها بايتين، مما يعني أنها تشغل بايتين متتاليين في الذاكرة، فإن هاتين الدائرتين تزيدان من حجم الكمبيوتر للتعليمة التالية بمقدار وحدتين. إذا كانت التعليمات الحالية التي تتم معالجتها في μP يبلغ طولها ثلاث بايتات، مما يعني أنها تشغل ثلاث بايتات متتالية في الذاكرة، فإن هاتين الدائرتين تزيدان من حجم الكمبيوتر للتعليمة التالية بمقدار 3 وحدات.

المجمع 'A' عبارة عن سجل للأغراض العامة مكون من ثمانية بتات يقوم بتخزين نتيجة معظم العمليات الحسابية والمنطقية.

يتم استخدام المسجلين 'X' و'Y' لحساب خطوات البرنامج. يبدأ العد في البرمجة من 0، لذلك يطلق عليهم اسم مسجلات الفهرس. لديهم بعض الأغراض الأخرى.

على الرغم من أن سجل Stack Pointer، إلا أن 'S' يحتوي على 9 بتات والتي تعتبر بمثابة سجل من ثمانية بتات. يشير محتواه إلى موقع البايت في الصفحة 1 من ذاكرة الوصول العشوائي (RAM). تبدأ الصفحة 1 من البايت 0100 دولار (256 10 ) للبايت $01FF (511 10 ). عند تشغيل البرنامج فإنه ينتقل من تعليمة إلى أخرى على التوالي في الذاكرة. ومع ذلك، هذا ليس هو الحال دائما. هناك أوقات ينتقل فيها من منطقة ذاكرة إلى منطقة ذاكرة أخرى لمواصلة تشغيل التعليمات هناك على التوالي. يتم استخدام الصفحة 1 في ذاكرة الوصول العشوائي كمكدس. المكدس عبارة عن منطقة ذاكرة وصول عشوائي (RAM) كبيرة تحتوي على العناوين التالية لاستمرار الكود من حيث توجد قفزة. الرموز التي تحتوي على تعليمات القفز غير موجودة في المكدس؛ هم في مكان آخر من الذاكرة. ومع ذلك، بعد تنفيذ تعليمات الانتقال السريع، تكون عناوين المتابعة (وليس مقاطع التعليمات البرمجية) موجودة في المكدس. لقد تم دفعهم إلى هناك نتيجة لتعليمات القفز أو الفرع.

يعد سجل حالة المعالج المكون من ثمانية بتات لـ P نوعًا خاصًا من التسجيل. البتات الفردية ليست مرتبطة أو متصلة ببعضها البعض. كل جزء هناك يسمى علم ويتم تقديره بشكل مستقل عن الأجزاء الأخرى. وترد معاني الأعلام فيما يلي حسب الحاجة.

تتم الإشارة إلى مؤشر البت الأول والأخير لكل سجل أعلى كل سجل في الرسم التخطيطي السابق. يبدأ حساب مؤشر البت (الموضع) في السجل من 0 على اليمين.

صفحات الذاكرة في ثنائي، سداسي عشري، وعشري
يوضح الجدول التالي بداية صفحات الذاكرة بالنظام الثنائي والست عشري والعشري:

كل صفحة بها 1,0000,0000 2 عدد البايتات يساوي 100 ح عدد البايتات وهو نفس 256 10 عدد البايتات. في مخطط الذاكرة السابق، تتم الإشارة إلى الصفحات التي ترتفع من الصفحة 0 ولا تنخفض كما هو موضح في الجدول.

توفر الأعمدة الثنائية والست عشرية والعشرية في هذا الجدول عناوين مواقع بايت الذاكرة في قواعدها المختلفة. لاحظ أنه بالنسبة للصفحة صفر، يلزم كتابة وحدات البت الخاصة بالبايت الأقل فقط عند البرمجة. يمكن حذف البتات الخاصة بالبايت الأعلى لأنها دائمًا أصفار (للصفحة صفر). بالنسبة لبقية الصفحات، يجب استخدام البتات الخاصة بالبايت الأعلى.

يشرح باقي هذا الفصل لغة التجميع 6502 μP باستخدام جميع المعلومات السابقة. من أجل فهم اللغة بسرعة، يجب على القارئ إجراء عمليات الجمع والطرح في الأساس السادس عشر بدلاً من الأساس العاشر. من المفترض في الواقع أن يكون الأساس الثاني، لكن الحساب على الأساس الثاني أمر مرهق. تذكر أنه عند إضافة رقمين في الأساس الثاني، فإن قيمة الحمل لا تزال 1 كما في الأساس العاشر. ولكن عند طرح رقمين في الأساس الثاني، فإن الاقتراض هو اثنان وليس عشرة كما في الأساس العشرة. عند إضافة رقمين في الأساس السادس عشر، يظل الحمل 1 كما هو الحال في الأساس العاشر. لكن عند طرح رقمين في الأساس السادس عشر، يكون الاقتراض ستة عشر وليس عشرة كما في الأساس العاشر.

4.2 تعليمات نقل البيانات

خذ بعين الاعتبار الجدول التالي لتعليمات نقل بيانات لغة التجميع لـ 6502 μP:

عندما يتم نسخ بايت (8 بتات) من موقع بايت الذاكرة إلى Accumulator Register، أو X Register، أو Y Register، يتم تحميل ذلك. عندما يتم نسخ بايت من أي من هذه السجلات إلى موقع بايت في الذاكرة، فهذا يعني النقل. عندما يتم نسخ بايت من سجل إلى آخر، فهذا لا يزال قيد النقل. في العمود الثاني من الجدول، يظهر السهم اتجاه النسخة للبايت. تُظهر بقية الأعمدة الأربعة أوضاع معالجة مختلفة.

الإدخال في عمود وضع العنونة هو رمز البايت الفعلي للجزء التذكيري المقابل من التعليمات بالنظام الست عشري. AE، على سبيل المثال، هو رمز البايت الفعلي لـ LDX والذي يهدف إلى تحميل بايت من الذاكرة إلى سجل X في وضع العنونة المطلق مثل AE 16 = 10101110 2 . لذا، فإن البتات الخاصة بـ LDX في موقع بايت الذاكرة هي 10101110.

لاحظ أنه بالنسبة للجزء LDX ذاكري من التعليمات، هناك ثلاث بايتات محتملة وهي A2 وAE وA6، وكل منها مخصص لوضع معالجة معين. عندما لا يتم نسخ البايت الذي يتم تحميله في سجل X من موقع بايت الذاكرة، يجب كتابة القيمة باستخدام (بعد ذلك مباشرة) LDX ذاكري في التعليمات بالنظام الست عشري أو العشري. في هذا الفصل، يتم كتابة هذه القيم بالنظام الست عشري. وهذه معالجة فورية، لذا فإن البايت الفعلي في الذاكرة الذي يمثل LDX هو A2 16 = 10100010 2 وليس AE 16 وهو ما يساوي 10101110 2 .

في الجدول، تسمى جميع البايتات الموجودة تحت عناوين وضع العنونة رموز التشغيل والتي يتم اختصارها كرموز التشغيل. يمكن أن يكون هناك أكثر من رمز تشغيل واحد لرمز تذكير واحد، اعتمادًا على وضع العنونة.

ملحوظة: يمكن أن يكون لكلمة 'تحميل' في وحدة نظام الكمبيوتر معنيان: يمكن أن تشير إلى تحميل ملف من قرص إلى ذاكرة الكمبيوتر أو يمكن أن تشير إلى نقل بايت من موقع بايت الذاكرة إلى سجل المعالجات الدقيقة .

هناك أوضاع معالجة أكثر من الأربعة الموجودة في الجدول لـ 6502 μP.

ما لم يُنص على خلاف ذلك، تبدأ جميع أكواد برمجة المستخدم في هذا الفصل من العنوان 0200 16 وهي بداية منطقة المستخدم في الذاكرة.

الذاكرة M والمراكم A

الذاكرة إلى المجمع

معالجة فورية
التعليمات التالية تخزن الرقم FF 16 = 255 10 في المجمع:

LDA #$FF

لا يتم استخدام '$' لتحديد عنوان الذاكرة فقط. بشكل عام، يتم استخدامه للإشارة إلى أن الرقم التالي الذي يليه هو رقم سداسي عشري. في هذه الحالة، $FF ليس عنوان أي موقع بايت في الذاكرة. وهو الرقم 255 10 بالنظام الست عشري. يجب عدم كتابة القاعدة 16 أو أي من اشتراكاتها المكافئة الأخرى في تعليمات لغة التجميع. يشير '#' إلى أن كل ما يلي بعد ذلك هو القيمة التي سيتم وضعها في سجل المجمع. ويمكن أيضًا كتابة القيمة بالأساس العشرة، لكن هذا لم يتم في هذا الفصل. '#' يعني معالجة فورية.

هناك بعض التشابه بين أسلوب التذكر والعبارة الإنجليزية المقابلة له. 'LDA #$FF' تعني تحميل الرقم 255 10 في المجمع A. وبما أن هذه معالجة فورية من الجدول السابق، فإن LDA هو A9 وليس AD أو A5. A9 في النظام الثنائي هو 101010001. لذلك، إذا كان A9 لـ LDA موجودًا في عنوان $0200 في الذاكرة، فإن $FF موجود في $0301 = 0300 + 1 عنوان. إن #$FF هو بالتحديد المعامل للتذكير LDA.

المخاطبة المطلقة
إذا كانت قيمة $FF موجودة في الموقع $0333 في الذاكرة، فإن التعليمات السابقة هي:

LDA 0333 دولارًا

لاحظ غياب #. في هذه الحالة، غياب # يعني أن ما يلي هو عنوان ذاكرة وليس قيمة الفائدة (وليس القيمة التي سيتم وضعها في المجمع). لذا، كود التشغيل لـ LDA، هذه المرة، هو AD وليس A9 أو A5. معامل LDA هنا هو عنوان $0333 وليس قيمة $FF. يقع $FF في موقع بقيمة 0333 دولارًا وهو بعيد جدًا. تشغل التعليمة 'LDA $0333' ثلاثة مواقع متتالية في الذاكرة، وليس موقعين كما في الرسم التوضيحي السابق. 'AD' لـ LDA موجود في الموقع 0200 دولار. البايت الأدنى 0333 وهو 33 موجود في الموقع 0301 دولار. البايت الأعلى وهو 0333 دولارًا وهو 03 موجود في الموقع 0302 دولارًا. هذا هو القليل من endianness الذي تستخدمه لغة التجميع 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 خلايا، وكل خلية تحتوي على جزء صغير منها. تتكون التعليمات هنا من بايتتين متتاليتين. A5 لـ LDA موجود في موقع الذاكرة 0200 $ والعنوان 50 $، بدون البايت الأعلى 00، موجود في موقع 0301 $. يؤدي غياب 00، الذي كان سيستهلك بايتًا واحدًا في إجمالي الذاكرة البالغة 64 كيلو بايت، إلى توفير مساحة الذاكرة.

تراكم للذاكرة

المخاطبة المطلقة
تقوم التعليمات التالية بنسخ قيمة البايت، مهما كانت، من المجمع إلى موقع الذاكرة بقيمة 1444 دولارًا:

هم 1444 دولار

يقال أن هذا يتم النقل من المجمع إلى الذاكرة. لا يتم التحميل. التحميل هو العكس. بايت كود التشغيل لـ STA هو 8D 16 = 10001101 2 . تتكون هذه التعليمات من ثلاث بايتات متتالية في الذاكرة. 8 د 16 موجود في الموقع 0200 دولار. 44 16 العنوان 1444 دولارًا موجودًا في الموقع 0201 دولارًا. و 14 16 موجود في الموقع 0202 دولار - القليل من اللامحدودية. البايت الفعلي الذي تم نسخه ليس جزءًا من التعليمات. يتم استخدام 8D وليس 85 لعنونة الصفحة الصفرية (في الجدول) هنا لـ STA.

معالجة الصفحة صفر
تقوم التعليمات التالية بنسخ قيمة البايت، مهما كانت، من المجمع إلى موقع الذاكرة بقيمة 0050 دولارًا في الصفحة صفر:

ستا 0050 دولار

بايت كود التشغيل لـ STA هنا هو 85 16 = 10000101 2 . تتكون هذه التعليمات من بايتتين متتاليتين في الذاكرة. ال 85 16 موجود في الموقع 0200 دولار. ال 50 16 العنوان 0050 دولارًا موجودًا في الموقع 0201 دولارًا. لا تنشأ هنا مشكلة endianness لأن العنوان يحتوي على بايت واحد فقط وهو البايت الأدنى. البايت الفعلي الذي تم نسخه ليس جزءًا من التعليمات. يتم استخدام 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، التعليمات هي:

تكساس

لنسخ البايت من A إلى Y، التعليمات هي:

يُسلِّم

لنسخ البايت من Y إلى A، التعليمات هي:

TYA

بالنسبة للكمبيوتر commodore 64، تكون المكدس عبارة عن الصفحة 1 بعد الصفحة 0 مباشرةً في الذاكرة. مثل كل الصفحات الأخرى، تتكون من 25610 10 مواقع البايت، من 0100 دولار إلى 01FF. عادة، يتم تنفيذ البرنامج من تعليمة واحدة إلى التعليمة المتتالية التالية في الذاكرة. من وقت لآخر، هناك انتقال إلى مقطع رمز ذاكرة آخر (مجموعة التعليمات). تحتوي منطقة المكدس الموجودة في الذاكرة (RAM) على عناوين التعليمات التالية من حيث توقفت القفزات (أو الفروع) لمواصلة البرنامج.

مؤشر المكدس 'S' عبارة عن سجل 9 بت في 6502 μP. البت الأول (أقصى اليسار) هو دائمًا 1. تبدأ جميع عناوين مواقع البايت في الصفحة الأولى بالرقم 1 متبوعًا بـ 8 بتات مختلفة للـ 256 10 المواقع. يحتوي مؤشر المكدس على عنوان الموقع في الصفحة 1 والذي يحتوي على عنوان التعليمات التالية التي يجب على البرنامج إرجاعها والمتابعة بعد تنفيذ مقطع التعليمات البرمجية الحالي (الذي تم الانتقال إليه). نظرًا لأن البت الأول من جميع عناوين المكدس (الصفحة الأولى) يبدأ بالرقم 1، فإن سجل مؤشر المكدس يحتاج فقط إلى الاحتفاظ بالبتات الثمانية المتبقية. بعد كل شيء، فإن البت الأول، وهو البت الموجود في أقصى اليسار (البت التاسع الذي يعد من يمينه)، هو دائمًا 1.

لنسخ البايت من S إلى X، التعليمات هي:

تسكس

لنسخ البايت من X إلى S، التعليمات هي:

رسالة قصيرة

تعليمات التسجيل للتسجيل لا تأخذ أي معامل. وهي تتكون من ذاكري فقط. كل ذاكري له رمز التشغيل الخاص به بالنظام الست عشري. وهذا في وضع العنونة الضمنية لأنه لا يوجد معامل (لا يوجد عنوان ذاكرة، لا قيمة).

ملحوظة: لا يوجد نقل من 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 . بالنسبة للرقمين غير الموقعين، تكون عملية الإضافة كما يلي:

أ + م + ج → أ

وهذا يعني أن محتوى المجمع المكون من 8 بتات تتم إضافته بواسطة وحدة المنطق الحسابي إلى بايت (8 بتات) من الذاكرة. بعد إضافة A وM، ينتقل النقل إلى البتة التاسعة إلى خلية علم الحمل في سجل الحالة. أي بتة حمل سابقة من إضافة سابقة والتي لا تزال في خلية علم الحمل في سجل الحالة تتم إضافتها أيضًا إلى مجموع A وM، مما يجعل A+M+C→A. يتم إعادة النتيجة إلى المجمع.

إذا كانت إضافة الفائدة هي:

أ + م

وليس هناك حاجة لإضافة أي حمل سابق، يجب مسح علامة الحمل التي تصبح 0، بحيث تكون الإضافة:

أ + م + 0 → أ مثل أ + م → أ

ملحوظة: إذا تمت إضافة 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. رمز إجراء هذه الإضافة يمكن ان يكون:

CLC
LDA #$3F
أدك # 15 دولارًا

ملحوظة: أثناء كتابة لغة التجميع، يتم الضغط على مفتاح 'Enter' بلوحة المفاتيح في نهاية كل تعليمات. هناك ثلاثة تعليمات في هذا الرمز. تقوم التعليمات الأولى (CLC) بمسح علامة الحمل في حالة وجود إضافة سابقة تحتوي على 1. ولا يمكن إجراء CLC إلا في وضع العنونة الضمنية. إن التذكير بوضع العنونة الضمني لا يأخذ أي معامل. يؤدي هذا إلى مسح خلية الحمل الخاصة بسجل الحالة P. ويعني المسح إعطاء البتة 0 لخلية علم الحمل. تستخدم الإرشادات التالية في الكود وضع العنونة المباشرة. مع المعالجة الفورية، هناك مُعامل واحد فقط للتذكير وهو رقم (وليس عنوان ذاكرة أو تسجيل). ولذلك، يجب أن يسبق الرقم '#'. يعني '$' أن الرقم التالي هو رقم سداسي عشري.

تقوم التعليمات الثانية بتحميل الرقم 3F 16 في المجمع. بالنسبة للتعليمة الثالثة، تأخذ دائرة الوحدة المنطقية الحسابية لـ μP الحمل السابق (المُمحى) لـ 0 (القسري إلى 0) لخلية علم الحمل لسجل الحالة وتضيفه إلى 15 16 وكذلك إلى القيمة الموجودة بالفعل في 3F 16 المجمع ويضع النتيجة الكاملة مرة أخرى في المجمع. في هذه الحالة، يكون هناك حمل ناتج قدره 0. ترسل وحدة المنطق الحسابي (ALU) (تضع) 0 في خلية علامة الحمل الخاصة بسجل الحالة. سجل حالة المعالج وسجل الحالة يعنيان نفس الشيء. إذا نتج عن ذلك حمل 1، ترسل وحدة ALU 1 إلى علامة الحمل الخاصة بسجل الحالة.

يجب أن تكون الأسطر الثلاثة من التعليمات البرمجية السابقة موجودة في الذاكرة قبل تنفيذها. كود التشغيل 1816 لـ CLC (العنونة الضمنية) موجود في موقع بايت بقيمة 0200 دولار. كود التشغيل A9 16 لـ LDA (عنونة فورية) موجود في موقع بايت بقيمة 0201 دولارًا. الرقم 3F 10 موجود في موقع بايت 0202 دولار. كود التشغيل 69 16 لـ LDA (عنونة فورية) موجود في موقع بايت بقيمة 0203 دولارًا. الرقم 15 10 موجود في موقع بايت 0204 دولار.

ملحوظة: LDA هي تعليمات نقل (تحميل) وليست تعليمات حسابية (ذاكرة).

رمز لإضافة اثنين من ستة عشر بت غير موقعة
جميع السجلات الموجودة في 6502 μP هي في الأساس سجلات ذات ثمانية بتات، باستثناء الكمبيوتر الشخصي (عداد البرامج) الذي يبلغ 16 بت. حتى سجل الحالة يبلغ عرضه 8 بتات، على الرغم من أن البتات الثمانية الخاصة به لا تعمل معًا. في هذا القسم، يتم النظر في إضافة 16 بتة غير موقعة، مع النقل من الزوج الأول المكون من ثماني بتات إلى الزوج الثاني المكون من ثماني بتات. حمل الاهتمام هنا هو النقل من موضع البت الثامن إلى موضع البت التاسع.

لتكن الأرقام 0010101010111111 2 = 2ABF16 16 = 10,943 10 و 0010101010010101 2 = 2A95 16 = 10,901 10 . المجموع هو 0101010101010100 2 = 5554 16 = 21,844 10 .

إضافة هذين الرقمين غير الموقعين في الأساس الثاني هو كما يلي:

يوضح الجدول التالي نفس الإضافة مع حمل 1 من البتة الثامنة إلى موضع البتة التاسعة، بدءًا من اليمين:

في تشفير هذا، تتم إضافة البايتتين السفليتين أولاً. بعد ذلك، تقوم ALU (وحدة المنطق الحسابي) بإرسال حمل 1 من موضع البت الثامن إلى موضع البت التاسع، إلى خلية علم الحمل في سجل الحالة. نتيجة 0 1 0 1 0 1 0 0 بدون الحمل تذهب إلى المركم. ثم تتم إضافة الزوج الثاني من البايتات مع الحمل. يعني تذكير ADC الإضافة مع الحمل السابق تلقائيًا. وفي هذه الحالة يجب عدم تغيير الحمل السابق وهو 1 قبل الإضافة الثانية. بالنسبة للإضافة الأولى، نظرًا لأن أي حمل سابق ليس جزءًا من هذه الإضافة الكاملة، فيجب مسحه (جعل 0).

للإضافة الكاملة لزوجي البايتات، الإضافة الأولى هي:

أ + م + 0 -> أ

الإضافة الثانية هي:

أ + م + 1 -> أ

لذا، يجب مسح علامة الحمل (بالقيمة 0) قبل الإضافة الأولى مباشرةً. البرنامج التالي الذي يجب على القارئ أن يقرأ الشرح التالي يستخدم وضع العنونة المطلقة لهذا الجمع:

CLC
LDA 0213 دولارًا
أدك 0215 دولار
; لا توجد مقاصة لأن قيمة علامة الحمل مطلوبة
ستا 0217 دولارًا
LDA 0214 دولارًا
أدك 0216 دولار
ستا 0218 دولارًا

لاحظ أنه مع لغة التجميع 6502، تبدأ الفاصلة المنقوطة بالتعليق. وهذا يعني أنه أثناء تنفيذ البرنامج، يتم تجاهل الفاصلة المنقوطة وكل ما على يمينها. يتم حفظ البرنامج الذي تم كتابته مسبقًا في ملف نصي بالاسم الذي يختاره المبرمج وبامتداد “.asm”. البرنامج السابق ليس هو البرنامج الدقيق الذي يذهب إلى الذاكرة للتنفيذ. يسمى البرنامج المقابل في الذاكرة بالبرنامج المترجم حيث يتم استبدال فن الإستذكار برموز التشغيل (البايت). يبقى أي تعليق في الملف النصي للغة التجميع، ويتم إزالته قبل أن يصل البرنامج المترجم إلى الذاكرة. في الواقع، هناك ملفان محفوظان على القرص اليوم: ملف “.asm” وملف “.exe”. الملف '.asm' هو الملف الموجود في الرسم التوضيحي السابق. الملف '.exe' هو ملف '.asm' مع إزالة كافة التعليقات، واستبدال جميع أدوات الإستذكار بأكواد التشغيل الخاصة بها. عند فتحه في محرر نصوص، لا يمكن التعرف على الملف '.exe'. ما لم يُنص على خلاف ذلك، ولأغراض هذا الفصل، يتم نسخ الملف '.exe' إلى الذاكرة بدءًا من الموقع 0200 دولار. وهذا هو المعنى الآخر للتحميل.

يشغل الرقمان المكونان من 16 بت المراد إضافتهما أربع بايتات في الذاكرة للعنونة المطلقة: بايتان لكل رقم (الذاكرة عبارة عن سلسلة من البايتات). مع العنونة المطلقة، يكون المعامل الخاص بكود التشغيل موجودًا في الذاكرة. تكون نتيجة الجمع بعرض 2 بايت ويجب أيضًا وضعها في الذاكرة. وهذا يعطي ما مجموعه 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 .

يجب أن يكون البايت الأدنى من أغسطس في العنوان $0213، والبايت الأعلى من نفس أغسطس يجب أن يكون في عنوان $0214 - القليل من النهاية. وبالمثل، يجب أن يكون البايت الأدنى للإضافة في العنوان 0215 دولارًا، ويجب أن يكون البايت الأعلى لنفس الإضافة في العنوان 0216 دولارًا - القليل من endianness. يجب أن يكون البايت الأدنى للنتيجة (المجموع) في العنوان $0217، ويجب أن يكون البايت الأعلى لنفس النتيجة في العنوان $0218 - القليل من endianness.

كود التشغيل 18 16 لـ CLC (العنونة الضمنية) موجودة في موقع البايت وهو 0200 دولار. رمز التشغيل لـ 'LDA $0213'، أي AD 16 لـ LDA (العنونة المطلقة)، موجود في موقع البايت وهو 0201 دولار. البايت السفلي من augend وهو 10111111 موجود في موقع بايت الذاكرة البالغ 0213 دولارًا. تذكر أن كل شفرة تشغيل تشغل بايتًا واحدًا. العنوان '$0213' لـ 'LDA $0213' موجود في مواقع البايت 0202 دولار و0203 دولار. تقوم تعليمات 'LDA $0213' بتحميل البايت السفلي من الملحق إلى المجمع.

كود التشغيل لـ 'ADC $0215'، أي 6D 16 لـ ADC (العنونة المطلقة)، موجود في موقع البايت وهو 0204 دولارًا. البايت السفلي للإضافة وهو 10010101 موجود في موقع البايت وهو 0215 دولارًا. العنوان '$0215' لـ 'ADC $0215' موجود في مواقع البايت 0205 دولار و0206 دولار. تضيف تعليمات 'ADC $0215' البايت الأدنى للإضافة إلى البايت الأدنى للزيادة الموجودة بالفعل في المجمع. يتم وضع النتيجة مرة أخرى في المجمع. يتم إرسال أي حمل بعد البت الثامن إلى علامة الحمل الخاصة بسجل الحالة. يجب عدم مسح خلية إشارة الحمل قبل الإضافة الثانية للبايتات الأعلى. تتم إضافة هذا الحمل إلى مجموع البايتات الأعلى تلقائيًا. في الواقع، تتم إضافة حمل قدره 0 إلى مجموع البايتات الأقل تلقائيًا في البداية (أي ما يعادل عدم إضافة أي حمل) بسبب CLC.

التعليق يأخذ الـ 48 التالية 10 = 30 16 بايت. ومع ذلك، يبقى هذا فقط في الملف النصي '.asm'. ولا يصل إلى الذاكرة. تتم إزالته عن طريق الترجمة التي تتم بواسطة المجمع (برنامج).

للتعليمة التالية وهي 'STA $0217'، كود تشغيل STA وهو 8D 16 (العنوان المطلق) موجود في موقع البايت وهو 0207 دولارًا. العنوان '$0217' الخاص بـ 'STA $0217' موجود في مواقع الذاكرة 0208 دولارًا و0209 دولارًا. تقوم التعليمات 'STA $0217' بنسخ محتوى المجمع المكون من ثمانية بتات إلى موقع الذاكرة البالغ 0217 دولارًا.

البايت الأعلى للإضافة وهو 00101010 موجود في موقع الذاكرة البالغ 0214 دولارًا، والبايت الأعلى للإضافة وهو 00101010 موجود في موقع البايت البالغ 02 دولارًا 16 . كود التشغيل الخاص بـ 'LDA $0214' وهو AD16 لـ LDA (العنونة المطلقة) موجود في موقع البايت بقيمة 020A دولار. العنوان '$0214' لـ 'LDA $0214' موجود في موقعي $020B و$020C. تقوم تعليمات 'LDA $0214' بتحميل البايت الأعلى من الملحق إلى المجمع، مما يؤدي إلى مسح كل ما هو موجود في المجمع.

كود التشغيل لـ 'ADC $0216' وهو 6D 16 لـ ADC (العنونة المطلقة) موجود في موقع البايت بقيمة 020D. العنوان '$0216' الخاص بـ 'ADC 0216' موجود في مواقع البايت $020E و$020F. تضيف تعليمات 'ADC $0216' البايت الأعلى للإضافة إلى البايت الأعلى للزيادة الموجودة بالفعل في المجمع. يتم وضع النتيجة مرة أخرى في المجمع. إذا كان هناك حمل 1، بالنسبة لهذه الإضافة الثانية، فسيتم وضعه تلقائيًا في خلية الحمل الخاصة بسجل الحالة. على الرغم من أن الترحيل إلى ما بعد البتة السادسة عشرة (يسار) ليس مطلوبًا لهذه المشكلة، إلا أنه من الجيد التحقق مما إذا كان الترحيل 1 قد حدث بالفعل عن طريق التحقق مما إذا كانت علامة الترحيل أصبحت 1.

بالنسبة للتعليمة التالية والأخيرة وهي 'STA $0218'، فإن كود تشغيل STA وهو 8D16 (العنونة المطلقة) موجود في موقع البايت وهو 0210 دولار. العنوان '$0218' الخاص بـ 'STA $0218' موجود في مواقع الذاكرة 0211 دولارًا و0212 دولارًا. تقوم التعليمات 'STA $0218' بنسخ المحتوى المكون من ثمانية بتات للمجمع إلى موقع الذاكرة البالغ 0218 دولارًا. نتيجة إضافة رقمين من ستة عشر بت هي 0101010101010100، مع البايت الأدنى 01010100 في موقع الذاكرة 0217 دولارًا والبايت الأعلى 01010101 في موقع الذاكرة 0218 دولارًا - القليل من endianness.

الطرح
مع 6502 μP، الأرقام الموقعة هي أرقام مكملة لاثنين. يمكن أن يكون الرقم المكمل لشخصين ثمانية بتات، أو ستة عشر بتًا، أو أي مضاعفات للثمانية بتات. مع تكملة اثنين، فإن البتة الأولى من اليسار هي بتة الإشارة. بالنسبة للرقم الموجب، فإن البت الأول هو 0 للإشارة إلى الإشارة. تشكل بقية البتات الرقم بالطريقة العادية. للحصول على تكملة الاثنين لعدد سالب، اقلب جميع البتات للرقم الموجب المقابل، ثم أضف 1 إلى النتيجة من الطرف الأيمن.

لطرح رقم موجب واحد من رقم موجب آخر، يتم تحويل المطروح إلى رقم سالب مكمل لاثنين. ثم تتم إضافة الطرح والرقم السالب الجديد بالطريقة العادية. وبالتالي يصبح طرح الثمانية بتات:

حيث يُفترض أن الحمل هو 1. والنتيجة في المركم هي الفرق في تكملة الاثنين. لذلك، لطرح رقمين، يجب تعيين علامة الحمل (إلى 1).

عند طرح رقمين مكونين من ستة عشر بتًا، يتم إجراء الطرح مرتين كما هو الحال مع إضافة رقمين مكونين من ستة عشر بتًا. نظرًا لأن الطرح هو شكل من أشكال الجمع مع 6502 μP، عند طرح رقمين مكونين من ستة عشر بت، يتم تعيين علامة الحمل مرة واحدة فقط للطرح الأول. بالنسبة للطرح الثاني، يتم إجراء أي إعداد لعلامة الحمل تلقائيًا.

تتم برمجة الطرح لأرقام ثمانية بتات أو أرقام ستة عشر بت بشكل مشابه لبرمجة الإضافة. ومع ذلك، يجب تعيين علامة الحمل في البداية. ذاكري للقيام بذلك هو:

الطرح بأرقام موجبة ذات ستة عشر بت
النظر في الطرح مع الأرقام التالية:

لا يتضمن هذا الطرح تكملة اثنين. بما أن الطرح في 6502 μP يتم في تكملة اثنين، فإن الطرح في الأساس الثاني يتم على النحو التالي:

والنتيجة المتممة للاثنين هي نفس النتيجة التي يتم الحصول عليها من الطرح العادي. ومع ذلك، لاحظ أنه يتم تجاهل الرقم 1 الذي ينتقل إلى موضع البت السابع عشر من اليمين. يتم تقسيم كل من المنتصف والمطروح إلى ثمان بتات لكل منهما. يتم تحديد تكملة الاثنين البالغة 10010110 من البايتة السفلية للمطروح بشكل مستقل عن البايتة الأعلى وأي حمل. يتم تحديد تكملة الاثنين 11101011 من البايتة الأعلى للمطروح بشكل مستقل عن البايتة السفلية وأي حمل.

الـ 16 بت من المينود موجودة بالفعل في تكملة اثنين، بدءًا من 0 من اليسار. لذلك، فهو لا يحتاج إلى أي تعديل في البتات. مع 6502 μP، تتم إضافة البايت السفلي من الطرح دون أي تعديل إلى البايت السفلي من تكملة الاثنين للمطروح. لا يتم تحويل البايت السفلي من Minuend إلى مكمل اثنين لأن البتات الستة عشر من Minuend بالكامل يجب أن تكون موجودة بالفعل في مكمل اثنين (مع 0 باعتباره البت الأول على اليسار). في هذه الإضافة الأولى، تمت إضافة حمل إلزامي قدره 1 بسبب تعليمات 1=0 SEC.

في عملية الطرح الفعالة الحالية، يوجد حمل 1 (للجمع) من البت الثامن إلى البت التاسع (من اليمين). نظرًا لأن هذا يعد عملية طرح فعليًا، فإن أي جزء من المفترض أن يكون في علامة الحمل في سجل الحالة يتم استكماله (مقلوب). لذا، فإن حمل 1 يصبح 0 في العلم C. في العملية الثانية، تتم إضافة البايت الأعلى من الطرح إلى البايتتين المكملتين الأعلى من المطروح. تتم أيضًا إضافة بتة علامة الحمل المكملة تلقائيًا لسجل الحالة (في هذه الحالة 0) (إلى البايتات الأعلى). يتم تجاهل أي 1 يتجاوز البت السادس عشر من اليمين.

والشيء التالي هو مجرد ترميز كل هذا المخطط على النحو التالي:

ثانية
LDA 0213 دولارًا
اس بي سي 0215 دولار
; لا توجد مقاصة لأن قيمة علامة الحمل المقلوبة مطلوبة
ستا 0217 دولارًا
LDA 0214 دولارًا
اس بي سي 0216 دولار
ستا 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 - القليل من endianness. وبالمثل، يجب أن يكون البايت الأدنى من المطروح في العنوان $0215، ويجب أن يكون البايت الأعلى من نفس المطروح في العنوان $0216 - القليل من endianness. يجب أن يكون البايت الأدنى للنتيجة (الفرق) في العنوان $0217، ويجب أن يكون البايت الأعلى لنفس النتيجة في العنوان $0218 - القليل من endianness.

كود التشغيل 38 16 لـ SEC (العنونة الضمنية) موجودة في العنوان 0200 دولار. من المفترض أن تبدأ جميع البرامج في هذا الفصل من موقع الذاكرة البالغ 0200 دولار، مما يؤدي إلى إلغاء أي برنامج كان من الممكن أن يكون موجودًا هناك؛ ما لم ينص على خلاف ذلك. رمز التشغيل لـ 'LDA $0213'، أي AD 16 ، بالنسبة لـ LDA (العنونة المطلقة) موجود في موقع البايت 0201 دولار. البايت السفلي من Minuend وهو 10111111 موجود في موقع بايت الذاكرة البالغ 0213 دولارًا. تذكر أن كل شفرة تشغيل تشغل بايتًا واحدًا. العنوان '$0213' لـ 'LDA $0213' موجود في مواقع البايت 0202 دولار و0203 دولار. تقوم تعليمات 'LDA $0213' بتحميل البايت الأدنى من المصغر إلى المجمع.

كود التشغيل لـ 'SBC $0215'، أي ED 16 ، بالنسبة لـ SBC (العنونة المطلقة) موجود في موقع البايت 0204 دولار. البايت الأدنى من المطروح وهو 01101010 موجود في موقع البايت 0215 دولار. العنوان '$0215' لـ 'ADC $0215' موجود في مواقع البايت 0205 دولار و0206 دولار. تقوم التعليمات 'SBC $0215' بطرح البايت الأدنى للمطروح من البايت الأدنى للطرح الموجود بالفعل في المجمع. وهذا هو الطرح المكمل لاثنين. يتم وضع النتيجة مرة أخرى في المجمع. يتم إرسال المكمل (الانعكاس) لأي حمل بعد البت الثامن إلى علامة الحمل الخاصة بسجل الحالة. لا يجب مسح علامة الحمل هذه قبل الطرح الثاني بالبايتات الأعلى. تتم إضافة هذا الحمل إلى طرح البايتات الأعلى تلقائيًا.

التعليق يأخذ الـ 57 التالية 10 = 3916 16 بايت. ومع ذلك، يبقى هذا فقط في الملف النصي '.asm'. ولا يصل إلى الذاكرة. تتم إزالته عن طريق الترجمة التي تتم بواسطة المجمع (برنامج).

بالنسبة للتعليمة التالية وهي 'STA $0217'، كود تشغيل STA، أي 8D 16 (العنوان المطلق)، موجود في موقع البايت 0207 دولار. العنوان '$0217' الخاص بـ 'STA $0217' موجود في مواقع الذاكرة 0208 دولارًا و0209 دولارًا. تقوم التعليمات 'STA $0217' بنسخ المحتوى المكون من ثمانية بتات للمجمع إلى موقع الذاكرة البالغ 0217 دولارًا.

البايت الأعلى من الطرح وهو 00101010 موجود في موقع الذاكرة وهو 0214 دولارًا، والبايت الأعلى من المطروح وهو 00010101 موجود في موقع البايت وهو 0216 دولارًا. كود التشغيل لـ 'LDA $0214'، أي AD 16 لـ LDA (العنونة المطلقة)، موجود في موقع البايت $020A. العنوان '$0214' لـ 'LDA $0214' موجود في موقعي $020B و$020C. تقوم تعليمات 'LDA $0214' بتحميل البايت الأعلى من الminuend إلى المجمع، مما يؤدي إلى محو كل ما هو موجود في المجمع.

كود التشغيل لـ 'SBC $0216'، أي ED 16 لـ SBC (العنونة المطلقة)، موجود في موقع البايت بقيمة 020D. العنوان '$0216' الخاص بـ 'SBC $0216' موجود في مواقع البايت $020E و$020F. تطرح التعليمة 'SBC $0216' البايت الأعلى للمطروح من البايت الأعلى للطرح (مكمل الاثنين) الموجود بالفعل في المجمع. يتم وضع النتيجة مرة أخرى في المجمع. إذا كان هناك تحمل 1 لهذا الطرح الثاني، فسيتم وضع مكملته في خلية الحمل الخاصة بسجل الحالة تلقائيًا. على الرغم من أن الترحيل إلى ما بعد البتة السادسة عشرة (يسار) غير مطلوب لهذه المشكلة، إلا أنه من الجيد التحقق مما إذا كان الترحيل المكمل قد حدث عن طريق التحقق من علامة الترحيل.

للتعليمة التالية والأخيرة وهي 'STA $0218'، رمز تشغيل STA، أي 8D 16 (العنوان المطلق)، موجود في موقع البايت 0210 دولار. العنوان '$0218' الخاص بـ 'STA $0218' موجود في مواقع الذاكرة 0211 دولارًا و0212 دولارًا. تقوم التعليمات 'STA $0218' بنسخ المحتوى المكون من ثمانية بتات للمجمع إلى موقع الذاكرة البالغ 0218 دولارًا. نتيجة الطرح برقمين مكونين من ستة عشر بت هي 0001010101010101 مع البايت الأدنى 01010101 في موقع الذاكرة البالغ 0217 دولارًا والبايت الأعلى البالغ 00010101 في موقع الذاكرة البالغ 0218 دولارًا - القليل من endianness.

يحتوي 6502 μP على دوائر للجمع فقط، وبشكل غير مباشر للطرح المكمل للاثنين. ليس لديها دوائر للضرب والقسمة. للقيام بعملية الضرب والقسمة، يجب كتابة برنامج لغة التجميع مع التفاصيل، بما في ذلك تحويل المنتجات الجزئية والأرباح الجزئية.

4.4 العمليات المنطقية

في 6502 μP، اللفظ التذكيري لـ OR هو ORA والرمز التذكيري للحصري OR هو EOR. لاحظ أن العمليات المنطقية لا تحتوي على العنونة الضمنية. العنوان الضمني لا يأخذ أي معامل. يجب أن يأخذ كل من العوامل المنطقية معاملين. الأول في المجمع، والثاني في الذاكرة أو في التعليمات. النتيجة (8 بت) تعود إلى المجمع. يتم وضع الأول في المجمع إما عن طريق تعليمات فورية أو يتم نسخه من الذاكرة مع معالجة مطلقة. في هذا القسم، يتم استخدام عنونة الصفحة الصفرية فقط للتوضيح. جميع هذه العوامل المنطقية هي عوامل Bitwise.

و
يوضح الجدول التالي Bitwise AND بالنظام الثنائي والست عشري والعشري:

يجب أن تبدأ كافة البرامج في هذا الفصل من موقع بايت الذاكرة البالغ 0200 دولار. ولكن البرامج الموجودة في هذا القسم موجودة في الصفحة صفر وذلك بهدف توضيح استخدام الصفحة صفر بدون البايت الأعلى وهو 00000000 2 . يمكن ترميز ANDing السابق على النحو التالي:

LDA#$9A؛ ليس من الذاكرة – معالجة فورية
و #$قرص مضغوط؛ ليس من الذاكرة – معالجة فورية
ستا 30 دولارًا ؛ يخزن 88 دولارًا بسعر 0030 دولارًا

أو
يوضح الجدول التالي Bitwise OR بالنظام الثنائي والست عشري والعشري:

LDA#$9A؛ ليس من الذاكرة – معالجة فورية
أورا #$CD ; ليس من الذاكرة – معالجة فورية
ستا 30 دولارًا ؛ يخزن $CF بسعر 0030 دولارًا أمريكيًا

حر
يوضح الجدول التالي Bitwise XOR بالنظام الثنائي والست عشري والعشري:

LDA#$9A؛ ليس من الذاكرة – معالجة فورية
الاستخراج المحسن للنفط #$CD ; ليس من الذاكرة – معالجة فورية
ستا 30 دولارًا ؛ يخزن 57 دولارًا بسعر 0030 دولارًا

4.5 عمليات التحول والتدوير

إن أساليب الإستذكار وأكواد التشغيل لمشغلي النقل والتدوير هي:

ASL: قم بإزاحة بت واحد لليسار من موقع المجمع أو الذاكرة، مع إدخال 0 في الخلية التي تم إخلاؤها في أقصى اليمين.

LSR: قم بإزاحة بت واحد لليمين من موقع المجمع أو الذاكرة، مع إدخال 0 في الخلية التي تم إخلاؤها في أقصى اليسار.
ROL: قم بتدوير بتة واحدة إلى اليسار من موقع المجمع أو الذاكرة، مع إدخال البتة التي تم إسقاطها على اليسار في الخلية التي تم إخلاؤها في أقصى اليمين.
ROR: قم بتدوير بت واحد إلى اليمين من موقع المجمع أو الذاكرة، مع إدخال البت الذي تم إسقاطه على اليمين في الخلية الفارغة في أقصى اليسار.

لإجراء إزاحة أو دوران باستخدام المركم، تكون التعليمات كالتالي:

إل إس آر أ

يستخدم هذا وضع عنونة آخر يسمى وضع العنونة المجمع.

لإجراء إزاحة أو تدوير لموقع ذاكرة بايت، تكون التعليمات كالتالي:

ريال عماني 2BCD

حيث 2BCD هو موقع الذاكرة.

لاحظ أنه لا يوجد وضع معالجة فوري أو ضمني للتبديل أو التدوير. لا يوجد وضع معالجة فوري لأنه لا فائدة من نقل أو تدوير رقم يبقى فقط في التعليمات. لا يوجد وضع عنونة ضمني لأن مصممي 6502 μP يريدون فقط نقل محتوى المجمع (سجل A) أو موقع بايت الذاكرة أو تدويره.

4.6 وضع العنونة النسبي

يقوم المعالج الدقيق دائمًا بزيادة (بمقدار 1 أو 2 أو 3 وحدات) عداد البرامج (PC) للإشارة إلى التعليمات التالية التي سيتم تنفيذها. يحتوي 6502 μP على تعليمات تذكيرية هي BVS والتي تعني فرع عند مجموعة الفائض. يتكون الكمبيوتر من بايتين. تؤدي هذه التعليمات إلى أن يكون لجهاز الكمبيوتر عنوان ذاكرة مختلف للتعليمة التالية التي سيتم تنفيذها والتي لا تنتج عن زيادة عادية. ويقوم بذلك عن طريق إضافة أو طرح قيمة، تسمى الإزاحة، إلى محتوى الكمبيوتر. وهكذا، يشير الكمبيوتر بعد ذلك إلى موقع ذاكرة (متفرع) مختلف ليواصل الكمبيوتر التنفيذ من هناك. الإزاحة هي عدد صحيح من -128 10 إلى +127 10 (متمم ثنائي). لذا، فإن الإزاحة يمكن أن تجعل القفزة تمضي قدمًا في الذاكرة. إذا كانت إيجابية أو متأخرة في الذاكرة، أو إذا كانت سلبية.

تأخذ تعليمات BVS معاملًا واحدًا فقط وهو الإزاحة. يستخدم BVS العنونة النسبية. خذ بعين الاعتبار التعليمات التالية:

7 فرنك سويسري

في القاعدة الثانية، 7F ح هو 01111111 2 = 127 10 . افترض أن المحتوى الموجود على جهاز الكمبيوتر للتعليمة التالية هو 0300 دولار. تؤدي تعليمات BVS إلى إضافة $7F (رقم موجب موجود بالفعل في تكملة الرقمين) إلى $0300 لإعطاء $037F. لذلك، بدلاً من تنفيذ التعليمات التالية في موقع الذاكرة بقيمة 0300 دولارًا، سيتم تنفيذها في موقع الذاكرة بقيمة 037 فرنكًا (تقريبًا بفارق نصف صفحة).

هناك تعليمات فرعية أخرى، لكن BVS هي تعليمات جيدة جدًا لاستخدامها لتوضيح العنونة النسبية. تتعامل العناوين النسبية مع تعليمات الفرع.

4.7 العنونة المفهرسة والعنونة غير المباشرة بشكل منفصل

تعمل أوضاع العنونة هذه على تمكين 6502 μP من التعامل مع الكميات الهائلة من البيانات في فترات زمنية قصيرة مع تقليل عدد التعليمات. توجد مواقع بحجم 64 كيلو بايت لذاكرة Comodore-64 بأكملها. لذلك، للوصول إلى أي موقع بايت، من 16 بت، هناك حاجة إلى بايتين. الاستثناء الوحيد للحاجة إلى وحدتي بايت هو للصفحة صفر حيث يتم حذف البايت الأعلى وهو $00 لتوفير المساحة التي تشغلها التعليمات في الذاكرة. مع وضع العنونة الذي لا يحتوي على صفحة صفر، تتم الإشارة في الغالب إلى كل من وحدات البايت الأعلى والأسفل لعنوان الذاكرة ذات 16 بت بطريقة ما.

العنونة المفهرسة الأساسية

معالجة الفهرس المطلق
تذكر أن السجل X أو Y يسمى سجل الفهرس. خذ بعين الاعتبار التعليمات التالية:

LDA $453,X

لنفترض أن قيمة 6 ح موجود في سجل X لاحظ أنه لم يتم كتابة 6 في أي مكان في التعليمات. تضيف هذه التعليمات قيمة 6H إلى C453 ح وهو جزء من التعليمات المكتوبة في الملف النصي الذي لم يتم تجميعه بعد – C453 ح + 6 ح = C459 ح . LDA يعني تحميل بايت إلى المجمع. البايت الذي سيتم تحميله في المجمع يأتي من عنوان C459 $. $C459 وهو مجموع $C453 الذي تم كتابته مع التعليمات و6 ح الموجود في سجل X يصبح العنوان الفعال الذي تأتي منه البايتة التي سيتم تحميلها في المجمع. إذا 6 ح كان موجودًا في السجل Y، ويتم كتابة Y بدلاً من X في التعليمات.

في بيان التعليمات المكتوب، يُعرف $C453 بالعنوان الأساسي و6 ح في السجل X أو Y يُعرف بجزء العد أو الفهرس للعنوان الفعال. يمكن أن يشير العنوان الأساسي إلى أي عنوان بايت في الذاكرة، والـ 256 التالي 10 يمكن الوصول إلى العناوين، على افتراض أن الفهرس (أو العدد) الذي تم البدء به في سجل X أو Y هو 0. تذكر أن البايت الواحد يمكن أن يعطي نطاقًا مستمرًا يصل إلى 256 10 الأرقام (أي 00000000 2 إلى 11111111 2 ).

لذا فإن العنونة المطلقة تضيف كل ما تم وضعه بالفعل (تم وضعه بواسطة تعليمات أخرى) في سجل X أو Y إلى العناوين الستة عشر التي تم كتابتها مع التعليمات للحصول على العنوان الفعال. في التعليمات المكتوبة، يتم تمييز مسجلي الفهرس بـ X أو Y والتي يتم كتابتها بعد فاصلة. تتم كتابة إما X أو Y؛ ليس كليهما.

بعد كتابة البرنامج في محرر نصوص وحفظه باسم الملف الملحق '.asm'، يتعين على المجمع، وهو برنامج آخر، ترجمة البرنامج المكتوب إلى ما هو (محمل) في الذاكرة. التعليمة السابقة، وهي 'LDA $C453,X'، تشغل ثلاثة مواقع بايت في الذاكرة، وليس خمسة.

تذكر أن أسلوب التذكر مثل LDA يمكن أن يحتوي على أكثر من كود تشغيل واحد (بايتات مختلفة). يختلف كود التشغيل للتعليمة التي تستخدم السجل X عن كود التشغيل الذي يستخدم السجل Y. يعرف المجمّع رمز التشغيل الذي يجب استخدامه بناءً على التعليمات المكتوبة. يختلف كود التشغيل ذو البايت الواحد لـ 'LDA $C453,X' عن كود التشغيل ذو البايت الواحد لـ 'LDA $C453,Y'. في الواقع، كود تشغيل LDA في 'LDA $C453,X' هو BD، وكود تشغيل LDA في 'LDA $C453,9' هو BD.

إذا كان كود التشغيل الخاص بـ LDA موجودًا في موقع البايت 0200 دولار. بعد ذلك، يأخذ العنوان ذو 16 بت وهو $C453 الموقع التالي لمواقع البايت في الذاكرة وهي 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 ح وهو موقع البايت الأول (0200 دولار) للصفحة 2 (الصفحة الثالثة) في الذاكرة، وهو على مسافة كبيرة من الصفحة 0. لذلك، مع العنونة المفهرسة ذات الصفحة الصفرية، يجب أن يقع العنوان الفعال في الصفحة صفر.

المخاطبة غير المباشرة

القفز على العنونة المطلقة
قبل مناقشة العنونة المطلقة غير المباشرة، من الجيد إلقاء نظرة أولاً على العنونة المطلقة لـ JMP. افترض أن العنوان الذي له قيمة الفائدة (البايت المستهدف) هو 8765 دولارًا. هذا هو 16 بت يتكون من بايتين: البايت الأعلى هو 87 ح والبايت السفلي هو 65 ح . لذلك، يتم وضع البايتتين بقيمة 8765 دولارًا في الكمبيوتر (عداد البرنامج) للتعليمة التالية. ما يُكتب في برنامج لغة التجميع (ملف) هو:

أجندة مشتركة 8765 دولارًا

يقفز البرنامج المنفذ في الذاكرة من أي عنوان يصل إليه إلى 8765 دولارًا. يحتوي برنامج ذاكري JMP على ثلاثة أكواد تشغيل وهي 4C و6C و7C. رمز التشغيل لهذا العنونة المطلقة هو 4C. كود التشغيل الخاص بالعنونة غير المباشرة المطلقة لـ JMP هو 6C (راجع الرسوم التوضيحية التالية).

المخاطبة غير المباشرة المطلقة
يُستخدم هذا فقط مع تعليمات الانتقال (JMP). افترض أن العنوان الذي يحتوي على البايت محل الاهتمام (البايت الهدف) هو 8765 دولارًا. هذا هو 16 بت يتكون من بايتين: البايت الأعلى هو 87 ح والبايت السفلي هو 65 ح . مع العنونة غير المباشرة المطلقة، توجد هاتان البايتتان فعليًا في موقعي بايت متتاليين في مكان آخر في الذاكرة.

افترض أنها موجودة في مواقع الذاكرة 0210 دولارًا و0211 دولارًا. ثم البايت السفلي من عنوان الاهتمام وهو 65 ح موجود في العنوان 0210 دولارًا، والبايت الأعلى هو 87 ح موجود في العنوان 0211 دولار. وهذا يعني أن البايت الأقل من الذاكرة محل الاهتمام يذهب إلى العنوان المتتالي الأدنى، والبايت الأعلى من الذاكرة محل الاهتمام يذهب إلى العنوان المتتالي الأعلى - القليل من endianness.

يمكن أن يشير عنوان 16 بت إلى عنوانين متتاليين في الذاكرة. في ضوء ذلك، يشير العنوان 0210 دولارًا إلى العناوين 0210 دولارًا و0211 دولارًا. يحتفظ زوج العناوين $0210 و$0211 بالعنوان النهائي (16 بت من 2 بايت) للبايت المستهدف، مع البايت الأدنى البالغ 65 ح في 0210 دولارًا والبايت الأعلى هو 87 ح في 0211 دولار. لذلك، تعليمة القفز التي تم كتابتها هي:

أحزاب اللقاء المشترك (0210 دولار)

يحتوي برنامج ذاكري JMP على ثلاثة أكواد تشغيل وهي 4C و6C و7C. رمز التشغيل للعنونة غير المباشرة المطلقة هو 6C. ما يتم كتابته في الملف النصي هو 'JMP ($0210)'. بسبب الأقواس، يستخدم المجمع (المترجم) كود التشغيل 6C لـ JMP، وليس 4C أو 7C.

مع العنونة غير المباشرة المطلقة، توجد في الواقع ثلاث مناطق في الذاكرة. قد تتكون المنطقة الأولى من مواقع البايت بقيمة 0200 دولارًا و0201 دولارًا و0202 دولارًا. يحتوي هذا على البايتات الثلاثة للتعليمات 'JMP ($0210)'. المنطقة الثانية، والتي ليست بالضرورة بجوار المنطقة الأولى، تتكون من موقعي بايت متتاليين بقيمة 0210 دولارًا و0211 دولارًا. إنه البايت الأقل هنا (0210 دولار) الذي يتم كتابته في تعليمات برنامج لغة التجميع. إذا كان عنوان الفائدة هو 8765 دولارًا، فإن البايت الأدنى هو 65 ح موجود في موقع البايت 0210 دولارًا، والبايت الأعلى هو 87 ح موجود في موقع البايت 0211 دولار. المنطقة الثالثة تتكون من موقع بايت واحد فقط. إنه عنوان 8765 دولارًا للبايت المستهدف (البايت النهائي للفائدة). يحمل زوج العناوين المتتالية، 0210 دولارًا و0211 دولارًا، مؤشر 8765 دولارًا وهو العنوان محل الاهتمام. بعد التفسير الحسابي، يتم إدخال مبلغ 8765 دولارًا أمريكيًا إلى جهاز الكمبيوتر (عداد البرامج) للوصول إلى البايت المستهدف.

صفر صفحة عنونة غير مباشرة
هذه العنونة هي نفس العنونة غير المباشرة المطلقة، لكن يجب أن يكون المؤشر في الصفحة صفر. عنوان البايت السفلي لمنطقة المؤشر هو ما هو موجود في التعليمات المكتوبة على النحو التالي:

أحزاب اللقاء المشترك (50 دولارًا)

البايت الأعلى للمؤشر موجود في الموقع 51 بايت. ليس من الضروري أن يكون العنوان الفعال (المشار إليه) في الصفحة صفر.

لذلك، باستخدام معالجة الفهرس، تتم إضافة القيمة الموجودة في سجل الفهرس إلى العنوان الأساسي المقدم في التعليمات للحصول على العنوان الفعال. تستخدم المعالجة غير المباشرة المؤشر.

4.8 العنونة غير المباشرة المفهرسة

العنونة غير المباشرة المفهرسة المطلقة
يتم استخدام وضع العنونة هذا مع تعليمات JMP فقط.
مع العنونة غير المباشرة المطلقة، هناك القيمة المدببة (البايت) مع عنواني البايت المتتاليين الخاصين بها. يشكل هذان العنوانان المتتاليان المؤشر في منطقة المؤشر المكونة من بايتين متتاليتين في الذاكرة. البايت السفلي لمنطقة المؤشر هو ما يتم كتابته في التعليمات الموجودة بين قوسين. المؤشر هو عنوان القيمة المشار إليها. في الحالة السابقة، 8765 دولارًا هو عنوان القيمة المشار إليها. 0210 دولارًا (متبوعًا بـ 0211 دولارًا) هو العنوان الذي يبلغ محتواه 8765 دولارًا وهو المؤشر. مع وضع العنونة غير المباشرة المطلقة، يكون المبلغ (0210 دولار) هو الذي يتم كتابته في البرنامج (ملف نصي)، بما في ذلك الأقواس.

من ناحية أخرى، باستخدام وضع العنونة غير المباشرة المفهرسة المطلقة، يتم تشكيل بايت العنوان الأدنى لمنطقة المؤشر عن طريق إضافة القيمة الموجودة في سجل X إلى العنوان المكتوب. على سبيل المثال، إذا كان المؤشر في موقع العنوان $0210، فقد تكون التعليمات المكتوبة شيئًا من هذا القبيل:

أحزاب اللقاء المشترك (020 دولارا، X)

حيث يكون سجل X بقيمة 6 ح . 020 أ ح + 6 ح = 0210 ح . لا يتم استخدام السجل Y مع وضع العنونة هذا.

عنوان غير مباشر مفهرس للصفحة الصفرية
يستخدم وضع العنونة هذا السجل X وليس السجل Y. مع وضع العنونة هذا، لا يزال هناك القيمة المدببة والمؤشر في منطقة مؤشر العنوان المكونة من بايتين. يجب أن يكون هناك وحدتي بايت متتاليتين في الصفحة صفر للمؤشر. العنوان الذي يتم كتابته في التعليمات هو عنوان بايت واحد. تتم إضافة هذه القيمة إلى القيمة الموجودة في السجل X ويتم تجاهل أي حمل. تشير النتيجة إلى منطقة المؤشر في الصفحة 0. على سبيل المثال، إذا كان عنوان الاهتمام (المشار إليه) هو 8765 دولارًا وهو موجود في مواقع البايت 50 دولارًا و51 دولارًا للصفحة 0، وكانت القيمة في السجل X هي 30 دولارًا، فإن التعليمات المكتوبة هي شيء من هذا القبيل:

LDA (20.X)

لأن 20 دولارًا + 30 دولارًا = 50 دولارًا.

العنونة المفهرسة غير المباشرة
يستخدم وضع العنونة هذا السجل Y وليس السجل X. مع وضع العنونة هذا، لا تزال هناك القيمة المدببة ومنطقة المؤشر، ولكن محتوى منطقة المؤشر يعمل بشكل مختلف. يجب أن يكون هناك وحدتي بايت متتاليتين في الصفحة صفر لمنطقة المؤشر. تتم كتابة العنوان السفلي لمنطقة المؤشر في التعليمات. تتم إضافة هذا الرقم (زوج البايتات) الموجود في منطقة المؤشر إلى القيمة الموجودة في السجل Y للحصول على المؤشر الحقيقي. على سبيل المثال، ليكن عنوان الاهتمام (المشار إليه) هو 8765 دولارًا، وتكون قيمة 6H في السجل Y، ويكون الرقم (2 بايت) عند العنوان 50 ح و 51 ح . تبلغ قيمة البايتتين معًا 875 دولارًا أمريكيًا، حيث أن 875 دولارًا أمريكيًا + 6 دولارات = 8765 دولارًا أمريكيًا. التعليمات المكتوبة هي شيء من هذا القبيل:

LDA (50 دولارًا) ، ص

4.9 تعليمات الزيادة والنقصان واختبار بتات الاستثمار الثنائية

ويبين الجدول التالي عمليات تعليمات الزيادة والإنقاص:

يعمل كل من INA وDEA على زيادة وتقليل المركم، على التوالي. وهذا ما يسمى معالجة التراكمي. INX وDEX وINY وDEY مخصصة لسجلات X وY، على التوالي. أنها لا تأخذ أي معامل. لذلك، يستخدمون وضع العنونة الضمني. الزيادة تعني إضافة 1 إلى السجل أو بايت الذاكرة. التخفيض يعني طرح 1 من السجل أو بايت الذاكرة.

يقوم INC وDEC بزيادة وتقليل بايت الذاكرة، على التوالي (وليس السجل). إن استخدام عنونة الصفحة الصفرية بدلاً من العنونة المطلقة هو توفير الذاكرة للتعليمات. تعتبر معالجة الصفحة الصفرية أقل بمقدار بايت واحد من المعالجة المطلقة للتعليمات الموجودة في الذاكرة. ومع ذلك، يؤثر وضع عنونة الصفحة الصفرية على الصفحة صفر فقط.

تقوم تعليمات BIT باختبار بتات البايت في الذاكرة مع 8 بتات في المجمع، ولكنها لا تغير أيًا منهما. يتم تعيين بعض علامات سجل حالة المعالج 'P' فقط. يتم ربط البتات الخاصة بموقع الذاكرة المحدد منطقيًا مع تلك الموجودة في المجمع. بعد ذلك، يتم تعيين بتات الحالة التالية:

  • N وهو البت 7 وآخر بت (يسار) من سجل الحالة، يستقبل البت 7 من موقع الذاكرة قبل ANDing.
  • يتلقى V وهو البت 6 من سجل الحالة البت 6 من موقع الذاكرة قبل ANDing.
  • يتم تعيين علامة Z الخاصة بسجل الحالة (1) إذا كانت نتيجة AND هي صفر (00000000) 2 ). خلاف ذلك، يتم مسحه (جعل 0).

4.10 مقارنة التعليمات

إن أساليب تقوية التعليمات المقارنة لـ 6502 μP هي CMP وCPX وCPY. بعد كل مقارنة، تتأثر إشارات N وZ وC الخاصة بسجل حالة المعالج 'P'. يتم تعيين علامة N (جعلها 1) عندما تكون النتيجة رقمًا سالبًا. يتم تعيين العلامة Z (جعلها 1) عندما تكون النتيجة صفر (000000002). يتم تعيين علامة 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 عن تنفيذ برنامج واحد وجعله يبدأ في تنفيذ برنامج آخر. في هذه الحالة، تتم مقاطعة البرنامج الأول. مثل الإجراءات الفرعية، يمكن أن تكون مقاطع رمز المقاطعة متداخلة. تتم مناقشة معالجة المقاطعة في الفصل التالي.

ملحوظة : يحتوي مؤشر المكدس على 8 بتات لعنوان البايت الأقل في معالجة المواقع من $0100 إلى $01FF. البايت الأعلى هو 00000001 2 يفترض.

يقدم الجدول التالي الإرشادات التي تربط مؤشر المكدس 'S' بالسجلات A وX وY وP بمنطقة المكدس في الذاكرة:

4.13 الإجراء الفرعي للاتصال والعودة

الروتين الفرعي عبارة عن مجموعة من التعليمات التي تحقق هدفًا معينًا. برنامج الجمع أو الطرح السابق عبارة عن روتين فرعي قصير جدًا. تُسمى الإجراءات الفرعية أحيانًا بالروتينات فقط. تعليمات استدعاء روتين فرعي هي:

JSR: انتقل إلى الروتين الفرعي

تعليمات العودة من الروتين الفرعي هي:

RTS: العودة من الروتين الفرعي

يميل المعالج الدقيق إلى تنفيذ التعليمات في الذاكرة بشكل مستمر، واحدة تلو الأخرى. افترض أن المعالج الدقيق يقوم حاليًا بتنفيذ مقطع تعليمات برمجية ويواجه تعليمات القفز (JMP) للانتقال وتنفيذ مقطع تعليمات برمجية تم ترميزه خلفه وربما تم تنفيذه بالفعل. يقوم بتنفيذ مقطع التعليمات البرمجية هذا خلفه ويستمر في تنفيذ جميع مقاطع التعليمات البرمجية (التعليمات) التي تتبع مقطع التعليمات البرمجية الموجود خلفه، حتى يعيد تنفيذ مقطع التعليمات البرمجية الحالي مرة أخرى ويستمر أدناه. لا يقوم JMP بدفع التعليمات التالية إلى المكدس.

على عكس JMP، يقوم JSR بدفع عنوان التعليمات التالية بعد نفسه من جهاز الكمبيوتر (عداد البرنامج) إلى المكدس. يتم وضع موضع المكدس لهذا العنوان في مؤشر المكدس 'S'. عند مواجهة (تنفيذ) تعليمات RTS في الروتين الفرعي، يقوم العنوان الذي تم دفعه على المكدس بسحب المكدس ويستأنف البرنامج عند ذلك العنوان الذي تم سحبه وهو عنوان التعليمات التالي مباشرة قبل استدعاء الروتين الفرعي. يتم إرسال العنوان الأخير الذي تمت إزالته من المكدس إلى عداد البرنامج. يقدم الجدول التالي التفاصيل الفنية لتعليمات JSR وRTS:

راجع الرسم التوضيحي التالي لاستخدامات JSR وRTS:

4.14 مثال على حلقة العد التنازلي

يقوم الروتين الفرعي التالي بالعد التنازلي من $FF إلى $00 (إجمالي 256 10 العد):

بدء LDX #$FF ; تحميل X بـ $FF = 255
حلقة التنفيذ المباشر؛ س = س – 1
حلقة بي إن إي؛ إذا لم يكن X صفرًا، فانتقل إلى الحلقة
آر تي إس؛ يعود

كل سطر لديه تعليق. التعليقات لا تدخل الذاكرة أبدًا للتنفيذ. يقوم المجمع (المترجم) الذي يحول البرنامج إلى ما هو عليه في الذاكرة للتنفيذ (التشغيل) دائمًا بإزالة التعليقات. التعليق يبدأ بـ ';' . تسمى 'البداية' و'الحلقة' في هذا البرنامج بالملصقات. تحدد التسمية (الاسم) لعنوان التعليمات. إذا كانت التعليمات عبارة عن تعليمات بايت واحدة (عنونة ضمنية)، فإن التسمية هي عنوان تلك التعليمات. إذا كانت التعليمات عبارة عن تعليمات متعددة البايت، فإن التسمية تحدد البايت الأول للتعليمات متعددة البايت. تتكون التعليمات الأولى لهذا البرنامج من بايتين. بافتراض أنه يبدأ عند العنوان 0300 دولار، يمكن استبدال العنوان 0300 دولار بكلمة 'بدء' في البرنامج. التعليمة الثانية (DEX) هي تعليمات بايت واحد، ويجب أن تكون على العنوان 0302 دولارًا. وهذا يعني أنه يمكن استبدال عنوان 0302$ بـ 'loop'، الموجود في البرنامج، وهو موجود بالفعل في 'حلقة 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 في البرنامج، وهي عبارة عن تعليمات بايت واحدة (عنونة ضمنية)، ترجع من الروتين الفرعي. تأثير هذه التعليمات هو جعل عنوان عداد البرنامج في المكدس للتعليمات البرمجية التي سيتم تنفيذها قبل استدعاء الروتين الفرعي والعودة إلى عداد البرنامج (الكمبيوتر الشخصي). هذا العنوان هو عنوان التعليمات التي سيتم تنفيذها قبل استدعاء الروتين الفرعي.

ملحوظة: عند كتابة برنامج لغة التجميع لـ 6502 μP، يجب أن تبدأ التسمية فقط في بداية السطر؛ يجب إزاحة أي رمز سطر آخر مسافة واحدة على الأقل إلى اليمين.

استدعاء روتين فرعي
مع تجاهل مساحة الذاكرة التي تشغلها التسميات السابقة، يأخذ البرنامج 6 بايت من المواقع المتتالية في الذاكرة (RAM) من 0300 دولار إلى 0305 دولار. وفي هذه الحالة يكون البرنامج:

إل دي إكس #$FF؛ تحميل X بـ $FF = 255
التنفيذ المباشر؛ س = س – 1
0302 دولار أمريكي ؛ إذا لم يكن X صفرًا، فانتقل إلى الحلقة
آر تي إس؛ يعود

بدءًا من العنوان $0200 الموجود في الذاكرة، يمكن استدعاء الروتين الفرعي. تعليمات المكالمة هي:

بداية JSR؛ البداية هي العنوان $0300، أي JSR $0300

الروتين الفرعي واستدعاءاته المكتوبة بشكل صحيح في ملف محرر النصوص هو:

بدء LDX #$FF؛ تحميل X بـ $FF = 255
حلقة التنفيذ المباشر؛ س = س – 1

حلقة بي إن إي؛ إذا لم يكن X صفرًا، فانتقل إلى الحلقة
آر تي إس؛ يعود

بداية JSR: انتقل إلى الروتين بدءًا من 0300 دولار

الآن، يمكن أن يكون هناك العديد من الإجراءات الفرعية في برنامج واحد طويل. لا يمكن أن يكون لكل منهم اسم 'البدء'. يجب أن يكون لديهم أسماء مختلفة. في الواقع، لا يمكن لأي منهم أن يحمل اسم 'البدء'. يتم استخدام 'البدء' هنا لأسباب تعليمية.

4.15 ترجمة البرنامج

ترجمة برنامج أو تجميعه يعني نفس الشيء. خذ بعين الاعتبار البرنامج التالي:

بدء LDX #$FF : تحميل X بـ $FF = 255
حلقة DEX : X = X – 1
حلقة BNE: إذا لم تكن X صفرًا، فانتقل إلى الحلقة
آر تي إس: العودة
بداية 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' مع عنوان بايت الذاكرة الأقل الذي يأخذ البايت الأقل في الذاكرة و عنوان بايت أعلى في الذاكرة يأخذ البايت الأعلى في الذاكرة - القليل من endianness. رمز التشغيل لـ JSR هو 20 16 .

لاحظ أن الإزاحة لتعليمة فرعية مثل BNE هي رقم مكمل لشخصين في نطاق 128 10 إلى +127 10 . لذلك، 'حلقة BNE' تعني 'BNE -1'. 10 'وهو في الواقع 'D0 FF' في شكل رمز FF 16 هو -1 في مكمل اثنين والذي يكتب كـ = 11111111 في الأساس الثاني. يقوم برنامج المجمع باستبدال التسميات والحقول بأرقام سداسية عشرية فعلية (الأرقام السداسية العشرية هي أرقام ثنائية يتم تجميعها في أربع بتات). يتم بالفعل تضمين العناوين الفعلية التي تبدأ منها كل تعليمات.

ملحوظة: يتم استبدال تعليمات 'بدء JSR' بتعليمات أقصر ترسل المحتوى الحالي (البايتات العالية والمنخفضة) لعداد البرنامج إلى المكدس مع مؤشر المكدس الذي يتناقص مرتين (مرة للبايت العالي ومرة ​​للبايت المنخفض) و ثم يعيد تحميل جهاز الكمبيوتر بعنوان 0300 دولار. يشير مؤشر المكدس الآن إلى $00FD، على افتراض أنه تمت تهيئته إلى $01FF.

أيضًا، يتم استبدال تعليمات RTS بعدد من التعليمات الأقصر التي تزيد مؤشر المكدس 'S' مرتين (مرة للبايت المنخفض ومرة ​​للبايت العالي) وتسحب البايتين المقابلتين من العنوان من مؤشر المكدس إلى جهاز الكمبيوتر من أجل التعليمات التالية.

ملحوظة: يجب ألا يحتوي نص التسمية على أكثر من 8 أحرف.

تستخدم 'حلقة BNE' العنونة النسبية. يعني إضافة -3 10 إلى محتوى عداد البرنامج التالي بقيمة 0305 دولارًا. بايتات 'حلقة BNE' هي 'D0 FD' حيث FD هو مكمل الاثنين لـ -3 10 .

ملاحظة: لا يقدم هذا الفصل جميع التعليمات الخاصة بـ 6502 μP. كافة التعليمات وتفاصيلها تجدها في المستند المعنون 'عائلة المعالجات الدقيقة SY6500 8 بت'. يوجد ملف PDF باسم '6502.pdf' لهذه الوثيقة وهو متاح مجانًا على الإنترنت. 6502 μP الموصوف في هذه الوثيقة هو 65C02.

4.16 المقاطعات

يجب أن تمر إشارات أي جهاز متصل بالمنافذ الخارجية (السطح الرأسي) لجهاز Commodore 64 عبر دوائر CIA 1 أو CIA 2 (ICs) قبل الوصول إلى المعالج الدقيق 6502. يجب أن تمر الإشارات الصادرة من ناقل البيانات الخاص بـ 6502 μP إما عبر شريحة CIA 1 أو CIA 2 قبل الوصول إلى أي جهاز خارجي. يعنيCIA محول الواجهة المعقدة. في الشكل 4.1 'مخطط الكتلة للوحة الأم Commodore_64'، تمثل أجهزة الإدخال/الإخراج الكتلة 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 فقط. أثناء تشغيل الروتين الفرعي، قد يستخدم هذه السجلات الثلاثة معًا. لا يزال معالج المقاطعة بمثابة روتين فرعي، على الرغم من أنه لا يُنظر إليه على هذا النحو. بعد اكتمال التعليمات الحالية، يتم حفظ محتويات سجلات A وX وY الخاصة بـ 65C02 μP في المكدس. يتم أيضًا إرسال عنوان التعليمات التالية لعداد البرنامج إلى المكدس. ثم يتفرع μP إلى رمز المقاطعة. بعد ذلك، تتم استعادة محتويات السجلات A وX وY من المكدس بالترتيب العكسي الذي تم إرسالها إليه.

مثال على الترميز للمقاطعة
من أجل البساطة، افترض أن روتين μP IRQ المقاطعة هي فقط إضافة الرقمين $01 و $02 وحفظ النتيجة $03 على عنوان الذاكرة $0400. الكود هو:

ISR فا
PHX
فاي
;
إل دي إيه #$01
أدك # $02
تكلفتها 0400 دولار
;
رقائق
بليكس
جيش التحرير الشعبى الصينى
RTI

ISR عبارة عن ملصق يحدد عنوان الذاكرة حيث توجد تعليمات PHA. يعنيISR روتين خدمة المقاطعة. ترسل PHA وPHX وPHY محتويات سجلات A وX وY إلى المكدس على أمل أن تكون هناك حاجة إليها بواسطة أي رمز (برنامج) يتم تشغيله قبل الانقطاع مباشرةً. تشكل التعليمات الثلاثة التالية جوهر معالج المقاطعة. يجب أن تكون تعليمات PLY وPLX وPLA بهذا الترتيب، كما أنها تعيد محتويات السجلات Y وX وA. التعليمة الأخيرة، وهي RTI، (بدون معامل) ترجع استمرار التنفيذ إلى أي كود (برنامج) يتم تنفيذه قبل الانقطاع. يقوم RTI بسحب عنوان التعليمة التالية للتعليمة البرمجية التي يتم تنفيذها من المكدس إلى عداد البرنامج. RTI يعني العودة من المقاطعة. وبذلك تكون معالجة المقاطعة (الروتين الفرعي) قد انتهت.

مقاطعة البرامج
الطريقة الرئيسية لمقاطعة البرنامج لـ 6502 μP هي استخدام تعليمات العنوان الضمنية BRK. افترض أن البرنامج الرئيسي قيد التشغيل ويواجه تعليمة BRK. من تلك النقطة، يجب إرسال عنوان التعليمة التالية في الكمبيوتر إلى المكدس عند اكتمال التعليمة الحالية. يجب أن يسمى الروتين الفرعي للتعامل مع تعليمات البرنامج 'التالي'. يجب أن يقوم هذا الروتين الفرعي للمقاطعة بدفع محتويات التسجيل A وX وY إلى المكدس. بعد تنفيذ جوهر الروتين الفرعي، يجب سحب محتويات السجلات A وX وY من المكدس إلى سجلاتها من خلال إكمال الروتين الفرعي. العبارة الأخيرة في الروتين هي RTI. يتم أيضًا سحب محتوى الكمبيوتر الشخصي من المكدس إلى الكمبيوتر تلقائيًا بسبب RTI.

مقارنة وتباين الروتين الفرعي وروتين خدمة المقاطعة
يقارن الجدول التالي بين الروتين الفرعي وروتين خدمة المقاطعة:

4.17 ملخص لأنماط العنونة الرئيسية 6502

كل تعليمات لـ 6502 هي بايت واحد، متبوعًا بصفر أو أكثر من المعاملات.

وضع المعالجة الفورية
في وضع العنونة الفورية، بعد المعامل، تكون القيمة وليس عنوان الذاكرة. يجب أن تكون القيمة مسبوقة بـ #. إذا كانت القيمة بالنظام الست عشري، فيجب أن يتبعها '#' بـ '$'. تعليمات العنونة المباشرة لـ 65C02 هي: ADC، AND، BIT، CMP، CPX، CPY، EOR، LDA، LDX، LDY، ORA، SBC. يجب على القارئ الرجوع إلى الوثائق الخاصة بـ 65C02 μP لمعرفة كيفية استخدام التعليمات المدرجة هنا والتي لم يتم شرحها في هذا الفصل. مثال على التعليمات هو:

LDA # 77 دولارًا

وضع العنونة المطلق
في وضع العنونة المطلقة، يوجد مُعامل واحد. هذا المعامل هو عنوان القيمة الموجودة في الذاكرة (عادةً بالنظام الست عشري أو التسمية). هناك 64 ألف 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 $453,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 فقط).

المخاطبة غير المباشرة المطلقة
يُستخدم هذا فقط مع تعليمات القفز. وبهذا، يكون للعنوان المطلق المحدد عنوان مؤشر. يتكون عنوان المؤشر من بايتين. يشير المؤشر ثنائي البايت إلى (عنوان) قيمة البايت الوجهة في الذاكرة. لذلك، تعليمات لغة التجميع هي:

أحزاب اللقاء المشترك (3456 دولارًا)

مع الأقواس، و $13 موجود في موقع العنوان $3456 بينما $EB موجود في موقع العنوان $3457 (= $3456 + 1). بعد ذلك، عنوان الوجهة هو 13EB دولارًا و13EB هو المؤشر. يوجد المبلغ المطلق 3456 دولارًا بين قوسين في التعليمات حيث 34 هو البايت الأدنى و56 هو البايت الأعلى.

4.18 إنشاء سلسلة باستخدام لغة التجميع 6502 μP

كما هو موضح في الفصل التالي، بعد إنشاء ملف في الذاكرة، يمكن حفظ الملف في القرص. يجب إعطاء الملف اسمًا. الاسم هو مثال لسلسلة. هناك العديد من الأمثلة الأخرى للسلاسل في البرمجة.

هناك طريقتان رئيسيتان لإنشاء سلسلة من رموز ASCII. وفي كلتا الحالتين، تأخذ كافة رموز (أحرف) ASCII مواقع بايت متتالية في الذاكرة. وبإحدى الطرق، يسبق تسلسل البايتات هذا بايت عدد صحيح يمثل الطول (عدد الأحرف) في التسلسل (السلسلة). وبطريقة أخرى، يتم نجاح تسلسل الأحرف (يتبعه مباشرة) البايت الفارغ وهو 00 16 ، أي 00 دولار. لا تتم الإشارة إلى طول السلسلة (عدد الأحرف) بهذه الطريقة الأخرى. لا يتم استخدام الحرف Null بالطريقة الأولى.

على سبيل المثال، فكر في عبارة 'أنا أحبك!' سلسلة بدون علامات الاقتباس. الطول هنا 11؛ يتم احتساب المسافة كبايت ASCII واحد (حرف). افترض أنه يجب وضع السلسلة في الذاكرة بحيث يكون الحرف الأول على العنوان $0300.

يعرض الجدول التالي إعداد ذاكرة السلسلة عندما يكون البايت الأول هو 11 10 = 0ب 16 :

يعرض الجدول التالي إعداد ذاكرة السلسلة عندما يكون البايت الأول هو 'I' والبايت الأخير هو Null ($00):

يمكن استخدام التعليمات التالية لبدء إنشاء السلسلة:

تكلفتها 0300 دولار

افترض أن البايت الأول موجود في المجمع الذي سيتم إرساله إلى موقع العنوان وهو 0300 دولار. هذه التعليمات صحيحة لكلا الحالتين (كلا النوعين من السلاسل).

بعد تركيب جميع الأحرف في خلايا الذاكرة، واحدًا تلو الآخر، يمكن قراءة السلسلة باستخدام حلقة. في الحالة الأولى، يتم قراءة عدد الأحرف بعد الطول. في الحالة الثانية، تتم قراءة الأحرف من 'I' حتى يتم استيفاء الحرف Null وهو 'Null'.

4.19 إنشاء مصفوفة باستخدام لغة التجميع 6502 μP

تتكون مجموعة الأعداد الصحيحة ذات البايت الواحد من مواقع بايت الذاكرة المتتالية مع الأعداد الصحيحة. ثم يوجد مؤشر يشير إلى موقع العدد الصحيح الأول. لذلك، تتكون مصفوفة الأعداد الصحيحة من جزأين: المؤشر وسلسلة المواقع.

بالنسبة لمصفوفة من السلاسل، يمكن أن تكون كل سلسلة في مكان مختلف في الذاكرة. ثم هناك مواقع ذاكرة متتالية مع مؤشرات حيث يشير كل مؤشر إلى الموقع الأول لكل سلسلة. يتكون المؤشر في هذه الحالة من بايتين. إذا كانت السلسلة تبدأ بطولها، يشير المؤشر المقابل إلى موقع هذا الطول. إذا كانت السلسلة لا تبدأ بطولها ولكنها تنتهي بحرف فارغ، يشير المؤشر المقابل إلى موقع الحرف الأول من السلسلة. وهناك مؤشر يشير إلى عنوان البايت الأقل للمؤشر الأول للمؤشرات المتتالية. لذلك، تتكون مصفوفة السلاسل من ثلاثة أجزاء: السلاسل الموجودة في أماكن مختلفة في الذاكرة، والمؤشرات المتتالية المقابلة، والمؤشر إلى المؤشر الأول من المؤشرات المتتالية.

4.20 المشاكل

يُنصح القارئ بحل جميع المشكلات الموجودة في الفصل قبل الانتقال إلى الفصل التالي.

  1. اكتب برنامج لغة التجميع الذي يبدأ بسعر 0200 دولار لـ 6502 μP ويضيف الأرقام غير الموقعة لـ 2A94 ح (إضافة) إلى 2ABF ح (أغسطس). دع المدخلات والمخرجات تكون في الذاكرة. قم أيضًا بإنتاج وثيقة البرنامج المجمعة يدويًا.
  2. اكتب برنامج لغة التجميع الذي يبدأ بسعر 0200 دولار لـ 6502 μP ويطرح الأرقام غير الموقعة 1569 ح (مطروح) من 2ABF ح (التذكير). دع المدخلات والمخرجات تكون في الذاكرة. قم أيضًا بإنتاج وثيقة البرنامج المجمعة يدويًا.
  3. اكتب برنامج لغة التجميع لـ 6502 μP الذي يعد من 00 إلى 09 دولارًا باستخدام حلقة. يجب أن يبدأ البرنامج بسعر 0200 دولار. قم أيضًا بإنتاج وثيقة البرنامج المجمعة يدويًا.
  4. اكتب برنامج لغة التجميع الذي يبدأ بسعر 0200 دولار لـ 6502 μP. يحتوي البرنامج على روتينين فرعيين. يضيف الروتين الفرعي الأول الأرقام غير الموقعة 0203 ح (أغسطس) و 0102 هـ (إضافة). يضيف الروتين الفرعي الثاني المجموع من الروتين الفرعي الأول وهو 0305H إلى 0006 ح (أغسطس). يتم تخزين النتيجة النهائية في الذاكرة. قم باستدعاء الروتين الفرعي الأول وهو FSTSUB والروتين الفرعي الثاني وهو SECSUB. دع المدخلات والمخرجات تكون في الذاكرة. قم أيضًا بإنتاج وثيقة البرنامج المجمعة للبرنامج بأكمله يدويًا.
  5. بالنظر إلى أن IRQ يضيف المعالج 02 دولارًا إلى 01 دولارًا في المجمع كمعالجة أساسية أثناء نمي يتم إصدار والتعامل الأساسي ل نمي يضيف $05 إلى $04 في المجمع، ويكتب لغة تجميع لكلا المعالجين بما في ذلك مكالماتهم. الدعوة إلى IRQ يجب أن يكون المعالج على عنوان 0200 دولار. ال IRQ يجب أن يبدأ المعالج عند عنوان 0300 دولار. ال نمي يجب أن يبدأ المعالج عند عنوان 0400 دولار. نتيجة IRQ يجب وضع المعالج على عنوان 0500 دولار، ونتيجة لذلك نمي يجب وضع المعالج على عنوان 0501 دولارًا.
  6. اشرح بإيجاز كيفية استخدام تعليمات BRK لإنتاج مقاطعة البرنامج في جهاز كمبيوتر 65C02.
  7. قم بإنشاء جدول يقارن بين الروتين الفرعي العادي وروتين خدمة المقاطعة.
  8. اشرح بإيجاز أوضاع العنونة الرئيسية لـ 65C02 μP في ضوء أمثلة تعليمات لغة التجميع.
  9. أ) اكتب برنامج لغة الآلة 6502 لوضع عبارة 'أحبك!' سلسلة من رموز ASCII في الذاكرة، بدءًا من العنوان $0300 بطول السلسلة. يجب أن يبدأ البرنامج عند العنوان 0200 دولار. احصل على كل حرف من المجمع واحدًا تلو الآخر، على افتراض أنه تم إرساله إلى هناك، من خلال روتين فرعي ما. قم أيضًا بتجميع البرنامج يدويًا. (إذا كنت تريد معرفة رموز ASCII لعبارة 'أنا أحبك!'، فها هي: 'I':49 16 , المساحة : 20 16 , ‘l’: 6C 16 , ‘o’:6F 16 ، 'في': 76 16 ، 'ه':65، 'ذ':79 16 '،' في: 75 16 ، و'!':21 16 (ملاحظة: كل رمز يشغل بايت واحد).
    ب) اكتب برنامج لغة الآلة 6502 لوضع عبارة 'أحبك!' سلسلة من رموز ASCII في الذاكرة، تبدأ من العنوان $0300 بدون طول السلسلة وتنتهي بالرقم 00 16 . يجب أن يبدأ البرنامج عند العنوان 0200 دولار. احصل على كل حرف من المجمع، على افتراض أنه تم إرسالهم إلى هناك، واحدًا تلو الآخر، من خلال روتين فرعي ما. قم أيضًا بتجميع البرنامج يدويًا.