|
أصبحنا فى اليوم
الرابع و لم ندخل بعد فى اللغه نفسها ، يبدو أن الموضوع ليس كما
نتصور
.... ،،،
اليوم سنفتح
باب اللغه إن شاء الله و ندخلها و
لكن بخطوات
قليله جدا
، هيا جهزوا أنفسكم و الباب يحتاج مفتاح
.!!
سنتناول
الأتى فى هذا
الدرس :-
---------------------------------
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
ثم أنتر لتنفذ
التعليميه
وترى النتائج والتعليميه التي بعدها وهكذا ولاتنسى أذا أردت أن تدخل كود
جديد الخروج
والعودة مرة أخرى الى الديبغر لتصفر المسجلات والذاكره
|