Navigation

شرح المعالجات: موجهات او ايعازات لغة التجميع Assembler Directives

موجِّهات او ايعازات المجمع Assembler Directives لا تُولد الموجهات Directives تعليمات، وإنما تُوجه المجمع إلى ما يجب فعله حين يحوّل برنامجًابلغة التجميع إلى لغة الآلة. تتضمن هذه الموجهات: تصريح عن ثوابت ومتحولات، تعيين طولالمكدس، تحديد بداية ونهاية مقتطع البرنامج ومقتطع المعطيات، بداية ونهاية كل إجرائية، ...

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، حجم ذاكرة البرنامج الكلية.من الممكن اختيار أحد النماذج التالية:



مثال: نختار في العبارة التالية نموذج الذاكرة 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 comments: