دورة الأسمبلى - اليوم الرابع

أصبحنا فى اليوم الرابع و لم ندخل بعد فى اللغه نفسها ، يبدو أن الموضوع ليس كما نتصور .... ،،،

اليوم سنفتح باب اللغه إن شاء الله و ندخلها و لكن بخطوات قليله جدا ، هيا جهزوا أنفسكم و الباب يحتاج مفتاح .!!

سنتناول الأتى فى هذا الدرس :-
---------------------------------
1 -
نظم العنونه Addressing Modes
2 -
تعليمات الأسمبلى Assemply Instructions

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

 

1 - نظم العنونه Addressing Modes :-
-------------------------------------------------



قلنا أننا نتعامل مباشرا مع الذاكره و أماكنها المختلفه فيجب أن نتعرف على ما هى نظم عنونة الذاكره و التى تمكن لنا وصولا مضمونا إلى القيم الأخيره (المستهدفه) Operands ،

معلومات عامه :-
-------------------
1 -
الذاكره تكون مقسمه تخيليا (عن طريق نظام التشغيل و البروسسور) إلى أجزاء تسمى مقاطع (Segments) . هذه المقاطع تعمل كأقسام بيانات وهى أجزاء محددة الطول ب 64 كيلو بايت ، كل مقطع له رقمه ( عنوانه ) و يمكن الوصول إلى مقطع محدد عن طريق مسجلات المقاطع التى تم ذكرها فى الدرس السابق ، عند أى إستخدام للذاكره ، يجب تحديد المقطع أولا عن طريق Data Segment أو أى مسجل مقاطع آخر ومن ثم تحديد أى مكان داخل هذا المقطع عن طريق مسجل يحمل العنوان المراد وهو بالطبع من 0 إلى 65535 ومن هنا يتم تحديد مكان البيانات بالظبط ،
ممكن أن تتخيلها بطريقه أخر : تخيل أن مدينه معينه وأريد الوصول إلى شخص ما فيها أو منزل بها ، المدينه مقسمه إلى شوارع ، كل شارع برقم معين بالترتيب و داخل كل شارع توجد منازل بأرقام مرتبه أيضا من 1 إلى 100 منزل ، كنت أريد الوصول إلى المنزل 45 فى الشارع ال 20 . عندها سأحاول البحث عن الشارع أولا ومن ثم البحث داخله عن المنزل ، نفس طريقة العمل بالظبط يتم التعامل بها فى إستخدام الذاكره و تخزين و إخراج البيانات منها .

2 -
عند تشغيل أى برنامج ، فإن نظام التشغيل يقوم بتحميل البرنامج فى الذاكره ..أين و كم مقطع سيترك للبرنامج ؟؟
فى الحقيقه ، كل برنامج يتم تشغيله على الأقل يأخذ 2 مقطع ، مقطع للشفره Code Segment يتم وضع عنوان هذا المقطع داخل CS مادام البرنامج يتم العمل داخله ، والمقطع الآخر يوضع به البيانات لذلك سمى ب Data Segment ويوضع عنوان هذا المقطع فى DS ،
كل برنامج يكون مكتوب به عدد المقاطع التى يحتاجها أولا ، هذا لخدمة البرامج الكبيرة و التى تكون حجمها أكبر من وضعها فى مقطع واحد ، يتم فعليا تحديد حجم البرنامج فى أوله عن طريق تحديد نوعه ما بين صغير ، كبير ، متوسط ، كبير جدا .

أنواع العنونه :-
-----------------
1 -
عنونه فعليه (حقيقيه) Phsical Addressing :-
-------------------------------------------------------------
وهى العنونه الحقيقيه التى يتم التعامل بها بين داخل الذاكره ، بمعنى لو أن الذاكره 128 ميجا ، فإنها ستكون مرتبه ترتيبا تصاعديا من المكان صفر إلى المكان 128 ميجا ،
نظام الهارد وير الفعلى على شريحة الذاكره يعمل بهذا النوع ( طبيعياً) .
مثال بالنظام السادس عشر ، على أساس الذاكره مثلا 1 ميجا ، فإنها بها مليون مكان يتم تحديدهم Decoding ب عشرين مكان ثنائى AF67B .

2 -
عنونه تخيليه Logical Addressing :-
----------------------------------------------------
وهو النوع الذى تكلمت عنه بأعلى ، الذاكره مقسمه إلى أقسام Segments و كل قسم به محتوياته من المكان Offset صفر إلى المكان 64 كيلو ، وهذا النظام يتم التعامل به من جانب البروسسور مع نظام التشغيل و البرامج الأخرى و من ثم يكون المعالج مسؤلأ على تحويل هذا العنوان إلى العنوان الفعلى عن طريق عمليه حسابيه بسيطه وهى عن طريق
[
أضرب عنوان المقطع فى 10 و من ثم أضيف عليه ال Offset = العنوان الفعلى ]
مثال : [A100 : 9C00] المكان الأول هو عنوان المقطع و الثانى هو ال Offset داخل هذا المقطع ، يتم التعامل بهذا النظام فعليا فى الأسمبلى و بهذه الطريقه بالظبط .

أنظمة عنونة وسائط التخزين المختلفه والوصول إلى القيم المستهدفه Operand (مسجلات و ذاكره و ... ) :-
-------------------------------------------------------------------------------------------------------------------
1 - Impiled Mode :- (
الصراحه الترجمه العربيه مخرفه معايا شويا ، نأسف لهذا العطل .. )
----------------------------
وهو لا يتم ذكر به العنوان و تكون التعليمه مفهومه للبروسسور بدون أى براميتارات إضافيه ،
مثال : HLT هذه التعليمه سنتعرض لها فى جزء التعليمات .

2 - Immediate Mode :-
--------------------------------
ويتم ذكر العنوان صراحاً به ،
مثال : ADD AX,1000B وهذه التعليمه ذكر بها القيمه صراحاً التى سيتم التعامل بها .

3 - Register mode :-
------------------------------
فى هذا النظام تكون القيمه المراد التعامل معها فى مسجل Register ما ، لذلك يتم ذكر إسم المسجل بجانب التعليمه .
مثال : MOV AX,BX وهنا سيتم التعامل مع المسجلان المذكوران .

4 - Direct memory mode :-
-----------------------------------------
وهنا يتم ذكر العنوان فى الذاكره الذى يحتوى القيمه المستهدفه .
مثال : ADD AX,[1000:200A] حيث أننا نكتب العنوان الذى يوجد به القيمه المستهدفه داخل التعليمه كما هو موضح .

5 - Indirect memory mode :-
-------------------------------------------
وهنا يكون عنوان القيمه فى الذاكره موجود بداخل مسجل و فيها يأخذ المعالج القيمه التى فى المسجل و تكون هى عنوان الذاكره الذى يحتوى على القيمه .
مثال : add BX,[SI] .

ملاحظه : المسجلات التى من الممكن إستخدامها فى هذا النظام 4 وهما BX , SI , BP , DI

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ




 

1 تعليمات الأسمبلى Assemply Instructions :-
-------------------------------------------------




تتكون التعليمه الواحدة في الأسمبلي من تمثيل بسيط بالأحرف الأنجليزيه يقابله بالأرقام تعليمة لغة آله ، تتكون كل تعليمة من ممايلي : أولاُ جزء الأمر وهو أمر يدل على نوع العملية المطلوبة مثل ADD (للجمع) ، الجزء الثاني هو الوسائط علماً بأن بعض التعليمات لايأخذ وسائط والجزء الآخر وسيطة واحدة فقط والبعض الآخر أكثر من ذلك ، تحدد هذه الوسائط الشئ الذي سيعمل عليه الأمر ،
فالأمر ADD لوحده عقيم لايدل على شئ لكن الأمر ADD AX,5 يدل على جمع الرقم 5 مع القيمة الموجودة في المسجل AX ويوضح المثال التالي بعض الأوامر


 

CODE

clc          ; فقط أمر بدون وسائط
dec ax     ;
وسيطة واحدة فقط
mov cx,dx;
وسيطتين



لاحظ أن أي نص في شفرة الأسمبلي يأتي بعد الفاصلة المنقوطة هو مجرد تعليق


الوسائط ممكن تكون عدة أنواع :-
-----------------------------------
1.
بيانات فورية (مباشرة) (أي ثابته) مثال : 10 / 30 / 'a'

2.
مسجل مثال : AX / EAX / BL

3.
موقع ذاكره (يتم تحديده عن طريق العنوان) مثال : [200] / [bx] / [100]

4.
متغير (وهو نفس السابق لكن بدل أن تحفظ أو تحسب العنوان يدوياً يقوم الأسمبلر بأستبدال المتغير برقم يدل على عنوانه ) مثال : count / VAR1 / INTVAL / STR1


مدخل الى الديبغر Debugge :-
------------------------------------
ها قد وصلنا الى واحد من أقوى البرامج المبيته في النظام فبواسطة اليبغ تستطيع عمل أشياء عجيبه وغريبه ، حسناً شغل الدوس وعند محث الأوامر أطبع debug ثم أنتر وستظهر لك علامه '-' ليل على أستعداد الديبغر على أستقبال أوامرك .

الأن دعنا نكتب هذا البرنامج الصغير



 

CODE

mov ax,2  ; نقل العدد 2 كمعلومة مباشرة الى المسجل أي-أكس
mov bx,3  ;
نقل العدد 3 كمعلومة مباشرة الى المسجل بي-اكس
add ax,bx ;
جمع أي-اكي مع بي-اكس مع وضع الجواب في أي-اكس / أي-اكس=أي-أكس + بي-أكس




كيف تقوم بأذخال هذا الكود :-
--------------------------------
1.
عند المحث '-' أدخل a100 أي أننا سنبدأ نكتب الكود من العنوان 100 ثم أضغط أنتر بالطبع
2.
الآن أدخل كل تعليميه ثم أضغط أنتر ومع نهاية التعليمية الأخيرة أضغط أنتر مرتين .

الأن قم بأدخال الرمز R ثم أنتر لترى حالة المسجلات
لاحظ أن المسجل AX يساوي صفر وسترى أيضاَ ظهور التعليميه MOV ax,0002 وهي التعليميه التي عليها الدور في التنفيذ وليس المعلومة المنفذه ، الآن قم بطباعة الرمز T ثم أنتر لتنفيذ التعليميه التي عليها الدور هنا هي MOV AX,0002 سترى الآن أن المسجل AX أصبح يساوي 2 وهذا مانتوقعه بالضبط وسترى أيضاً التعليميع التي عليها دور التنفيذ وهي MOV BX,0003 أدخل الرمز T ثم أنتر لتنفيذها لترى أن المسجل BX أصبح يساوي 3 وسترى أيضاً التعليميه التي عليها الدور في التنفيذ وهي ADD AX,BX قم بأدخال الرمز T لتنفيذها ولاحظ كيف أن المسجل AX أصبحت قيمته مجموع العددين 2+3 وهو خمسة بينما بقى المسجل BX يساوي 3 .

الآن بعدما عرفت كيف تكتب كود بسيط أخرج من الديبغر بالضغط على Q ثم أدخل مرة أخرى بكتابة الأمر Debug حتى تصفر المسجلات مرة أخرى أدخل التعليميه A100 ثم جرب تكتب كود من عندك ومع كل نهاية تعليميه أضغط أنتر وفي نهاية التعليميه الأخيرة أضغط أنتر مرتين
(
ملاحظة لترى شفرتك بلغة الآله والأسمبلي أدخل الرمز U ثم أنتر مباشرة بعد إدخال الكود وقبل إدخال الرمز R )
أضغط R ثم أنتر لترى المسجلات قبل تنفيذ أي عملية ولترى التعليميه التي عليها الدور في التنفيذ أضغط T ثم أنتر لتنفذ التعليميه وترى النتائج والتعليميه التي بعدها وهكذا ولاتنسى أذا أردت أن تدخل كود جديد الخروج والعودة مرة أخرى الى الديبغر لتصفر المسجلات والذاكره

 

 

 

 


Copyright © www.kettaneh.net