انماط العنونة addressing modes

الكاتب بتاريخ عدد التعليقات : 0
عنونة فورية Immediate Addressing
في التدوينات الماضية بعض تاريخ عائلات المعالجات CPU – computer interface ثم تحدثنا عن معالجات 4CISC و معالجات RISC وذكرنا الفرق بين معالجات 4CISC و معالجات RISC ومبدأ المعالجة التواردية 
هذا روابط التدوينا السابقة 

واليوم ناخذ  انماط العنونة  addressing modes ...

تُنفذ تعليمات المعالج عمليات محددة على المعطيات التي تُسمى بمعاملات Operands التعليمة، يحتاج تنفيذ بعض التعليمات إلى معاملين: معامل مصدر source ومعامل وجهة destination ، ويتطلب بعضها الآخر معام ً لا واحدًا. معامل المصدر هو المكان الذي يقرأ منه المعالج المعطيات، بينما معامل الوجهة هو المكان الذي يخزن فيه المعالج المعطيات. لدينا عدة حالات للمعامل:
  1.  مُضمنًا في التعليمة نفسها
  2.  أحد سجلات المعالج الداخلية
  3.  موقع في الذاكرة أو بوابة دخل/خرج

نعرض فيما يلي الطرق المختلفة التي تمكننا من الوصول إلى معاملات التعليمة، تعرف هذه الطرق بأنماط العنونة.

عنونة بالسجل Register Addressing 
يكون معامل المصدر أو الوجهة أو كليهما معًا موجودين ضمن سجلات المعالج الداخلية، ويجب أن يكون طول سجل المصدر مطابقًا لطول سجل الوجهة.

مثال:
تعمل التعليمة التالية على نسخ محتوى السجل BX إلى السجل AX .
MOV AX,BX
عنونة فورية Immediate Addressing
في العنونة الفورية تحتوي التعليمة نفسها قيمة ثابتة تُمثل مُعامل المصدر، لا يمكن أن يكون معامل الوجهة قيمة ثابتة بل يجب أن يكون سجلاً أو موقعًا في الذاكرة أو بوابة دخل/خرج.

مثال:
تعمل التعليمة التالية على وضع القيمة الثابتة 03 h في السجل CL
                                                      MOV CL, 03h
عنونة فورية Immediate Addressing



عنونة مباشرة 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 .

عنونة مباشرة Direct Addressing


عنونة غير مباشرة بالسجل 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 Indirect Addressing


عنونة غير مباشرة بالسجل مع إزاحة 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 .

عنونة غير مباشرة بالسجل مع إزاحة Register relative Addressing


عنونة غير مباشرة باستخدام سجل قاعدة وسجل دليل 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 

عنونة غير مباشرة باستخدام سجل قاعدة وسجل دليل Base-Plus-Index Addressing


عنونة غير مباشرة باستخدام سجل قاعدة وسجل دليل مع إزاحة 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  

عنونة غير مباشرة باستخدام سجل قاعدة وسجل دليل مع إزاحة Based-Plus-Indexed relative Addressing


إن ترتيب السجلات غير مهم وبالتالي يمكن أيضًا كتابة التعليمة في المثال السابق كما يلي:
[MOV AL, [SI+100h +BX
MOV AL, [SI][BX]+100h

addressing modes


عنونة سلاسل المحارف 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] . ولا تتغير محتوى السجلات الأخرى والذاكرة. 

عنونة سلاسل المحارف String Addressing


إبطال سجل المقتطع الافتراضي
يرتبط بكل نمط عنونة سجل مقتطع افتراضي، ويمكننا في أغلب الأحيان اختيار سجل مقتطع آخر عوضًا عنه وذلك بكتابة اسم سجل المقتطع قبل المعامل في لغة التجميع.

مثال:
نُعين في التعليمة التالية السجل ES كسجل مقتطع عوضًا عن السجل الافتراضي DX 
[MOV AL, ES:[DI
يبين الجدول التالي سجل المقتطع الافتراضي والسجلات البديلة الممكن استخدامها بحسب نوع الرجوع إلى الذاكرة. 

سجل المقتطع الافتراضي


لا يمكننا استخدام سجل مقتطع غير السجل الافتراضي في الحالات الثلاثة التالية: 
  1. في التعليمات التي تستخدم المكدس (مثل PUSH و POP)، والتي تستخدم محتوى السجل SP  كقيمة انزياح، فإنها تستخدم دومًا السجل SS كسجل مقتطع.
  2.  في تعليمات سلاسل المحارف التي تستخدم السجل DI فإنها تستخدم دومًا السجل ES كسجل مقتطع .
  3. في عنونة ذاكرة البرنامج، حيث يكون سجل المقتطع هو دوماً 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


0 تعليق على موضوع "انماط العنونة addressing modes"

لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر
الإبتساماتإخفاء