تتطلب معظم تعليمات لغة التجميع معاملات لتتم معالجتها، يوفر عنوان المعامل الموقع حيث يتم تخزين البيانات المراد معالجتها، لا تتطلب بعض التعليمات مُعاملًا، في حين أنّ بعض الإرشادات الأخرى قد تتطلب معاملًا واحدًا أو اثنين أو ثلاثة، عندما تتطلب التعليمات معاملين، يكون المعامل الأول هو الوجهة بشكل عام، والتي تحتوي على بيانات في سجل أو موقع ذاكرة، ويكون المعامل الثاني هو المصدر، يحتوي المصدر إمّا على البيانات التي سيتم تسليمها “عنونة فورية” (immediate addressing) أو عنوان البيانات “في السجل أو الذاكرة“، بشكل عام، تظل بيانات المصدر دون تغيير بعد العملية.
ما هو وضع العنونة Addressing Mode
وضع العنونة (addressing mode) هو طريقة تحديد معامل التعليمات، تتمثل مهمة المعالج الدقيق في تنفيذ مجموعة من التعليمات المخزنة في الذاكرة لأداء مهمة محددة، تتطلب العمليات ما يلي:
- المشغل (operator) أو كود التشغيل (opcode) الذي يحدد ما سيتم القيام به.
- المعاملات التي تحدد البيانات التي سيتم استخدامها في العملية.
على سبيل المثال، إذا أردنا جمع العددين (1 و2) والحصول على نتيجة، فربما نكتب هذا رياضيًا على النحو التالي (1 + 2)، في هذه الحالة، عامل التشغيل لدينا هو (+)، أو الجمع، ومعاملاتنا هي الأرقام (1 و2).
في المعالج الدقيق، يجب إخبار الجهاز بكيفية جعل المعاملات تؤدي العملية، العنوان الفعلي (effective address)، هو مصطلح يصف عنوان المعامل المخزن في الذاكرة، هناك عدة طرق لتعيين العنوان الفعلي لتلك المعاملات أو الحصول عليها مباشرة من السجل، تُعرف هذه الأساليب بأوضاع العنونة (addressing modes)، الأساليب الأساسية الثلاثة للعنونة هي كالتالي:
- سجل العناوين (Register addressing).
- العنونة الفورية (Immediate addressing).
- عنونة الذاكرة (Memory addressing).
بنية مجموعة التعليمات (instruction set)، هي بنية تحميل / تخزين (Load/Store)، ممّا يعني أنّه يجب تحميل قيم البيانات في سجلات وحدة المعالجة المركزية قبل إجراء العمليات الحسابية أو المنطقية عليها، التعليمات التي تقوم بتحميل قيم البيانات من الذاكرة أو تخزين قيم البيانات في الذاكرة لا يمكنها تغيير القيمة.
تحدد وحدة المعالجة المركزية عنوان الذاكرة للتحميل أو التخزين عن طريق إضافة إزاحة موجبة أو سالبة إلى قيمة في السجل الأساسي، تسمّى الطريقة التي تجمع بها وحدة المعالجة المركزية بين هذين الجزأين “وضع العنونة” (Addressing Mode).
أنواع طرق العنونة Types of Addressing Modes
سجل العنونة Register Addressing
في وضع العنونة هذا، يحتوي السجل على المعامل (operand)، اعتمادًا على التعليمات، قد يكون السجل هو المعامل الأول أو المعامل الثاني أو كليهما، على سبيل المثال:
MOV DX, TAX_RATE ;Registerin first operand
MOV COUNT, CX ; Register in second operand
MOV EAX, EBX ; Both the operands are in registers
نظرًا لأنّ معالجة البيانات بين السجلات لا تتضمن ذاكرة، فهي توفر أسرع معالجة للبيانات.
العنونة الفورية Immediate Addressing
المعامل الفوري (immediate operand) له قيمة أو تعبير ثابت، عندما تستخدم تعليمة مع مُعاملين عنونة فورية، فقد يكون المعامل الأول عبارة عن سجل أو موقع ذاكرة، ويكون المعامل الثاني ثابتًا فوريًا، يحدد المعامل الأول طول البيانات، على سبيل المثال:
BYTE_VALUE DB 150 ; A byte value is defined
WORD_VALUE DW 300 ; A word value is defined
ADD BYTE_VALUE, 65 ; An immediate operand 65 is added
MOV AX, 45H ; Immediate constant 45H is transferred to AX
عنونة الذاكرة المباشرة Direct Memory Addressing
عند تحديد المعاملات في وضع عنونة الذاكرة، يلزم الوصول المباشر إلى الذاكرة الرئيسية، عادةً إلى مقطع البيانات، تؤدي طريقة المعالجة هذه إلى إبطاء معالجة البيانات، لتحديد الموقع الدقيق للبيانات في الذاكرة، نحتاج إلى عنوان بداية المقطع، والذي يوجد عادةً في سجل (DS) وقيمة الإزاحة، تسمّى قيمة الإزاحة هذه أيضًا “بالعنوان الفعلي” (effective address).
في وضع العنونة المباشرة، يتم تحديد قيمة الإزاحة مباشرة كجزء من التعليمات، وعادةً ما يشار إليها باسم المتغير (variable)، يحسب المجمع قيمة الإزاحة ويحافظ على جدول الرموز الذي يخزن قيم الإزاحة لجميع المتغيرات المستخدمة في البرنامج، في معالجة الذاكرة المباشرة، يشير أحد المعاملين إلى موقع الذاكرة ويشير المعامل الآخر إلى السجل، على سبيل المثال:
ADD BYTE_VALUE, DL ; Adds the register in the memory location
MOV BX, WORD_VALUE ; Operand from the memory is added to register
عنونة الإزاحة المباشرة Direct-Offset Addressing
يستخدم وضع العنونة هذا عوامل التشغيل الحسابية لتعديل العنوان، على سبيل المثال، انظر إلى التعريفات التالية التي تحدد جداول البيانات:
BYTE_TABLE DB 14, 15, 22, 45 ; Tables of bytes
WORD_TABLE DW 134, 345, 564, 123 ; Tables of words
تصل العمليات التالية إلى البيانات من الجداول الموجودة في الذاكرة إلى سجلات:
MOV CL, BYTE_TABLE[2] ; Gets the 3rd element of the BYTE_TABLE
MOV CL, BYTE_TABLE + 2 ; Gets the 3rd element of the BYTE_TABLE
MOV CX, WORD_TABLE[3] ; Gets the 4th element of the WORD_TABLE
MOV CX, WORD_TABLE + 3 ; Gets the 4th element of the WORD_TABLE
عنونة الذاكرة غير المباشرة Indirect Memory Addressing
يستخدم وضع العنونة هذا قدرة الكمبيوتر على العنونة الجزئية: الإزاحة (Segment:Offset)، بشكل عام، يتم استخدام السجلات الأساسية (EBX وEBP) (أو BX وBP) وسجلات الفهرس (DI ،SI)، المشفرة بين قوسين مربعين لمراجع الذاكرة، لهذا الغرض، يتم استخدام العنونة غير المباشرة بشكل عام للمتغيرات التي تحتوي على عدة عناصر مثل المصفوفات، يتم تخزين عنوان بدء المصفوفة في، على سبيل المثال، سجل (EBX)، يوضح مقتطف الشفرة التالي كيفية الوصول إلى عناصر مختلفة من المتغير:
MY_TABLE TIMES 10 DW 0 ; Allocates 10 words (2 bytes) each initialized to 0
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
MOV [EBX], 110 ; MY_TABLE[0] = 110
ADD EBX, 2 ; EBX = EBX +2
MOV [EBX], 123 ; MY_TABLE[1] = 123
تعليمات MOV Instruction
لقد استخدمنا بالفعل تعليمات (MOV) المستخدمة لنقل البيانات من مساحة تخزين إلى أخرى، تأخذ تعليمات (MOV) عاملين، صيغة تعليمات (MOV) هي:
MOV destination, source
قد يكون لتعليمات (MOV) أحد الأشكال الخمسة التالية:
MOV register, register
MOV register, immediate
MOV memory, immediate
MOV register, memory
MOV memory, register
يرجى ملاحظة أنّ:
- يجب أن يكون كلا المعاملين في عملية (MOV) بنفس الحجم.
- تظل قيمة معامل المصدر دون تغيير.
تعليمات (MOV) تسبب الغموض في بعض الأحيان، على سبيل المثال، انظر إلى العبارات التالية:
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
MOV [EBX], 110 ; MY_TABLE[0] = 110
ليس من الواضح ما إذا كنت تريد نقل ما يعادل بايت (byte) أو ما يعادل كلمة (word) مكافئة للرقم (110)، في مثل هذه الحالات، من الحكمة استخدام محدد النوع (type specifier).