في التدوينات الماضية بعض تاريخ عائلات المعالجات CPU – computer interface ثم تحدثنا عن معالجات 4CISC و معالجات RISC وذكرنا الفرق بين معالجات 4CISC و معالجات RISC ومبدأ المعالجة التواردية
هذا روابط التدوينا السابقة
الدرس الثاني معالجات 4CISC و معالجات RISC - computer interface
الدرس الثالث المعالجات التواردية pipelining
الدرس الخامس المتحكمات الصغرية Microcontroller
الدرس السابع البنية الداخلية للمعالج 8088/ 8086
الدرس الثامن السجلات الداخلية للمعالج 8088/ 8086
الدرس التاسع تنظيم ذاكرة المعالج 8086
واليوم ناخذ انماط العنونة addressing modes ...
تُنفذ تعليمات المعالج عمليات محددة على المعطيات التي تُسمى بمعاملات Operands التعليمة، يحتاج تنفيذ بعض التعليمات إلى معاملين: معامل مصدر source ومعامل وجهة destination ، ويتطلب بعضها الآخر معام ً لا واحدًا. معامل المصدر هو المكان الذي يقرأ منه المعالج المعطيات، بينما معامل الوجهة هو المكان الذي يخزن فيه المعالج المعطيات. لدينا عدة حالات للمعامل:
- مُضمنًا في التعليمة نفسها
- أحد سجلات المعالج الداخلية
- موقع في الذاكرة أو بوابة دخل/خرج
نعرض فيما يلي الطرق المختلفة التي تمكننا من الوصول إلى معاملات التعليمة، تعرف هذه الطرق بأنماط العنونة.
عنونة بالسجل Register Addressing
يكون معامل المصدر أو الوجهة أو كليهما معًا موجودين ضمن سجلات المعالج الداخلية، ويجب أن يكون طول سجل المصدر مطابقًا لطول سجل الوجهة.
مثال:
تعمل التعليمة التالية على نسخ محتوى السجل BX إلى السجل AX .
MOV AX,BX
عنونة فورية Immediate Addressing
في العنونة الفورية تحتوي التعليمة نفسها قيمة ثابتة تُمثل مُعامل المصدر، لا يمكن أن يكون معامل الوجهة قيمة ثابتة بل يجب أن يكون سجلاً أو موقعًا في الذاكرة أو بوابة دخل/خرج.
مثال:
تعمل التعليمة التالية على وضع القيمة الثابتة 03 h في السجل CL
MOV CL, 03h
عنونة مباشرة Direct Addressing
تولج وحدة التنفيذ EU مباشرة إلى المعاملات في العنونة بالسجل وفي العنونة الفورية. ولكن عندما يكون أحد معاملي التعليمة موقع ذاكرة تمرر EU إلى BIU العنوان المنطقي المكون من انزياح وعنوان قاعدي وتحسب BIU بناءاً على ذلك العنوان الفيزيائي للمعامل. يمكن أن تحسب EU الانزياح بعدة طرق بحسب نمط العنونة المستخدم في التعليمة، نسمي هذا الانزياح بالعنوان الفعال effective address (EA) .
تنسخ التعليمة [MOV AX, [address (يمثل address الانزياح عن بداية القطاع المحدد بسجل القطاع DX العنوان الفعال يساوي في هذا النمط address ) المعطيات الموجودة في الموقع address من مقتطع المعطيات في AX يُستخدم سجل المقتطع DX ، افتراضيًا، في حساب العنوان الفيزيائي.
مثال:
تبعًا للصورة التالية، فإنه وبعد تنفيذ التعليمة MOV CX, [1234h] يجري نسخ محتوى الموقع 1234 h من مقتطع المعطيات في السجل CX ، أي يجري نسخ محتوى الموقع الفيزيائي 02000+1234 h = 03234h في CX . وبما أن طول معامل الوجهة يساوي 2 بايت فإنه يجري نسخ محتوى الموقعين 03234 h و 03235 h في CX . وبالنتيجة يحتوي CX بعد تنفيذ التعليمة السابقة القيمة BEEDh .
عنونة غير مباشرة بالسجل Register Indirect Addressing
تسمح العنونة غير المباشرة بالسجل بعنونة معطيات في أي مكان من الذاكرة عبر انزياح موجود في أحد السجلات التالية SI ،BP ،BX أو DI (العنوان الفعال في هذه الحالة يساوي محتوى أحد السجلات SI ،BP ،BX أو DI). يُستخدم في حساب العنوان الفيزيائي، افتراضيًا، سجل المقتطع:
- DS عند استخدام أحد السجلات SI ،BX أو DI .
- SS عند استخدام السجل BP .
مثال:
تبعًا للشكل التالي، فإنه وبعد تنفيذ التعليمة MOV AX, [SI] يجري نسخ محتوى الموقع 1234h من مقتطع المعطيات في السجل AX ، أي يجري نسخ محتوى الموقع الفيزيائي 02000+1234 h = 03234h في AX وبالنتيجة يحتوي AX بعد تنفيذ التعليمة السابقة القيمة BEEDh .
عنونة غير مباشرة بالسجل مع إزاحة Register relative Addressing
يجري عنونة المعطيات في مقتطع ذاكرة بجمع إزاحة (سنستخدم الإزاحة كترجمة لـ displacement والانزياح كترجمة لـ offset ) displacement مع أحد سجلات القاعدة (BP، BX) أو مع أحد سجلات الدليل (SI أو DI) (العنوان الفعال يساوي ناتج جمع إزاحة متضمنة في التعليمة مع أحد السجلات SI ،BP ،BX او DI ).
تتضمن التعليمة قيمة الإزاحة التي ُتكون ممثلة على 16 بت مع إشارة، وبالتالي يمكن أن تكون قيمة الإزاحة بين 32,768 – و 32,767 يُستخدم في حساب العنوان الفيزيائي، افتراضيًا، سجل المقتطع:
- DS عند استخدام SI ،BX او .DI
- SS عند استخدام BP .
مثال:
تبعًا للشكل التالي، فإنه وبعد تنفيذ التعليمة MOV AL, [SI] + 1234h يجري نسخ محتوى الموقع الفيزيائي 02000+2000+1234 h = 05234h في AX وبالنتيجة يحتوي AL بعد تنفيذ التعليمة السابقة القيمة BEh .
عنونة غير مباشرة باستخدام سجل قاعدة وسجل دليل Base-Plus-Index Addressing
تشبه طريقة العنونة هذه نمط العنونة غير المباشرة بالسجل. يجري استخدام أحد سجلات القاعدة (BP او BX ) مع أحد سجلات الدليل (DI او SI ) لعنونة موقع ذاكرة بطريقة غير مباشرة (العنوان الفعال يساوي ناتج جمع أحد السجلين BP ،BX مع أحد السجلين DI ،SI ) يُستخدم في حساب العنوان الفيزيائي، افتراضيًا، سجل المقتطع:
- DS عند استخدام BX .
- SS عند استخدام BP .
مثال:
بفرض أن DS=0100h و DI= 0010 و BX=1000h ، فإنه وبعد تنفيذ التعليمة MOV DX, [BX+DI] يجري نسخ الكلمة من الموقع الفيزيائي 01000 h+1000h+0010h= 02010h في DX
عنونة غير مباشرة باستخدام سجل قاعدة وسجل دليل مع إزاحة Based-Plus-Indexed relative Addressing
إن هذا النوع من العنونة هو أقل أنماط العنونة استخدمًا، يجري فيه حساب انزياح المعطيات عن سجل مقتطع بجمع إزاحة مع أحد سجلات القاعدة BP او BX ومع أحد سجلات الدليل DI او SI (العنوان الفعال يساوي ناتج جمع إزاحة متضمنة في التعليمة مع أحد السجلين BP او BX ومع أحد السجلين DI او SI ).
يستخدم في حساب العنوان الفيزيائي، افتراضيًا، سجل المقتطع:
- DS عند استخدام BX.
- SS عند استخدام BP .
مثال:
بفرض أن DS=1000h و SI=0100 و BX=0020h ، فإنه وبعد تنفيذ التعليمة MOV AL, [BX+SI+ 100h] يجري نسخ محتوى الموقع الفيزيائي 10000 h+0020h+0100h+100h = 10220h فيAL
إن ترتيب السجلات غير مهم وبالتالي يمكن أيضًا كتابة التعليمة في المثال السابق كما يلي:
[MOV AL, [SI+100h +BX
MOV AL, [SI][BX]+100h
عنونة سلاسل المحارف String Addressing
تفيد تعليمات سلاسل المحارف في نسخ كتلة من المعطيات أو سلسلة من المحارف من مكان إلى آخر. تفترض هذه التعليمات أن السجل SI يُشير إلى البايت أو الكلمة الأولى من معامل المصدر ويُشير السجل DI إلى البايت أو الكلمة الأولى من معامل الوجهة. يجري، بعد كل عملية نسخ، زيادة SI و DI آليًا إذا كانت الراية DF تساوي 0 ويجري إنقاص SI و DI آليًا إذا كانت الراية DF تساوي 1 .
يُستخدم سجل المقتطع ES في حساب العنوان الفيزيائي للوجهة، ولا يمكننا تعين سجل مقتطع آخر عوضًا عنه، في حين يُستخدم سجل المقتطع DS للمصدر مع إمكان تعيين سجل مقتطع آخر .
مثال:
إذا كان [DF]=0 و [DS]=2000h و [SI]=500h و [ES]=4000h و [DI]= 0300h و [20500] =38h و [40300]=45 فإنه بعد تنفيذ التعليمة MOVS BYTE يصبح لدينا
40300h]=38] و [SI]=[0501h] و [DI]=[0301h] . ولا تتغير محتوى السجلات الأخرى والذاكرة.
إبطال سجل المقتطع الافتراضي
يرتبط بكل نمط عنونة سجل مقتطع افتراضي، ويمكننا في أغلب الأحيان اختيار سجل مقتطع آخر عوضًا عنه وذلك بكتابة اسم سجل المقتطع قبل المعامل في لغة التجميع.
مثال:
نُعين في التعليمة التالية السجل ES كسجل مقتطع عوضًا عن السجل الافتراضي DX
[MOV AL, ES:[DI
يبين الجدول التالي سجل المقتطع الافتراضي والسجلات البديلة الممكن استخدامها بحسب نوع الرجوع إلى الذاكرة.
لا يمكننا استخدام سجل مقتطع غير السجل الافتراضي في الحالات الثلاثة التالية:
- في التعليمات التي تستخدم المكدس (مثل PUSH و POP)، والتي تستخدم محتوى السجل SP كقيمة انزياح، فإنها تستخدم دومًا السجل SS كسجل مقتطع.
- في تعليمات سلاسل المحارف التي تستخدم السجل DI فإنها تستخدم دومًا السجل ES كسجل مقتطع .
- في عنونة ذاكرة البرنامج، حيث يكون سجل المقتطع هو دوماً CS وسجل الإزاحة هو دومًا IP.
اختبار ذاتي:
المطلوب تحديد سجل المقتطع الافتراضي في كل من الحالات التالية بفرض أن محتوى السجل المعطى يُمثل الانزياح ؟
BX -5 SP -4 SI -3 IP -2 BP -1
الجواب:
DS -5 SS -4 DS -3 CS -2 SS -1
عنونة ضمنية Implied Addressing
لا تحتوي التعليمات التي تستخدم هذا النمط من العنونة على معامل صريح، وإنما يكون مضمنًا في التعليمة نفسها.
مثال:
تُصفر التعليمة CLC راية الحامل .
عنونة بوابات الدخل/الخرج
يمكن أن تقع بوابات الدخل/الخرج ضمن فضاء عنونة الذاكرة أو ضمن فضاء عنونة البوابات :I/O
- إذا كانت البوابات تقع ضمن فضاء عنونة الذاكرة فيمكن استخدام أي من أنماط عنونة الذاكرة من أجل عنونة البوابات.
- إذا كانت البوابات تقع ضمن فضاء عنونة بوابات الدخل/الخرج فيمكن أن ُتعنون البوابات إما بطريقة مباشرة أو بطريقة غير مباشرة:
عنونة مباشرة: في هذه الحالة، ُتحدد قيمة فورية من 8 بتات رقم البوابة، وبالتالي يُمكننا بهذه الطريقة عنونة 256 بوابة مختلفة فقط، تبدأ من العنوان 00 h وتنتهي بالعنوان .FFh
مثال:
تخرج التعليمة التالية OUT 05h, AL محتوىAL (8 بت) على البوابة ذات الرقم أو العنوان .05h
عنونة غير مباشرة: في هذه الحالة، يحتوي السجل DX على رقم البوابة، وبما أن طول DX يساوي 16 بت فتسمح لنا طريقة العنونة هذه بعنونة كامل فضاء بوابات الدخل/الخرج.
مثال:
إذا كان لدينا [DX]=5040h فتقرأ التعليمة IN AL, DX البايت على دخل البوابة 5040h وتخزنها في السجلAL بينما تقرأ التعليمة IN AX, DX الكلمة على دخل البوابة 5040h تخزن في AL البايت على دخل البوابة 5040h وتخزن في AH البايت على دخل البوابة .5041h
ملاحظة: تجري، دومًا، عمليات تبادل المعطيات بطول 8 بت مع البوابات عبرAL في حين نستخدم AX لتبادل معطيات بطول 16 بت.
نكتفي بهذا ونلتقي في التدوين القادم والدخول في فصل جديد مما ننقله لكم ايها الاحبة وهو بعنوان البرمجة بلغة التجميع assembly
جيد هذا المرجع
ردحذفThanks
ردحذف