موجِّهات او ايعازات لغة التجميع Assembler Directives

الكاتب بتاريخ عدد التعليقات : 0
Assembler Directives

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

واليوم نأخذ :

موجِّهات او ايعازات المجمع Assembler Directives
لا تُولد الموجهات Directives تعليمات، وإنما تُوجه المجمع إلى ما يجب فعله حين يحوّل برنامجًا بلغة التجميع إلى لغة الآلة. تتضمن هذه الموجهات: تصريح عن ثوابت ومتحولات، تعيين طول المكدس، تحديد بداية ونهاية مقتطع البرنامج ومقتطع المعطيات، بداية ونهاية كل إجرائية، ...
التصريح عن ثوابت:
يمكن تعريف ثابت constant  باستخدام المُوجه EQU
مثال: في العبارات التالية يجري أولاً تعريف الثابت K وإعطاؤه القيمة 5، ثُم إسناد الثابت K إلى السجل AX  ، ما هو محتوى AX بعد تنفيذ تعليمة MOV ؟ بالطبع 0005h
K EQU 5h
MOV AX, K
يمكن كتابة الأعداد بالترميز العشري أو الستة عشر أو الاثناني.

التصريح عن متحول:
المتحول هو موقع في الذاكرة يستخدم لحفظ المعطيات المؤقتة. عند كتابة برنامج بلغة التجميع، من الأسهل على المبرمج استخدام اسم المتحول في البرنامج، مثل var1 عوضًا عن استخدام عنوانه المنطقي مثل .5A72h:235Bh
يمكن التصريح عن متحول طوله بايت واحد وإعطائه قيمة ابتدائية باستخدام الموجه DB كما في المثال التالي:
Var1 DB 02h
ويمكن التصريح عن متحول طوله 2 بايت وإعطائه قيمة ابتدائية باستخدام الموجه DW كما في المثال التالي:
Var2 DW 03C5h
تعمل التعليمة التالية على نسخ محتوى المتحول Var1 في :AL
MOV AL, var1
التصريح عن مصفوفة:
يُمكننا أيضًا التصريح عن مصفوفة وإعطاؤها قيمًا ابتدائية. يجري في المثال التالي حجز المصفوفة a بطول 6 بايت وإعطاؤها قيمًا ابتدائية.
a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h
تعتبر سلسلة المحارف string مثال عن مصفوفة طول كل عنصر منها بايت. يجري في المثال التالي حجز سلسلة المحارف b وإسناد الكلمة 'Hello' إليها.
b   DB   'Hello'
عندما يُصادف المُجمع سلسلة محارف بين علامتي اقتباس يحولها إلى مجموعة من البايتات تحوي كود ascii لمحارف السلسلة.
يمكن الوصول إلى أي عنصر من المصفوفة باستخدام الأقواس [ ]
مثال: تنسخ التعليمة التالية العنصر الرابع من المصفوفة a في AL :
MOV AL, a[3]
يمكننا أيضًا باستخدام أحد سجلات الدليل الوصول إلى أحد عناصر المصفوفة، كما هو مبين في المثال التالي:
MOV AL, a[SI]
يمكن استخدام المؤثر DUP للتصريح عن مصفوفة كبيرة، كما يلي:
           c DB 10 DUP(?)
         d DW 10 DUP(8)
تُصرح العبارة الأولى عن مصفوفة بايتات طولها 10 ، دون أن تعطي عناصر المصفوفة قيمًا ابتدائية. في حين تُصرح العبارة الثانية عن مصفوفة كلمات طولها أيضًا 10 ، ولكنها تعطي جميع عناصر المصفوفة القيمة الابتدائية .

الموجه ORG
يخبر هذا الموجه المجمع بأن يضع التعليمات )أو المعطيات ( في الذاكرة ابتداءً من العنوان المحدد بالموجه ORG
في المثال التالي، تقع البايت الأولى من التعليمة    MOV AL, 05h في الموقع 100h من مقتطع البرنامج:
ORG 100h
MOV AL, 05h

البادئتان BYTE PTR و WORD PTR 
لا يستطيع المجمع، في التعليمة التالية، معرفة فيما إذا كان السجل BX يعنون بايتًا أو كلمة في الذاكرة:
MOV [BX], 05h
يمكننا باستخدام البادئة BYTE PTR إخبار المجمع أن طول المعطيات يساوي بايت واحد، كما يمكننا باستخدام البادئة WORD PTR إخبار المجمع أن طول المعطيات يساوي 2 بايت.

مثال: تضع التعليمة التالية البايت 05h في موقع الذاكرة المعنون ب BX :
MOV [BX], BYTE PTR 05h
بينما تضع التعليمة التالية الكلمة 0005h في كلمة الذاكرة المعنونة ب BX :
MOV [BX], WORD PTR 05h

المُؤثر OFFSET
يعيد المؤثر OFFSET المسافة بين لصاقة أو متحول عن بداية مقتطع. في المثال التالي نضع في BX عنوان المتحول VAR1 ثم نستخدم عنونة غير مباشرة بالسجل لتغيير محتوى VAR1 .
VAR1 DB 22h
ORG 100h
MOV BX, OFFSET VAR1
MOV BYTE PTR [BX], 44h

الموجهان PROC و ENDP
 يستخدم هذان الموجهان للتصريح عن بداية ونهاية إجرائية. يحتاج كل من الموجهين PROC و ENDP إلى لصاقة  (Label) تحتوي اسم الإجرائية. يجب أن يحتوي البرنامج إجرائية واحدة على الأقل. يُلحق بالموجه PROC الكلمة NEAR (عندما تقع الإجرائية ضمن مقتطع البرنامج الرئيس) أو الكلمة FAR (عندما تقع الإجرائية في مقتطع غير مقتطع البرنامج الرئيس).
مثال:
ADDEM PROC FAR
ADD BX, DX
MOV AX, BX
RET
ADDEN ENDP
الموجه MODEL
 يُحدد المجمع، بناءً على نموذج الذاكرة المحدد بعد الموجِّه MODEL، حجم ذاكرة البرنامج الكلية. من الممكن اختيار أحد النماذج التالية:
Assembler Directives

مثال: نختار في العبارة التالية نموذج الذاكرة TINY
.MODEL        TINY
الذي يعني أن حجم التعليمات والمعطيات والمكدس معًا أقل من 64 كيلوبايت، وبالتالي يقع كود ومعطيات ومكدس البرنامج ضمن مقتطع واحد من الذاكرة. هذا النموذج مفيد من أجل البرامج الصغيرة، ويولد الرابط LINKER ، في هذه الحالة، برنامجًا تنفيذيًا لاحقته com وليس exe .
يجب أن تبدأ البرامج من نوع com بالعنوان 100h .
عند اختيار أحد نماذج الذاكرة الأخرى يكون لدينا على الأقل مقتطع للبرنامج وآخر للمعطيات ، في هذه الحالة يولد الرابط برنامجا تنفيذيا لاحقته exe .

الموجِّهات CODE ،STACK و DATA
تحدد هذه الموجهات بداية ونهاية مقتطعات منطقية ضمن برنامج مكتوب بلغة التجميع. تحتوي أغلب البرامج ثلاث مقتطعات على الأقل، يمكن أن تكون هذه المقتطعات متراكبة جزئيًا أو كليًا فيما بينها أو منفصلة تمامًا عن بعضها.
يحدد الموجه STACK بداية مقتطع المكدس وُتحدد القيمة التي تلي هذا الموجه حجم الذاكرة المراد حجزها لعمل المكدس، فمثلاً يحجز التعبير التالي 256 بايت لعمل المكدس:
.STACK     100h
ويحدد الموجه DATA بداية مقتطع المعطيات، ويجب أنيصرح عن جميع المعطيات في البرنامج مباشرة بعد هذا الموجه، مثال:
.DATA
DATAW        DW        213FH
DATA1         DB         52H
ويحدد الموجه CODE بداية مقتطع البرنامج، ويجب كتابة التعليمات مباشرة بعد هذا الموجه،
مثال :
.CODE
MOV    AX, @DATA
MOV    DS, AX
.... ...
تعمل التعليمتان السابقتان على شحن DS ببداية مقتطع المعطيات وَتستخدم التعليمة الأولى الموجه @ لتحديد بداية مقتطع المعطيات.

الموجه SEG
يعيد المُؤثر SEG حقل المقتطع من العنوان المنطقي لمتحول أو للـlabel
مثال: تُعيد التعليمة MOV AX, seg array المقتطع المُعرَّف ضمنه المصفوفة array.
الموجه END
يدل على نهاية البرنامج.

مثال نموذجي
يُعتبر البرنامج التالي مثال نموذجي عن برنامج مكتوب بلغة المجمع، يمكن تخزين هذه التعليمات في ملف وليكن hello.asm ثم ترجمته باستخدام البرنامج MASM ، ثم طلب برنامج LINKER لتوليد البرنامج التنفيذي .hello.exe وأخيرًا عند تنفيذ برنامج hello.exe سوف يطبع على الشاشة الجملة Hello, word عشر مرات.
TITLE Hello World Program
.MODEL SMALL
.STACK 64
.DATA
HelloMsg DB "Hello, World",13,10,"$"
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV AH,09H
MOV DX,OFFSET HelloMsg
MOV CX,000Dh
Disploop:
INT 21h
LOOP Disploop
Exit :
MOV AH,4CH
INT 21h
MAIN ENDP
END MAIN


نلتقي في الدرس القادم 

0 تعليق على موضوع "موجِّهات او ايعازات لغة التجميع Assembler Directives "

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