اقرأ في هذا المقال
- تعريف توجيهات المجمع Assembler Directives
- ما هو المجمع an Assembler؟
- توجيهات المجمع للمعالج الدقيق 8085
- توجيهات المجمع للمعالج الدقيق 8086
توجيهات المجمّع (Assembler directives)، هي توجيهات للمُجمّع لاتخاذ بعض الإجراءات أو تغيير الإعدادات، لا تمثل توجيهات المُجمِّع التعليمات (instructions)، ولا يتم ترجمتها إلى كود الآلة (machine code).
تعريف توجيهات المجمع Assembler Directives:
التعريف: “توجيهات المجمّع هي التعليمات التي يستخدمها المجمّع في وقت تجميع البرنامج المصدر (assembling a source program)، وبشكل أكثر تحديدًا، يمكننا القول، أنّ توجيهات المُجمِّع هي الأوامر أو التعليمات التي تتحكم في تشغيل المُجمِّع”.
توجيهات المجمع هي التعليمات المقدمة للمجمع (assembler)، وليس المعالج (processor)، لأنّ المعالج لا علاقة له بهذه التعليمات، تُعرف هذه التعليمات أيضًا باسم “التعليمات الزائفة” (pseudo-instructions) أو “الشفرة الزائفة” (pseudo-opcode)، الآن السؤال الذي يطرح نفسه ما الذي تفعله توجيهات المجمع على وجه التحديد؟
وظيفة توجيهات المجمع:
- عرض بداية ونهاية البرنامج المقدم للمجمع.
- تستخدم لتوفير مواقع تخزين البيانات.
- تستخدم لإعطاء قيم للمتغيرات.
- تحديد بداية ونهاية المقاطع (segments)، أو العمليات (procedures) أو وحدات الماكرو (macros) المختلفة من البرنامج.
ما هو المجمع an Assembler؟
نحن نعلم أنّ لغة التجميع (assembly language)، هي لغة أقل تعقيدًا ومناسبة للمبرمجين تُستخدم لبرمجة المعالجات، في برمجة لغة التجميع، يتم تحديد التعليمات في شكل (mnemonics)، أو بالأحرى، في شكل لغة آلة، أي (0 و1)، لكن المعالجات الدقيقة أو وحدات التحكم الدقيقة مصممة خصيصًا بطريقة تمكنهم من فهم لغة الآلة فقط.
وبالتالي، يتم استخدام المُجمِّع لتحويل لغة التجميع إلى لغة الآلة بحيث يمكن فهمها وتنفيذها بواسطة المعالج، لذلك، للتحكم في توليد أكواد الآلة من لغة التجميع، يتم استخدام توجيهات المجمع (assembler directives)، ومع ذلك، يتم إنشاء أكواد الألة فقط للبرنامج الذي يجب توفيره للمعالج وليس لتوجيهات المُجمِّع لأنّها لا تنتمي إلى البرنامج الفعلي.
توجيهات المجمع للمعالج الدقيق 8085:
يتم استخدام توجيهات المجمع الواردة أدناه بواسطة المجمعين للمعالجات الدقيقة (8085 و8086):
DB: Define Byte
يتم استخدام هذا التوجيه لغرض تخصيص وتهيئة بايتات بيانات مفردة أو متعددة:
AREA DB 30H, 52H, 35H
يحتوي اسم الذاكرة (AREA) على ثلاثة مواقع متتالية، حيث يتم تخزين (30H و52H و35H).
DW: Define Word
يتم استخدامها لتهيئة كلمات بيانات مفردة أو متعددة (16 بت).
MARK DW 1020H, 4216H
يتم تخزين هاتين المعطيات (16) بت (1020H و4216H)، في (4) مواقع متتالية في الذاكرة (MARK).
END: End of program
يتم استخدام هذا التوجيه في وقت إنهاء البرنامج.
EQU: Equate
يتم استخدامه لتخصيص أي قيمة عددية أو ثابت للمتغير.
DONE EQU 10H
اسم المتغير (DONE) له قيمة (10H).
MACRO: Represents beginning
يظهر بداية (macro) مع تعريف الاسم والمعلمات.
ENDM: End of macro
يشير (ENDM) إلى إنهاء ال (macro)، حيث يتم تحديد الاسم الكبير (STEP) من قبل المستخدم.
ORG: Origin
يتم استخدام هذا التوجيه في وقت تعيين عنوان البداية لوحدة نمطية أو مقطع.
ORG 1050H
من خلال هذه التعليمات، يعرف المجمّع أنّ العبارات التي تتبع هذه التعليمات، يجب تخزينها في موقع الذاكرة بدءًا من العنوان (1050H).
توجيهات المجمع للمعالج الدقيق 8086:
يتم استخدام توجيهات المجمّع هذه على وجه التحديد بواسطة المعالج الدقيق 8086:
ASSUME: Shows the segment name to the assembler
يعرض اسم المقطع للمجمع، يوفر معلومات للمجمع فيما يتعلق باسم البرنامج أو مقطع البيانات لهذا الجزء المعين.
ASSUME CS: _DONE
يحدد هذا التوجيه أنّ تعليمات البرنامج المصدر مخزنة في المقطع المنطقي (_DONE).
DD: Define Double word
تحديد كلمة مزدوجة، يسمح هذا التوجيه بتهيئة بيانات مفردة أو متعددة في شكل كلمات مزدوجة، أي (4) بايت، يستخدم هذا لإعلام المجمّع بأنّ البيانات المخزنة في الذاكرة هي كلمة مزدوجة.
MEM DD 10D50F7B
DQ: Define Quad words
يتم استخدامه لتهيئة الكلمات الرباعية (8) بايت، إمّا كلمة واحدة أو أكثر، وبذلك يتم إبلاغ المجمع بأنّ البيانات المخزنة في الذاكرة تتكون من أربع كلمات.
DT: Define ten bytes
يتم استخدامه لتخصيص وتهيئة (10) بايت من المتغير.
DUP: Duplicate
يسمح (DUP) بتهيئة مواقع متعددة وتعيين قيم لها، ويسمح بتخزين الأحرف أو المتغيرات المتكررة في مواقع مختلفة.
Book DB 8 DUP (10H, 20H, 30H, 40H)
لذلك يسمح هذا التوجيه بتخزين هذه البيانات في الذاكرة وإنشاء (8) مجموعات متطابقة في الذاكرة المحددة باسم (Book).
DWORD: Double word
يستخدم هذا التوجيه للإشارة إلى أنّ المعامل بحجم كلمة مزدوج.
PROC: Procedure
يحدد بداية العملية / روتين فرعي (procedure/subroutine).
FAR
هذا التوجيه هو نوع محدد يستخدمه المجمّع للإعلان عن استدعاء بين (intersegment)، “أي استدعاء من مقطع مختلف”.
NEAR
يستخدم هذا التوجيه للمكالمة الداخلية، أي مكالمة داخل نفس المقطع.
ENDP: End of procedure
يوضح هذا التوجيه إنهاء العملية.
SEGMENT: Beginning of a memory segment
يتم استخدامه لإظهار بداية مقطع من الذاكرة باسم محدد.
ENDS: End of segment
يحدد هذا التوجيه إنهاء مقطع ذاكرة معين كما هو محدد بواسطة اسمه، البيانات داخل المقطع ليست سوى رمز البرنامج.
EVEN
يتم استخدامه لإعلام المجمّع بمحاذاة البيانات بدءًا من عنوان زوجي، نظرًا لأنّ البيانات المحددة بعنوان بدء فردي تتطلب الوصول إلى (2) بايت، وبالتالي، باستخدام هذا التوجيه، يمكن محاذاة البيانات مع عنوان بداية متساوٍ.
PTR: Pointer
يوضح هذا التوجيه معلومات تتعلق بحجم المعامل.
JMP BYTE PTR [BX]
يظهر هذا بالقرب من الانتقال المسموح به إلى (BX).
PUBLIC
يستخدم هذا التوجيه لتقديم إعلان عن المتغيرات الشائعة لوحدات البرامج المختلفة.
STACK
يوضح هذا التوجيه وجود مقطع مكدس.
STACK [size]
SHORT
يستخدم هذا للإشارة إلى تعليمات القفز لتعيين إزاحة بمقدار بايت واحد.
THIS
يتم استخدامه مع توجيه (EQU) لتعيين (label) على إمّا بايت أو كلمة أو كلمة مزدوجة.