طرق العنونة في المعالج الدقيق 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
كلا التعبيرين غير مسموح بهما، لأنّ هذا الوضع يدعم سجل أساسي واحد وسجل مقطع واحد.