تعريف المعالج الدقيق 8086 Microprocessor:
التعريف: (8086) هو معالج دقيق (16) بت، وقد تمّ تصميمه في (1978) من قبل شركة “إنتل“، على عكس المعالج الدقيق (8085)، يحتوي المعالج الدقيق (8086) على ناقل عنوان (20) بت، وبالتالي، فهو قادر على الوصول إلى (220) أي، (1) ميجا بايت عنوان في الذاكرة.
كما نعلم أنّ المعالج الدقيق يقوم بعمليات حسابية ومنطقية، والمعالج الدقيق (8086) قادر على أداء هذه العمليات ببيانات (16) بت في دورة واحدة، ومن ثمّ فهو معالج دقيق (16) بت، وبالتالي فإنّ حجم ناقل البيانات هو (16) بت حيث يمكنه حمل بيانات (16) بت في المرة الواحدة، تختلف بنية المعالج الدقيق (8086) اختلافًا كبيرًا عن بنية المعالج الدقيق (8085).
شرح الرسم التخطيطي للمعالج الدقيق 8086:
تتكون بنية المعالج الدقيق (8086) من وحدتين رئيسيتين، (BIU) أي وحدة واجهة النواقل و(EU) أي وحدة التنفيذ، في مخطط التمثيل المعماري للمعالج الدقيق (8086):
وحدة واجهة النواقل Bus Interface Unit (BIU):
تدير وحدة واجهة النواقل (BIU) البيانات والعناوين ونواقل التحكم، تعمل وحدة واجهة النواقل (BIU) على النحو التالي:
- يجلب التعليمات المتسلسلة من الذاكرة.
- يبحث عن العنوان الفعلي لذلك الموقع في الذاكرة حيث يتم تخزين التعليمات.
- يدير قائمة انتظار الجلب المسبق المكونة من (6) بايت حيث يتم تخزين التعليمات المخططة.
يعرض المعالج الدقيق (8086) خاصية توجيه التعليمات في قائمة انتظار أثناء تنفيذ فك التشفير وتنفيذ التعليمات السابقة، هذا يوفر وقت تشغيل المعالج بمقدار كبير، يتم تنفيذ خط النقل هذا في قائمة انتظار مكونة من (6) بايت، أيضًا، تحتوي (BIU) على (4) سجلات مقطعية (segment registers)، كل مقطع سجل (16) بت، المقاطع موجودة في الذاكرة وهذه السجلات تحمل عنوان جميع المقاطع، هذه السجلات هي كما يلي:
- سجل مقطع الكود (Code segment register): إنّه سجل (16) بت ويحمل عنوان التعليمات أو البرنامج المخزن في مقطع الكود في الذاكرة، أيضًا، (IP) في المخطط هو مؤشر التعليمات (instruction pointer)، وهو سجل افتراضي يستخدمه المعالج للحصول على التعليمات المطلوبة، يحتوي (IP) على عنوان الإزاحة للبايت التالي الذي سيتم أخذه من مقطع الكود (code segment).
- سجل مقطع المكدس (Stack segment register): يوفر سجل مقطع المكدس عنوان البداية لمقطع المكدس في الذاكرة، كما هو الحال في مؤشر المكدس، يتم استخدام عمليات (PUSH وPOP) في هذا المقطع لإعطاء البيانات وأخذها من / إليها.
- سجل مقطع البيانات (Data segment register): يحمل عنوان مقطع البيانات، يخزن مقطع البيانات البيانات الموجودة في الذاكرة التي يكون عنوانها موجودًا في سجل (16) بت.
- سجل مقطع إضافي (Extra segment register): هنا عنوان البداية للقسم الإضافي موجود، يحتوي هذا السجل بشكل أساسي على عنوان بيانات السلسلة، من الجدير بالذكر أنّ العنوان الفعلي للتعليمات يتحقق من خلال دمج عنوان المقطع مع عنوان الإزاحة.
- طابور الجلب المسبق المكون من (6) بايت (6-byte pre-fetch queue): يتم استخدام قائمة الانتظار هذه في (8086) من أجل تنفيذ خطوط النقل، في وقت فك تشفير التعليمات وتنفيذها في (EU)، تجلب (BIU) التعليمات القادمة المتسلسلة وتخزنها في قائمة الانتظار هذه، حجم قائمة الانتظار هذه (6) بايت، هذا يعني أنّه يمكن تخزين تعليمات (6) بايت كحد أقصى في قائمة الانتظار هذه، تعرض قائمة الانتظار سلوك (FIFO)، أولاً ما يدخل، يخرج أولاً (first in first out).
وحدة التنفيذ Execution Unit (EU):
تقوم وحدة التنفيذ (EU) بفك تشفير وتنفيذ التعليمات التي يتم جلبها من موقع الذاكرة المطلوب، وتقسم كالتالي:
وحدة التحكم Control Unit:
مثل وحدة التوقيت والتحكم في المعالج الدقيق (8085)، تنتج وحدة التحكم في المعالج الدقيق (8086) إشارة تحكم بعد فك شفرة التشغيل لإبلاغ سجل الأغراض العامة لتحرير القيمة المخزنة فيه، كما أنّه يشير أيضًا إلى وحدة الحساب المنطقية (ALU) لإجراء العملية المطلوبة.
وحدة الحساب والمنطق ALU:
تقوم وحدة الحساب والمنطق بتنفيذ المهام المنطقية وفقًا للإشارة التي تمّ إنشاؤها بواسطة (CU)، يتم تخزين نتيجة العملية في السجل المطلوب.
العلم Flag:
كما هو الحال في (8085)، هنا أيضًا يحمل سجل العلم حالة النتيجة التي تمّ إنشاؤها بواسطة (ALU)، يحتوي على العديد من العلامات التي توضح الظروف المختلفة للنتيجة.
المعامل Operand:
إنه سجل مؤقت ويستخدمه المعالج للاحتفاظ بالقيم المؤقتة في وقت التشغيل.
ملاحظة: “السبب وراء قسمين منفصلين لـ (BIU وEU) في بنية (8086) هو تنفيذ الجلب وفك التشفير في وقت واحد”.
عمل المعالج الدقيق 8086 Microprocessor:
في القسم السابق، ناقشنا تشغيل أقسام مختلفة من (BIU) و(EU)، الآن سوف نلقي نظرة على دورة المعالجة الكلية للمعالجات الدقيقة (8086)، لذلك، بشكل أساسي، عندما يتم جلب التعليمات من الذاكرة، فيجب أولاً حساب عنوانها الفعلي ويتم ذلك في (BIU)، يتم إعطاء العنوان الفعلي (physical address) للتعليمات على النحو التالي:
PA = Segment address Χ 10 + Offset
على سبيل المثال: لنفترض أنّ عنوان المقطع هو (2000 H) وعنوان الإزاحة هو (4356 H)، لذا، فإنّ العنوان الفعلي الذي تمّ إنشاؤه هو (24356 H)، هنا، يوفر سجل مقطع الكود العنوان الأساسي لمقطع الكود الذي يتم دمجه مع عنوان الإزاحة.
يحتوي مقطع الكود على التعليمات، في كل مرة يتم فيها جلب تعليمة، يتم زيادة عنوان الإزاحة داخل مقطع الكود، لذلك، بمجرد حساب العنوان الفعلي للتعليمات بواسطة (BIU) للمعالج، فإنّه يرسل موقع الذاكرة عن طريق ناقل العنوان إلى الذاكرة، علاوةً على ذلك، يتم جلب التعليمات المطلوبة في موقع الذاكرة الموجود في شكل كود التشغيل بواسطة المعالج الدقيق من خلال ناقل البيانات.
افترض أنّ التعليمات هي (ADD BL ،CL)، ولكن، داخل الذاكرة، سيكون على شكل كود تشغيل، لذلك، يتم إرسال رمز التشغيل هذا إلى وحدة التحكم، تقوم وحدة التحكم بفك تشفير كود التشغيل وتوليد إشارات تحكم تخبر سجل (BL وCL) لتحرير القيمة المخزنة فيه، كما أنّه يشير إلى وحدة الحساب المنطقية (ALU) لإجراء عملية إضافة على تلك البيانات المعينة.
من الجدير بالذكر أنّه في أي تعليمات، مثل (ADD BL ،CL)، يشير (BL) إلى وجهة نتيجة عملية الإضافة، يوضح هذا بوضوح أنّه مهما كانت العملية يتم تنفيذها، يجب تخزين نتيجتها في السجل الأول، أي (BL) لهذا المثال بالذات.
لنأخذ مثالًا آخر: فكر في أمر، (ADD CL ،05H).
هذا يعني أنّه يجب إضافة المعامل (05H) مع البيانات الموجودة في سجل (CL) ويتم تخزينه في هذا السجل المعين، أي (CL)، في مثل هذه الظروف، لا يتم توفير المعامل لوحدة التحكم حيث أنّ كود التشغيل هو المطلوب فقط لفك تشفيره بواسطة (CU)، ومن ثمّ يتم توفير المعامل مباشرة إلى (ALU)، أيضًا، يتم تخزين حالة هذه النتيجة في سجل العلم (flag register)، لذلك، عندما تقوم (ALU) بإجراء عملية، فإنّها تولد النتيجة وكذلك حالتها في نفس الوقت.
من الجدير بالذكر أنّه في (BIU)، تفشل عملية النواقل كلما كان هناك تفرع في التعليمات، هذا لأنّ التعليمات بشكل عام موجودة بطريقة متسلسلة، لكن، في بعض الأحيان تكون التعليمات مطلوبة ليتم تنفيذها بشكل غير متتابع، ومع ذلك، في قائمة الانتظار، يتم تخزين التعليمات بالتسلسل، لذلك، في حالة وجود حاجة لفك تشفير أي تعليمات عشوائية، سيصبح كود التشغيل المخزن في قائمة الانتظار غير صالح ويجب مسحه في ذلك الوقت المحدد.