تكنولوجيا

طرق العنونة في المعالج الدقيق 8086 Microprocessor

ما المقصود بطرق العنونة Addressing Mode؟

 

تعد طرق وأوضاع العنونة طرقًا مختلفة يمكن لوحدة المعالجة المركزية من خلالها الوصول إلى البيانات أو المعاملات، وتحدد كيفية الوصول إلى عنوان ذاكرة محدد، لتحميل أي بيانات من وإلى الذاكرة / السجلات (memory/registers)، يتم استخدام تعليمات (MOV)، صيغة تعليمات (MOV) هي:

 

MOV  Destination, Source

 

يقوم بنسخ بيانات المعامل الثاني “المصدر” (source) في المعامل الأول “الوجهة” (destination)، للوصول إلى الذاكرة، يتم استخدام سجلات المقاطع (segment registers) جنبًا إلى جنب مع سجلات الأغراض العامة (general-purpose registers).

 

ما هي طرق العنونة في المعالج الدقيق 8086 Microprocessor؟

 

هناك سبعة أوضاع عنونة في المعالج الدقيق (8086)، الآن، سنناقشهم جميعًا بالتفصيل مع أمثلة على تعليمات التجميع (assembly instructions):

 

وضع عنونة السجل Register addressing mode:

 

يتضمن هذا الوضع استخدام السجلات، هذه السجلات تحمل العمليات (operands)، هذا الوضع سريع جدًا مقارنة بالأوضاع الأخرى، لأنّ وحدة المعالجة المركزية (CPU) لا تحتاج إلى الوصول إلى الذاكرة، يمكن لوحدة المعالجة المركزية إجراء عملية مباشرة من خلال السجلات، كمثال على ذلك:

 

MOV  AX, BL

MOV  AL, BL

 

التعليمات المذكورة أعلاه تنسخ بيانات سجل (BL) إلى (AX) و(AL).

 

مثال Example Assembly Code:

 

(ORG 100h) هو توجيه يخبر المترجم بكيفية التعامل مع كود المصدر (source code).

 

ORG  100h

MOV  AX,CX

ret

 

في هذا المثال، يمكنك رؤية مربع أحمر في المخرجات، يشير هذا المربع الأحمر إلى محتوى سجلات (AX) و(CX)، محتوى كل من سجلات (AX) و(CX) متماثل، لأنّ المثال أعلاه ينقل محتوى (CX) إلى سجل (AX).

 

وضع العنونة الفوري Immediate Addressing Mode:

 

في هذا الوضع، هناك نوعان من العمليات، أحدهما سجل (register) والآخر قيمة ثابتة (constant value)، يأتي السجل بسرعة بعد رمز العملية، كمثال على ذلك:

 

  • التعليمة (MOV AX، 30H) تنسخ القيمة السداسية العشرية (30H) للسجل (AX).

 

  • التعليمة (MOV BX 255) تنسخ القيمة العشرية (255) للسجل (BX).

 

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

 

مثال Example Assembly Code:

 

لنفترض أنّك تريد تخزين (320H) في سجل (DS).

 

ORG  100h

MOV  AX,320H ;copies hexadecimal value 320h to AX

MOV  DS, AX ;copies value of AX into DS

ret  ;stops the program

 

وضع العنونة المباشر Direct Addressing Mode:

 

يقوم بتحميل أو تخزين البيانات من الذاكرة للسجل والعكس صحيح، تتكون التعليمات من سجل وعنوان تعويض (offset address)، لحساب العنوان الفعلي، انتقل إلى اليسار من سجل (DS) وأضف عنوان الإزاحة إليه.

 

MOV  CX, [481]

 

القيمة الست عشرية (hexadecimal) لـ (481) هي (1E1)، افترض أنّ (DS = 2162H)، فإنّ العنوان المنطقي سيكون (2162: 01E1)، لحساب العنوان الفعلي، انتقل إلى اليسار من سجل (DS) وأضفه إلى عنوان الإزاحة، سيكون العنوان الفعلي (26120H + 1E1H = 26301H)، ومن ثمّ، بعد تنفيذ تعليمات (MOV)، سيتم تحميل محتويات موقع الذاكرة (26301H) في السجل (CX)، ستعمل التعليمات (MOV [2481] ، CX) على تخزين محتوى السجل (CX) في موقع الذاكرة (26301H).

 

مثال Example Assembly Code:

 

ORG 100h

MOV AX, 2162H ;copies hexadecimal value 2162h to AX

MOV DS, AX ;copies value of AX into DS

MOV CX, 24 ;copies decimal value 24 into CX

MOV [481], CX ;stores the data of CX to memory address 2162:01E1

MOV BX, [481] ;load data from memory address 2162:01E1 into BX

RET ;stops the program

 

في هذا المثال، يشير المربع الأحمر إلى القيمة السداسية العشرية (hexadecimal) (18)، ويتم تخزين القيمة العشرية (24) في عنوان الذاكرة (21801h).

 

وضع العنونة غير المباشر للسجل Register Indirect Addressing Mode:

 

يستخدم وضع العنونة غير المباشر للسجل عنوان الإزاحة الموجود في أحد هذه السجلات الثلاثة، أي (BX وSI وDI)، ينتج عن مجموع عنوان الإزاحة وقيمة (DS) التي تمّ إزاحتها بواسطة موضع واحد عنوانًا فعليًا، فمثلًا:

 

MOV  AL, [SI]

 

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

 

مثال Example Assembly Code:

 

ORG  100h

.MOV  AX, 0708h ;set AX to hexadecimal value of 0708h

MOV  DS, AX ;copy value of AX to DS

.MOV  CX, 0154h ;set CX to hexadecimal value of 0154h

.MOV  SI, 42Ah ;set SI to 42Ah

MOV  [SI], CX ;copy contents of CX to memory at 0708:042Ah

RET  ;returns to operating system

 

في المثال أعلاه، العنوان الفعلي (physical address) هو (07080 + 042A = 74AA)، وبالتالي، فإنّ (074AA) سيخزن أقل بايت من البيانات، أي (54) و(074 AB) سيخزن أهم أجزاء البيانات، أي (01).

 

وضع العنونة على أساس النسبية Based Relative Addressing Mode:

 

يستخدم وضع العنونة هذا سجلًا أساسيًا (base register)، إمّا (BX) أو (BP) وقيمة إزاحة لحساب العنوان الفعلي.

 

Physical Address= Segment Register (Shifted to left by 1) + Effective address

 

العنوان الحقيقي (effective address) هو مجموع سجل الإزاحة (offset register) وقيمة الإزاحة، المقاطع الافتراضية لـ (BX) و(BP) هي (DS) و(SS)، فمثلًا:

 

MOV  [BX+5], DX

 

في هذا المثال ، العنوان الحقيقي هو (BX + 5) والعنوان الفعلي هو (DS (shifted left) + BX+5)، ستقوم التعليمات الخاصة بالتنفيذ بنسخ قيمة (DX) إلى موقع الذاكرة الخاص بالعنوان الفعلي (physical address= DS (shifted left) +BX+5).

 

مثال Example Assembly Code:

 

ORG  100h

.MOV  AX, 0708h ;set AX to hexadecimal value of 0708h

MOV  DS, AX ;copy value of AX to DS

.MOV  CX, 0154h ;set CX to hexadecimal value of 0154h

.MOV  BX, 42Ah ;set BX to 42Ah

MOV  [BX+5],DX ;copy contents of DX to memory at 0708:042Fh

RET  ;returns to operating system

 

بعض الكودات البديلة الأخرى لـ (MOV DX, [BX + 5]) هي:

 

MOV  DX, 5[BX]

MOV  DX, [BX]+5

 

وضع العنونة النسبية المفهرسة Indexed Relative Addressing Mode:

 

وضع العنونة هذا هو نفسه وضع العنونة النسبي المستند (based relative addressing mode)، الاختلاف الوحيد هو أنّه يستخدم سجلات (DI) و(SI) بدلاً من سجلات (BX) و(BP)، مثال على ذلك كالتالي:

 

إذا كان (DS = 704 ،SI = 2B2 ،DI = 145).

 

MOV  [DI]+12, AL

 

ستعمل هذه التعليمات الخاصة بالتنفيذ على نسخ محتوى (AL) على عنوان الذاكرة (7197 “7040 + 145 + 12”).

 

MOV  BX, [SI]+10

 

ستقوم هذه التعليمات بتحميل المحتويات من عنوان الذاكرة (7302 “7040 + 2B2 +10”) للسجل (BX).

 

وضع العنونة المفهرس المعتمد Based Indexed Addressing Mode:

 

إن وضع العنونة المفهرس المعتمد هو في الواقع مزيج من وضع العنونة النسبي المستند إلى وضع العنونة النسبي المفهرس، يستخدم سجلًا أساسيًا (base register) واحدًا (BX ،BP) وسجل فهرس (index register) واحد (SI ،DI)، فمثلًا:

 

MOV  AX, [BX+SI+20]

 

يمكن أيضًا كتابة التعليمات المذكورة أعلاه على النحو التالي:

 

MOV  AX, [SI+BX+20]

OR

MOV  AX, [SI][BX]+20

 

في هذه الحالة، سيكون العنوان الفعلي هو (DS (Shifted left) + SI + BX + 20)، الآن، إذا استبدلنا (BX) بـ (BP)، فسيكون العنوان الفعلي يساوي (SS (Shifted left) + SI + BX + 20)، الآن، دعونا نلقي نظرة على هاتين التعليمتين:

 

MOV  AX, [BX][BP]+20

MOV  AX, [SI][DI]+20

 

كلا التعبيرين غير مسموح بهما، لأنّ هذا الوضع يدعم سجل أساسي واحد وسجل مقطع واحد.

 

مقالات ذات صلة

زر الذهاب إلى الأعلى