منتدى المسلمون لكل المسلمين

يا جماعة ياريت نزود من مشاركاتنا فى المنتدى سواء بمواضيع او بردود علشان نزود من رتبة المنتدى فى محركات البحث
بحـث
 
 

نتائج البحث
 


Rechercher بحث متقدم

المواضيع الأخيرة
» بيان من حزب التحرير – سوريا إلى علماء المسلمين
الخميس فبراير 16, 2012 6:25 pm من طرف محمد صالح

» أهلاً بالعضوة الجديدة مسلمة
الإثنين مارس 21, 2011 1:06 am من طرف Mostafa.M

» لماذا نرسم الخرائط والشمال نحو الأعلى؟!
الجمعة مارس 18, 2011 10:57 pm من طرف Mostafa.M

» قل نعم للتعديلات الدستورية
الجمعة مارس 18, 2011 10:47 pm من طرف Mostafa.M

» الأمن الغذائي للمسلمين
الجمعة مارس 18, 2011 10:42 pm من طرف Mostafa.M

» أردوغان...كفى...إرحمنا أرجوك!؟
الجمعة مارس 18, 2011 10:41 pm من طرف Mostafa.M

» طوف وشوف فى اليمن الشقيق
الجمعة مارس 18, 2011 10:39 pm من طرف Mostafa.M

»  تحقيق التوازن
السبت سبتمبر 11, 2010 5:48 pm من طرف Mostafa.M

» ساعة الأرض اقتربت!
الثلاثاء أغسطس 17, 2010 3:14 pm من طرف elzedy83

يوليو 2018
الإثنينالثلاثاءالأربعاءالخميسالجمعةالسبتالأحد
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

اليومية اليومية

تصويت
تدفق ال RSS

Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 


احصائيات
هذا المنتدى يتوفر على 94 عُضو.
آخر عُضو مُسجل هو معمري بشير فمرحباً به.

أعضاؤنا قدموا 1527 مساهمة في هذا المنتدى في 716 موضوع

أهلا وسهلا بك زائرنا الكريم, أنت لم تقم بتسجيل الدخول بعد! يشرفنا أن تقوم بالدخول أو التسجيل إذا رغبت بالمشاركة في المنتدى

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

اذهب الى الأسفل  رسالة [صفحة 1 من اصل 1]

hamo81

avatar
المشرف العام
المشرف العام
اليوم القبل الأول

هذا الدرس هو أساس لغة الأسمبلى و تعتبر المواضيع التى ستناقش به هى أساس لغةالأسمبلى خاصا و أساس لغات الكمبيوتر عاماً ،،سنبدأ بإذن الله و سنناقش المواضيع الأتيه :-
---------------------------------------------


- ما هو 0 و 1 (اللغه الثنائيه) ؟
- ما هى حقيقة وحداتالتخزين داخل الكمبيوتر (المسجلات و الذاكره) ؟
- كيف يتم تناقل البيانات بينهذه الوحدات و بعضها البعض و بينها و بين المعالج ؟
- مما يتركب المعالج ؟؟
- البيانات و أنواعها ،،
- كيف تتم معالجة البرامج و تعليماتها؟؟
- كيف يقومالمعالج بتنفيذ تعليمه ما ؟

ملاحظه : لأهمية هذه الموضوعاتيرجى الرجوع إلى الدروس السابقه و إلى المصادر المتاحه للأسمبلى و لبنية المعالجاتو تركيبها Computer organization and structure بسم الله،،


----------------------------------------------------------------------------------------------------------------------------------------



ما هى حقيقة ال 0 و 1 (للغه الثنائيه) ؟؟


هذه القيم تعبر عن معنى كلمة يوجد و لا يوجد - صح أم خطأ - أسود أم أبيض - و تعبر عنها فى علوم الإلكترونيات بوجود جهد كهربى علىسلك ما أم لا يوجد ، بمعنى هناك سلك واحد نحاس مثلا و عليه فرق جهد بالنسبه للأرضى، فنقول هنا أن هذا السلك به فولت و يحمل القيمه 1 ، هذا السلك نسميه فىالإلكترونيات (بت) ، 8 اسلاك بجانب بعضهم نطلق عليهم (بايت) .


أما فىحالة عدم وجود به فولت فإنه يمثل القيمه 0بهذه الطريقه يمكن لمجموعهمن الأسلاك متجاوره و منعزله عن بعضها البعض أن تمثل قيمه مثلا 10101 وهذا يعبر عنخمس أسلاك الأول به فولت و الثانى لا يوجد به و الثالث يوجد به و الرابع لا يوجد بهو الخامس يوجد به فولت .


طيب فكر معى أخى ما هى إحتمالات هذه الأسلاك أنتحمل قيم (بمعنى ما هو عدد الإحتمالات الغير متكرره التى يمك أن تمثلها هذه السلاكالخمسه ؟؟)
سنجد أنها 32 إحتمال من 00000 إلى 11111 و هو ما يعبر عن 2 ^ 5

(أى إحتمال قيم السلك الواحد ^ عدد الأسلاك = إحتمال القيم علىكل السلاك)


مثال بسيط ، بالنظام العشرى الطبيعى الذى نعمل بهجميعا (الرقم الواحد إحتماله أن يكون 10 قيم من 0 إلى 9 ) فمثلا لو عندنا رقم مكونمن 5 أماكن فما هى عدد الأرقام التى يمكن أن تمثل بهذه الأماكن الخمسه - على حسبالقانون السابق نجد أنها (10^5 = 100000 إحتمال) (من 00000 إلى 99999) ، فعلاالقانون صحيح ....

من هذا المثال السابق يتبين لنا طريقة حساب عدد القيمالتى يمكن أن يمثلها مجموعه من الأماكن (الأسلاك) فى أى نظام عددى (ونحن نتحدث هناعن النظام الثنائى) .


تدريب : ما هو عدد القيم التى يمكن تمثيلهاب8 أسلاك (بايت) و 16 سلك (2 بايت) و 32 سلك (4 بايت)
الإجابه :

8 بت >>> 2 ^ 8 = 256 إحتمال
16بت >>> 2 ^ 16 = 65536 إحتمال
32 بت >>> 2 ^ 32 = 4294967296 إحتمال (وهو ما يمثل 4جيجا من وحدات الكمبيوتر)

باقى أن نذكر أن هذا النظام هو المتبع فى جميعالأجهزه الإلكترونيه و الكمبيوتريه و الألات الحاسبه التى يطلق عليها (أجهزه رقميه) Digital Divices




----------------------------------------------------------------------------------------------------------------------------------------



- ما هى حقيقة وحدات التخزين داخلالكمبيوتر (المسجلات و الذاكره) ؟


وحدات التخزين فىالحقيقه تعتبر مجموعه من السلاك المتجاوره مع بعضهم و منعزلين عن بعضهم ، معإمكانية أن كل قيمه على أى سلك يمكن تغييرها من 1 إلى 0أنظر أخىالكريم إلى هذا المثال :-
----------------------------------

أنظرداخل جهازك ، ستجد أن الهارد ديسك Hard Disk موصل بكابل بيانات Data Cable وهو مكونمن 40 سلك 40 Bin فى أغلب الأحيان ، هذه الأسلاك هى المسؤاله عن نقل البيانات التىتجدها أمامك على الشاشه الأن من الهارد ديسك إلى المعالج عبر مسارات اللوحه الأم .


لو تسنى لك النظر إلى اللوحه الأم Mother Board من الخلف ستجد عدةمسارات متوازيه و بجانب بعضها تصل بين الذاكره Ram وبين المعالج Processor
تتفقجميع وحدات التخزين فى قدرتها على تمثيل 0 أو 1 و هذا على حسب حجم الوحدهوتختلف وحدات التخزين فى طبيعة هذه القدرهونناقش هذا سويا هنا،
------------------------

المسجلات Registers :- تتكون من مجموعاتمنطقيه بجانب بعضها يمكن للمجموعه الواحده تمثيل بت ( 0 أو 1) (فولت أو لا فولت) وتطلق على المجموعه Flip Flop وهو مركب من وحدات منطقيه اصغر Logic Gates يستطيعالإحتفاظ بالقيم التى بداخله طوال تغذيته بالفولت ،ماذا تعنى كلمة (طوالتغذيته بالفولت) ؟؟تعنى أن أى مكون كهربى داخل أى جهاز يحتاج لمصدرأساسى للكهرباء وهذا ما يمكنه من التمييز بين 0 أو 1 ، بمعنى أن المسجل يكون موصلبهذا المصدر الأساسى VCC حتى لو ان القيمه التى تحملها أطرافه 0000000 و هذاوحدات الذاكره Ram :-بدون التوغل فى تفاصيل - تتركب من مكوناتشبيهه بالمسجلات أو بمكثفات و لها أنواع عده و لكنها هذه الأنواع التى تحتاج إلىمصدر كهربى اساسى للحفاظ على القيم داخلها كما هو الحال بالمسجلات .

الاقراص الصلبه Hard Disks :-يمكن تمثيل البيانات عليها على هيئةسطوح قابله للمغنطه ، كل سطح مكون من مسارات ، كا مسار مكون من قطع ، كل قطع مكونمن وحدات صغيره فأصغر ، أصغر وحده هى النقطه و هذه النقطه يمكن تغيير خاصيتهاالمغناطيسيه من (توجد مغنطه أم لا يوجد) و هذا ما يهمنا أنه يمكن تمثيل الوحداتالثنائيه بهذه الطريقه ، و الجديدر بالذكر هنا أن وحدات التخزين التى تعتمد على هذهالطريقه لا تحتاج إلى مصدر كهربى للحفاظ على البيانات التى على سطوحهاطيب سؤال :لماذا إذن نوصلها بكابل طاقه Power Source عند تشغيلها ،الإجابه : لا ننسى أخوتى الأعزاء أنه يوجد موتور كهربى بالداخل و أجزاءميكانيكيه أخرى تحتاج بطبيعتها إلى المصدر الكهربى بالإضافه إلى الوحدات المنطقيه والمسجلات التى تنقل البيانات من و إلى كابل البيانات Data Cables .

نعودللمسجلات ثانيا و هى أهم وحده نتعامل معها فى الأسمبلى ،تكون المسجلاتموصله ببعضها و بعض و تصل مباشرا بالمسار الرئيسى للبيانات و المسار الرئيسى للتحكم Data Bus and Control Bus .
تعتبر مسجلات المعالج AX , BX , ....... هى من أهممكونات المعالج ،معظم المسجلات تحتوى - بالإضافه إلى وحدات تخزين البياناتداخلها Flip Flops - على بينات Bins للتحكم بالبيانات من و إليها فمثلا :-

- تحتوى على بن bin للقراءه
- تحتوى علىبن للكتابه
- تحتوى على بن تصفيير ( جعل القيمه التى يحملها صفر)
- تحتوى علىبن ذياده ( ذيادة القيمه الى بداخلها بمقدار 1 )

وهكذا ..... و تتيحبنات التحكم هذه للمعالج التحكم بالبيانات الخاصه بكل مسجل على حده ، و سنرى هذهالإمكانيه فى موضوع كيفية نقل البيانات داخل الكمبيوتر .

الجدير بالذكر هناأيضا ، أن أى وحدة تخزين لها بنات تحكم مشابهه Control Bins بما فيهم الذاكره والمسجلات و القرصات الصلبه و المرنه و .....


----------------------------------------------------------------------------------------------------------------------------------------



- كيف يتم تناقل البيانات بين هذه الوحدات و بعضها البعض وبينها و بين المعالج ؟

يوجد على اللوحه الأمثلاث مسارات رئيسيه و لا يخلوا منها جهاز كمبيوتر منذ أخترع الكمبيوتر إلى الأنوهما :-


1 - Data Bus
وهو المسار الذى يتم نقل البياناتعليه و يختلف عرض هذا المسار من معالج إلى الأخر (أو بمعنى أصح وأدق - من جيل إلىآخر) ، الجدير بالذكر هنا هو أن المسار يتكون من عدة أسلاك بجانب بعضها البعض و هناتستخدم لنقل البيانات من و إلى مكونات الكمبيوتر (المعالج - الذاكره - أجهزةالإخراج و الإدخال ) ، يكون كل من هذه المكونات موصل مباشرا بهذا المسار،عرض هذا المسار دائما يتساوى مع عرض مسجلات المعالج و عرض الذاكره(بمعنى أن الأجهزه القديمه 16 بت ، كان عرض كل مسجل 16 بت و عرض الذاكره 16 بت وعرضمسار البيانات Data Bus 16 بت أيضا ، وبنفس الطريقه مع 32 بت و 64 بت الذى ظهرقريبا)


2 - Address Bus

هذا المسار مسؤول على حمل قيمالعناوين و هو يمثل (الورقه التى تكون بيدك عندما تذهب لتبحث عن بيت الرجل الذىيريده والدك و كتب لك العنوان بهذه الورقه)

يتصل بهذا المسار المعالج (الذىيكتب العناوين) ووحدات التخزين القابله للعنونه (الذاكره و المسجلات و أجهزةالإدخال و الإخراج )


الجدير بالذكر هو أن عرض هذا المسار يحدد كميةالذاكره التى يمكن ان يدعمها النظام ، فمثلا فى المعالجات 8086 كان عرض هذا المسار 20 بت ، إذن عدد الإحتمالات التى يمكن أن تمثل على هذا العدد و هو يعبر عن الأماكنالتى يمكن عنونتها بإستخدامه = 2 ^ 20 = 1 ميجا ذاكرهتدريب : ما هواقصى حجم ذاكره يمكن أن يدعمه جهازك الحالى إذا علمت أن عرض هذا المسار 32 بت؟؟؟

3 - Control Bus

وهو المسار التى ترسل عليه إشارات التحكمالتى تكلمنا عليها فى الجزء الثانى من هذا الدرس ،،، ويكون هذا المسار متصل به كلمكونات الكمبيوتر و ذلك ليمكن التحكم بالبيانات من جانب المعالج ،،إذنكيف يمكن نقل البيانات ،،
-------------------------------

لوإفترضنا ان المعالج ينفذ التعليمه MOV AX,[1000] :والتى معناها "إنقل محتوياتالمكان بالذاكره المعنون ب 1000 داخل مقطع البيانات الحالى إلى المسجل AX
يقومالمعالج بحساب العنوان الحقيقى من العنوان 1000 فى التعليمه و عنوان المقطع (راجعجزء العنونه فى دروس الأسمبلى) و يقوم بوضع الناتج فى مسجل العناوين Address Register وهو المسجل المسؤول عن العناوين ، ثم يرسل المعالج إشارة قراءه من الذاكره، ستقوم دوائر البحث فى الذاكره بالبحث عن هذا العنوان المسجل فى مسجل الذاكره AR ومن ثم تحميل ما يحتويه هذا المكان على مسار البيانات Data Bus ، فى نفس الوقت يكونالمعالج قد أرسل رسالة كتابه فى المسجل AX ومن ثم تنتقل البيانات التى على مسارالداتا (والتى خرجت من الاذكره لتوها) إلى المسجل و بهذا تكون التعليمه تم تنفيذها
وبهذه الطريقه يتم نقل البيانات جميعها عبر مكونات الكمبيوتر ، ونلخص هذا فى الخطوات الأتيه :-

1-تحديد عنوان مكان البيانات المستخدمهفى التعليمه الحاليه .
2 - تحديد المكان الذى سيتم إرسال البيانات له و من ثمفتح بن الكتابه به .
3 - تكون البيانات متاحه على مسار البيانات والتى ستنتقلإلى المكون المفتوح لديه بن الكتابه حاليا.
يقوم المعالج بالتحكم فى مسار هذهالإشارات و التحكم بها و موازنة كل خطوه من الخطوات السابقه Syncronization لينتجلك ما تعمل عليه الأن


----------------------------------------------------------------------------------------------------------------------------------------


.

- مما يتركب المعالج ؟؟

يتركبالمعالج من الأتى :-
---------------------------


- المسجلات
- وحدة الحساب و المنطق
- المسارات المختلفهبداخله و التى تحدثنا عنها سابقا
- باقى المكونات الأخرى ....


----------------------------------------------------------------------------------------------------------------------------------------


البيانات و أنواعها ،،،



- كما لابدأن تعلم أخى/أختى الكريم/الكريمهأن كل ما هو مخزن على وحدات التخزين المختلفه فى الحاسبتكون محزنه على هيئة 0 و 1 و تكون فيما بينها مجموعه من (البيانات والتعليمات)


- فمثلا ، ملفات ال txt تحتوى على بيانات ، ملفات ال doc تحتوى على بيانات ، ملفات exe تحتوى على تعليمات و بيانات ، ملفات لل dll تحتوى علىتعليمات فقط و هكذا


- تتواجد التعليمات عادة فى الملفات التنفيذيه ومكتبات التشغيل (exe , dll , ocx , com , bin)


- يمكن التفريق بينالبيانات و التعليمات بإستخدام الحقائق الأتيه :-
+ الملفات التشغيليه تحتوى على أكواد تعليمات معلومه لدىالمعالج و نظام المعالجه ككل .
+ الملفات التشغيليه لها إمتدادات معروفه (ocx , dll , exe , ....) .
+ الملفات التنفيذيه لها تركيب معين ، كل البرامج العاملهأمامك الأن لها نفس التركيب ،ملحوظه :لذيادة المعرفه حول تركيب الملفاتالتنفيذيه من الأنواع (exe , com) ، يرجى قراءة دروس Xacker فى موضوع صناعةاليروسات.
+ فيما عدا ذلك ، يعتبره نظام التشغيل بيانات .

مثال : -برنامجبسيط يقوم بطباعة رسالة hello على الشاشه ومن ثم ينتظر لأن يضغط المستخدم على حرفمن لوحة المفاتيح "Press Any Key To Exit" لينتهى البرنامج ،

-------- التحليل ---------
- هذا البرنامج مكون من التعليمات الأتيه :

+ تحضير لبدأ البرنامج و ذلك بتحميل مسجلالمقطع بعنوان مقطع الكود للبرنامج .
+ تعليمات الطباعه على الشاشه .
+ تعليمات إنتظار حرف من وحدة الإدخال (لوحة المفاتيح KeyBoard) .

- ويحتوى على البيانات الأتيه :

+ النص "Hello" .
+ النص "Press Any Key To Exit"

-------- نهاية التحليل ---------

- البياناتممكن أن تكون صور ، ألوان ، أصوات ، نصوص ، نصوص مشكله ، بيانات مبهمه ......
- يمكن التفريق بين أنواع البيانات المختلفه (بالنسبه لنظام التشغيل) :-

+ إمتداد الملف نفسه الذى يحتوى على البيانات .
+ تركيبالملف نفسه الذى يحتوى على البيانات .
+ أن تكون البيانات التى بداخل الملف لهاصيغ مفهومه للبرنامج المشغل لها و إلا سيقوم بإضهار رسالةخطأ

للمذيد عن تركيب الملفات ، يرجى زيارة المواقع الأتيه :-

http://www.onicos.com/staff/iz/formats
http://whatis.techtarget.com/fileFormatA
http://myfileformats.com/


- لا يمكن للبيانات أنيكون لها أهميه إلا بوجود التعليمات (البرامج المشغله) .
- لا يمكن للبرامج أنتكون لها فائده إلا بتعاملها و معالجتها للبيانات المختلفه .
- أى برنامج يتكونمن جزء بيانات Data Segment وجزء تعليمات Code Segment .




CODE
Each program must consist from some code Instructions and some data blocks





-----------------------------------------------------------------------------------------------------------------------


كيف تتم معالجة البرامج وتعليماتها؟؟


- نظام التشغيل هو المسؤول عن تحضيرالملفات التنفيذيه و إختبار صحة تركيبها و من ثم تكون البرامج جاهزه للتحميل علىالذاكره .

- لا يتعامل المعالج مع الأقراص الصلبه مباشراً ، فالمعالج لايعرف إلا الذاكره و المسارات و المسجلات وفقط ،

- نظام التشغيل المسؤول عنتحميل البرامج فى الذاكره و إصدار الأمر للمعالج بأن يبدأ بتنفيذ تعليمات البرنامج .

- علمتم أخوتى من القسم السابق (البيانات و أنواعها) فإن كل برنامج يتكونمن تعليمات و بيانات ، وكل نوع من الملفات له الصيغه المعروفه من جانب نظام التشغيل، حيث يقوم نظام التشغيل بتحميل هذه التعليمات و البيانات فى الذاكره ومن ثم يسلمالمعالج زمام الأمور لتنفيذ هذه التعليمات .

- يحتوى المعالج على مسجل مقطع، يكتب به عنوان مقطع الكود الحالى بالذاكره والذى قام نظام التشغيل بتحميلها فيه .

- يحتوى المعالج على مسجل مقطع يحتوى بداخله على عنوان مقطع البياناتالحلى فى الذاكره و الذى قام نظام التشغيل بتحميله به .

- يحتوى المعالج علىمسجل يوضع به عنوان التعليمه بالذاكره التى عليها الدور فى التنفيذ .

خطوات تنفيذ أى برنامج :-
-----------------------------

1 - يتأكد نظام التشغيل منأن تركيبة الملف التنفيذى سليمه و معروفه (ملفات ال exe مثلا تركيبها غير معروف لدىنظام التشغيل لينوكس لذا لا يستطيع التعامل معها ولا تشغيلها إلا بإضافة مفسرات لها )

2 - يقوم نظام التشغيل بقراءة نوع الملف من ناحيت إحتياجاته للذاكره (توجد عدة أنواع تختلف فى عدد مقاطع الداتا و الكود الذى سيحتاج إليها البرنامج ويكون المبرمج مسؤول أو لغة البرمجه العالية المستوى مسؤوله عن كتابة هذه الأنواع فىأول البرنامج) - إنتظر دروس الأسمبلى القادمه ، سوف اشرح هذا الجزء برمجيا بالتفصيل

3 - يقوم نظام التشغيل بالبحث لديه فى الذاكره على المقاطع الفارغه ، فإنلم يجد مساحه كافيه لتحميل البرنامج و بياناته ، فإنه يصدر رسالة خطأ .

4 - يقوم نظام التشغييل بتحميل تعليمات البرنامج و بياناته (لو وجدوا فى ملف واحد - بمعنى أنه يمكن لبرنامج أن يضع بياناته الأساسيه بجانبه فى ملف منفصل و من ثم يقومالبرنامج نفسه بطلب تحميلها بعد ذلك) .

5 - تحميل كل من مسجلات المقاطع ومسجل التعليمات Instruction Register IR بالقيم المطلوبه ، والجدير بالذكر هنا أنمسجل التعليمات يتم تصفيره فى حالة بدأ تشغيل برنامج جديد وذلك لأن أو تعليمه فىالبرنامج يجب أن توضع فى المكان صفر من مقطع الكود بالذاكره .

6 - يبدأالمعالج بأخذ أول تعليمه والمقابله للعنوان صفر داخل مقطع الكود و يقوم بتنفيذهاومن ثم يزيد قيمة مسجل التعليمات بواحد (IR = IR +1) وذلك للتعليمه الأتيه وهكذاحتى يصل إلى تعليمة التى تسلم نظام التشغيل التحكم ثانياً .

7 - الجديربالذكر أن نظم التشغيل الحديثه لا تترك للمعالج (البرنامج) السيطره الكامله علىالجهاز و مكوناته و لكن تختبر حالة البرنامج كل وقت معين و ذلك للتأكد من أنه يعملبحاله جيده و لا يسبب أخطاء أو تلف للعتاد (تتذكر أنه فى الدوس لو قمت بكتابةبرنامج صغير يدخل فى دوره لا نهائيه Infinite Loop و قمت بتشغيله على الدوس ، لنتسطيع أن توقف البرنامج إلا بعمل إعادة تحميل للجهاز كله Restart ) .

8 - معظم نظم التشغيل الحديثه تقوم بتغيير تعليمات البرنامج و ذلك لجماية مكونات الجهازالحقيقيه من الوصول المباشر لها .


كيف يقوم المعالج بتنفيذ تعليمه ما؟


- كل تعليمه لها تركيب ثنائى مختلف عن الباقى ، ومنثم يستطيع المعالج التمييز بين كل تعليمه و أخرى .

- يدخل التركيب الثنائىعلى المعالج لتفسيرها ومن ثم تنفيذها مباشراً ،

- مثال :-دعنا نتخيل أن القيمه (01110) هى المقابله للتعليمه ADD AX,BX ،
+ إذن عند وصول القيمه (01110) إلى المعالج للتنفيذ ، فإن مكونات المعالجالمنطقيه تقوم بإدخال محتويات المسجل BX و المسجل AX على وحدة الحساب والمنطق

+ و من ثم تشغيل Activate عملية الجمع داخل وحدة الحساب و المنطق ALU

+ تكون وحدة الحساب و المنطق موصله بمسار البيانات ، فيتم كتابة الناتج علىالمسار ،

+ ومن ثم فتح بن Bin الكتابه على المسجل AX و بهذا يكون تم إنهاءتنفيذ هذه التعليمه .

+ وبنفس الطريقه يتم تنفيذ كل التعليمات و لكن النظرهالسابقه بسيطه جدا عن الواقع.

*************************************


_________________



معاينة صفحة البيانات الشخصي للعضو

hamo81

avatar
المشرف العام
المشرف العام
اليوم الأول

ماهي الأسمبلي :-
-------------------
في قديم الزمانأيام بدايات الكمبيوتر كانت برمجة الكمبيوتر تتم بواسطة لغة الأله Machine Language أختصاراً ML ( لغة الآله هي اللغه التي تفهمها الآله مباشرة دون الحاجة الى تفسيروهي تخزن بصورة ثنائبة [ تركيبة من الأصفار والوحايد] في الذاكرة على شكل تعليماتووسائط تأخذ كل واحد منها عادة مقدار 8بت=ا بايت ) وكان هذا النوع من البرمجة صعبجداً عندها طور المبرمجون أول لغة برمجة وهذه اللغه فكرتها بسيطة جداً حيث أنه بدلأن تكتب رموز الآله يتم كتابة كلمات مختصره تدل على نوع العمليه مثال ( MOV,ADD,CMP ) ثم ببرنامج بسيط يتم تحويل هذه الشفرة الى لغة الآله بأستخدام تخطيطواحد-الى-واحد أي أن كل سطر أو عبارة في الأسمبلي تحول الى تعليمة واحدة مقابله فيلغة الآله (مثال بدل كتابة 011000000000101 يتم كتابة mov al,5 ) يعرف البرنامجالذي يقوم بعملية التحويل بالأسمبلر Assembler ، علماً بأن هناك عدة أنواع منالأسمبلر كل نوع يختص بتقنية معينة وبعائلة معينه من المعالجات
ونحن هنا بصددتعلم البرمجة بالأسمبلي للمعالجات المبنية على تقنية IBM-PC والمنتجة من شركة أنتلوهي العائلة 86×80 ويرمز لها أختصاراً X86 وهي تضم :
( 8086 / 8088 / 80186 / 80286 ) لمعالجات ال 16 بت و ( 80386 / 80486 / 80586=بنتنيوم1 / 80686=بنتنيوم2 / 80786=بنتنيوم3 / 80886=بنتنيوم4 ) لمعالجات ال 32 بت وسوف أتطرق في دروس متقدمةالى المعالج أتنيوم 64 بت المبني بتقنية جديده كلياً لمن يرغب بمعرفة مسبقة لهذاالمعالج الجديد كذلك سوف أتطرق بأذن الله الى الكروس أسمبلر وهي مجموعة برامج خاصةمصممه للتحويل من لغة أسمبلي لعائلة معالجات معينة الى عائله أخرى .

تعريفلغة الأسمبلي

الأسمبلي هي لغة برمجة تتكون من سلسلة من التعليمات المتتابعةكل تعليمة فيها تحول الى تعليمة مقابلة بلغة الآله .



تعريف الأسمبلر :-
-----------------
الأسمبلر هو برنامج يقوم بتحويل التعليمات المكتوبةبلأسمبلي الى لغة الآله .


لماذا أريد أستخدام الأسمبلي :-
---------------------------------
بتعلمك لغة الأسمبلي فأنك تكشف النقابعن الأسرار المختفيه وراء الكمبيوتر وتصبح قادراً على الفهم تماماً كيف يعملالمعالج وكيف يعمل البرنامج وبذلك تزيد خبرتك كمبرمج وبالطبع فأن الأسمبلي أقوى مناللغات العالية المستوى في التعامل مع العتاد وتعطيك مرونة عالية وقدرة وصول الىأشياء لم تكن تستطيع الوصول اليها من قبل ، كذلك هناك نوعيات من البرامج لايمكن الابرمجتها بالأسمبلي مثل الدرايفات(سواقات) الأجهزه ، كذلك فأن الأسمبلي يعطيط برامجسريعة جداً ، وبالطبع فأن بناء برنامج متطور بالأسمبلي أشبه بحفر حفرة بواسطةالملعقه فالبرغم أنك تحفر الا أنك أنتاجيتك قليله ولكن من المحبذ جداً برمجة بعضالدوال و الأحزاء من البرامج بالأسمبلي وبقية البرنامج بواسطة لغة عالية المستوىمثل السي++ .


***********************


_________________



معاينة صفحة البيانات الشخصي للعضو

hamo81

avatar
المشرف العام
المشرف العام
الدرس الثاني

كيان الحاسوب الصلب :-
---------------------------
يتألف الحاسوب بشكل أساسي مناللوحة الأم Mother Board والمعالج Microprocessor وذاكرة القرأة-فقط ROM=Read-Only Memory وذاكرة الوصل العشوائي=الرام RAM=Random-Access Memory ووحدة التغذية Power Supply والمنافذ التوسعية Expansion Slots مثل فتحات توصيل الكروت ( كروت الشاشه والصوت و ما إلى ذلك ) .

المعالج : -
--------------
يمثل المعالج عقلالحاسوب وهي الوحدة المسؤله عن القيام بأدارة الحاسوب والقيام بالعمليات الرياضيةوالمنطقية ونحن هنا كما أوضحت ندرس معالجات أنتل من العائلة X86 لأنها العائلةالأشهر والأكثر أستخداماً بين الناس .

وحدة التنفيذ ووحدة ملاءمة الممر Execution Unit And Bus Interface Unit :-
-------------------------------------------------------------------------------------------------
يتألفالمعالج من وحدتين هما وحدة التنفيذ Execution Unit أختصاراً EU ومهمتها تنفيذالتعليمات ،ووحدة ملاءمة الممر Bus Interface Unit أختصاراً BIU ومهمتها نقلالبيانات والمعطيات الى وحدة التنفيذ . تحتوي وحدة التنفيذ على وحدة الحساب والمنطق Arithmetic And Logic Unit أختصاراً ALU ووحدة التحكم Control Unit أختصاراً CU ومجموعة من المسجلات.

تتألف وحدة ملائمة الممر من وحدة التحكم بالممر Bus Control Unit ومسجلات المقاطع Segment Registers ورتل=كيو التعليمات Instruction Queue (الرتل أو الكيو هو نوع من أدارة الذاكرة تكون فيه المعلومة الداخلة أولاخارجة أولاًً FIFO=First In First Out ).

وتقوم وحدة ملاءمة الممر بعملياتالتحكم بالممر ونقل المعطيات بين كل من وحدة التنفيذ والذاكرة وأجهزة الأدخالوالأخراج الخارجية، كما تقوم مسجلات المقاطع بعملية التحكم في عنونة الذاكرة .

تضع وحدة ملاءمة الممر تضع التعليمات في رتلها المخصص لها في وحدة التنفيذبعد أن تقوم بجلبها من الذاكرة . يخصص رتل التعليمات لوضع التعليمات فيه بعد جلبهامن الذاكرة بواسطة وحدة ملاءمة الممر ، ولذلك يوجد دائماً رتل من التعليمات جاهزهلتنفيذها من قبل وحدة التنفيذ . تعمل وحدة التنفيذ ووحدة ملاءمة الممر على التوازي (في نفس الوقت) ، بينما تحتقظ وحدة ملاءمة الممر بخطوة نحو الأمام، فعندما تقوموحدة التنفيذ بتنفيذ تعليمة ما ، تعمل وحدة ملاءمة الممر أما على جلب تعليمة منالذاكرة ووضعها في رتل التعليمات لكي تنتظر دورها في التنفيذ ، أو على جلب معطياتمن الذاكرة أو أحد أجهزة الأدخال أو الأخراج . وخلافاً للطريقة التسلسلية فيالمعالجة فأن هذه العملية تحقق حدوث عمليتي الجلب fetching التنفيذ execution فيوقت واحد الأمر الذي يزيد بدورة من سرعة المعالج .

ذاكرة القرأة-فقط ROM = Read-Only Memory :-
---------------------------------------------------------------
وهيعبارة عن شريحة دائرة متكاملة IC تحوي على ذاكرة فيها بيانات غير قابلة لأعادةالكتابة عليها (أفتراضياً - شرائح ال ROM الحديثة يمكن إعادة الكتابة عليها بطرقمختلفة ) ، تحتوي هذه الذاكرة على برنامج ال BIOS=Basic Input Output System أونظام الأدخال والأخراج الأساسي، ولايمكن للمعالج القرأة من هذه الذاكرة مباشرة ولكنأول شئ يفعل المعالج عند تشغيله في عملية الأستنهاض هي تحميل البيانات الموجودة فيالروم ونقلها في الرام أو بالأحرى الى القسم الأخير من الرام ذا العنوان الأكبر . تتجلى فائدة ال BIOS في القيام بعملية الفحص الذاتي عند الأستنهاض POST=Power On Self Test بالأضافة الى تحميل برنامج محمل نظام التشغيل بالأضافة الى توفير دوالومقاطعات قياسية في ذاكرة الرام تستطيع أن تستخدمها البرامج للرسم على الشاشة مثلاًأو التعامل مع لوحة المفاتيح أو القرأة والكتابة من والى القرص الصلب .

ذاكرة الوصول العشوائي RAM = Random Access Memory :-
-------------------------------------------------------------------------------
هذهالذاكرة مهمة جداً حيث أن أي برنامج لايمكن أن يعمل الا اذا حمل الى هذه الذاكرةكذلك فهي تستخدم لحفظ المتغيرات وحفظ برامج النظام الأساسية ومنها جدوال المقاطعاتوالمقاطعات أنفسها والرويتنات الفرعية ...... الخ ولايتم أستخدام القرص الصلب لحفظمثل هذه المعلومات لأن وقت الوصول فيه أبطأ بكثير من ذاكرة الرام (ولو أن القرصالصلب يستخدم في توفير ذاكرة أفتراضية عن طريق القيام بعمليات مبادلة للصفحات معذاكرة الرام) ، وبالطبع فأن هذه الذاكرة يمكن الكتابة اليها أو القرأة منها عن طريقعنونتها .
فبأستخدام العنوان يمكننا أن نصل الى مكان محدد في الذاكرة لنعمل عليهكل عمليات التحرير المطلوبة .


المقدمه السابقه ستعتقد أنها كلام نظرىوغير مفيد و لكن لتعلم أخى أنه هو أساس لغة الأسمبلى بل أساس الحاسب ككل ولو أنكأردت أن تفهم حقيقة التعامل داخل الكمبيوتر وحلقة الوصل بين البرامج والأنظمه التىنعمل عليها من جهه و العتاد من جهه أخرى فعليك الإنتباه له و التأكد التام من أنكإستوعبته جيدا وفهمت كل حرف به ،

--------------------------------------------------------------------------------------------------------------------------


تمثيل الأعداد والحروف
-------------------------
قد تتسائل ما علاقة تمثيلالبيانات والعد الثنائي بالأسمبلي ؟ حسناً كما وضحت من قبل فأن الأسمبلي هي لغةقريبة جداً من لغة الآله وهي لغه منخفضة المستوى تتعامل مع العتاد والمعالح بصورةمباشرة ولكي نحقق فهماً أوسع لهذه اللغه يجب أن نفهم بعض الأشياء المهمة جداً فيبنية المعالج .


العد الثنائي :-
----------------
يتم تمثيلالشفرات والبيانات في ذاكرة الكمبيوتر كتواليف من الشحنات الكهربائية تأخذ قيمتينالأولى وهي وجود الشحنة ويرمز لها ب ON أو صحيح TRUE أو ‘1’ والأخرى وهي غيابالشحنه ويركز لها ب OFF أو خطأ FALSE أو ‘0’ ، ووجود الشحنة يكون عادة بين 4.5 الى 5.5 فولت ( المعالجات الحديثه بين 2.5 الى 3.5 فولت ) وغياب الشحنة يكون بين +0.5فولت و -0.5فولت .

وحدات الذاكره الأساسيه في الذاكره والوحدات التي سنتعاملمعها كثيراً هي :-
---------------------------------------------------------------------------------
1
بت = بت و هو إما يساوى 0 أو 1 (وجود شحنه أو عدم وجود شحنه ) ( عدد 2 إحتمال ) Bit
8
بت = 1 بايت (عدد 256 إحتمال أى ما يعادل 2 أس 8 ) Byte
16
بت = 2بايت(عدد 65536 إحتمال أى ما يعادل 2 أس 16 ) Word
32
بت = 4 بايت(عدد 4294967296 إحتمال أى ما يعادل 2 أس 32 = 4 جيجا إحتمال ) DWord=DoubleWord
64
بت = 8 بايت ( عدد 2 أس 64 إحتمال = 16 جيجاجيجا إحتمال )

وحدات أكبر و تختصبقياس البيانات فى مختلف أجزاء الكمبيوتر :-
-----------------------------------------------------------------------
1024
بايت = KB الكيلوبايت
1024
كيلوبايت = MB الميجابايت
1024
ميجابايت = GB الجيجابايت
1024
جيجابايت = TB التيرابايت
1024
تيرابايت = PB البيتابايت
1024
بيتابايت = EB الأكسابايت
1024
أكسابايت = ZB الزيتابايت
1024
يوتابايت = YB اليوتابايتالأسكي كود ASCII:-
-------------------------
يتم في الحاسوب وبقية توحيد أستخدامالرموز أستخدام شفرة الآسكي كود (حالياً يعمل على تبني شفرة ال unicode وهي تسمحبتعدد اللغات في مستند واحد حيث يتم تمثيل كل حرف بأستخدام كلمة واحده=2بايت) كلمة ASCII هي أختصار ل :
American National Standard Code For Information Interchange
ويتم أستخدام هذا الكود الموحد لتسهيل تناقل البيانات ويمثل كل رمزفيه بعدد ثنائي بطول 1بايت=8بت=256أحتمال .
مما يعنى أن أى حرف نكتبه أو نراهعلى الشاشه يكون له مقابل رقمى يسمى الأسكر كود الخاص به و سنستخدم هذا الموضوعكثيرا كثيرا جدا ، لذلك يجب عليك أخذ نظره على جدول الأسكى التالى :-

الجدول الكامل للأسكى كود من الرقم 0 إلى 127


جدول الأسكى الموسع من رقم 128 إلى 255


طريقة كتابةالأرقام في الأسمبلر :-
-------------------------------------
لكتابة عددثنائي يوضع في آخر الرمز ( b ) لدلالة على أنه باينري مثال : Binary=11010010B أماالعدد العشري فلايحتاج الى أضافة وأما العدد لأساس 8 فيكتب مع المرمز (Q) في نهايته Octal=1276Q أو الرمز (O) في نهايته Octal=1276O أما العدد السداسي عشر فيكتب بوضع H في نهايته hexadecimal=0AB9CDH مع مراعاة وضع 0 اذا كان العدد يبدأ بحرف كماالمثال .

يجب أن تعرف الفرق بين تخزين الرقم كرقم أو تخزينه كنص فتخزينالرقم 201 مثلاً كرقم سسيأخذ بايت واحد وهو جاهز للقيام بعمليات رياضية ومنطقيهعليه أما تخزينه كنص فسيأخذ ثلاثة بايت في البايت الأول سيخزن الرقم الخاص بالأسكيكود للرمز '2' وكما قلت يخزن كرقم يدل على الرمز أما البايت الثاني فسيخزن رقمالآسكي كود للرمز '0' أما البايت الثالث فيأخذ القيمه الخاصة بالرمز '1' في الآسكيكود أي أن الرقم خزن بطريقة "102" وليس 102 وهذه الطريقة ليست جاهز للجمع أو الطرحولكنها ممتاز للطباعه على الشاشه ويمكن تحويل النص الى رقم والعكس .

الأعدادذي الأشاره :-
-----------------------
يتم تخزين الأعداد ذي الأشاره كالتالي :-
------------------------------------------
العدد موجب أذا كانت البتالأخيره صفر وقيمة الرقم هي باقي البتات أي لو أخذنا رقماً من بايت واحد فأن البترقم 7 (الثامنه - الترقيم يبدأ من الصفر ) يجب أن تكون صفراً ليكون العدد موجب أماالبتات من 0 الى 6 ( السبعه الأولى ) فتشكل قيمة الرقمأما أذا كان العدد سالبفأن البت الأخيرة تساوي واحد أما قيمة الرقم فتساوي سالب المكمل الثنائي للعدد أيلو أخذنا رقم مخزن في واحد بايت مثال = 11110110 بما أن البت السابعه=1 فأن الرقمسالب / نأخذ الآن المكمل الثنائي للعدد وهو 00001010 / القيمة تساوي -00001010 أيسالب عشرة .


ملاحظات مهمه :-
---------------------
1 -
البايت فىنظام التمثيل العددى بدون إشاره ( على إعتبار أن العدد موجب ) نطاقه من 0 إلى 255 .
2 -
البايت فى نظام التمثيل العددى بالإشاره ( البت الأخير للإشاره) نطاقه من -128 إلى +127 .
3 -
عند تعريف متغير من النوع Integer فى السى أو البيسيك فإنهيحجز للرقم 2 بايت .


إلى هنا ينتهى الدرس الثانى ،

__________________


_________________



معاينة صفحة البيانات الشخصي للعضو

hamo81

avatar
المشرف العام
المشرف العام
اليوم الثالث
كما ذكر من قبل أن لغة الأسمبلى تتعامل مع الهارد وير ،كيفهذا ؟وما معنى هذا ؟
سأسرد كيفية التعامل العامه مع الهاردويرعاماً :-
----------------------------------------------------
البياناتالمخزنه أو التى يتعامل معها أى جزء من أجزاء الهارد وير تنقسم إلى قسمين :-
1 -
البيانات (أرقام ، حروف ، .... كل هذا مخزن بالأسكى كود) .
2 -
أوامر (وهى أيضاأصفار ووحايد مخزنه بطريقة ما يتم عمل تنفيذ لها على البيانات السابقه Decoding .

مثلا عند تشغيل برنامج ما يطبع كلمة "Hello" على شاشة الكمبيوتر عند الضغطعلى حرف 'P' ، فإننا هنا نتعامل مع :-
1 -
البروسسور : هو وهو المعالج الذى يقومبتنفيذ كل تعليمه و التوصيل ما بين كل جوانب التعليمه الواحده.
2 -
الرامات : ونتعامل معها هنا على اساس عنوان كلمة "Hello" ، فمثلا نقول أن هه الكلمه مخزنه فىالعنوان 1000H وهذا يعنى عند عد 1000 أماكن بالنظام السداسى عشر (أى 4096 بالنظامالعشرى العادى ) ، فإن أحرف الكلمه ستجدها مخزنه من عند هذا المكان ، ويتم أخذ حرفحرف إلى أن يصل إلى حرف معين و هو الذى ينهى عملية الطباعه و هو '$' . فعندما يجدهذا الحرف يقوم بإنهاء عملية الطباعه و كما نرى أن هذه طريقة التعامل مع النصوص عندكتابتها أو طباعتها على الشاشه عاماً.
3 -
الشاشه : يكون هناك مخزن على كارتالشاشه أو الذاكره الخاصه بالشاشه على الرامات ، يتم وضع حرف حرف بها و يتم إعطاءأمر الطباعه وهو يكون كتابة سلسلة من الأصفار و الوحايد الخاصه و التى تعنى بالنسبهلنظام التعامل مع الشاشه بأن إطبع هذا الحرف ، طيب أين نطبع هذا الحرف ، يوجد مخزن Buffer للإحداثى السينى و آخر للإحداثى الصادى ، فعند طباعة حرف على الشاشه فيتمذيادة الإحداثى السينى بواحد (على اساس أن عرض كل حرف 1 وحده) و عند الوصول إلى آخرالسطر (تخطى عدد معين من الأحرف وهو طول الشاشه) فإن النظام نفسه يتم ذيادةالإحداثى الصادى بواحد و تصفير الإحداثى السينى للبدأ من أول السطر وهكذا .
4 -
الكيبورد : يجب وجود نظام ايضا يسمع إلى الحروف أو الأزرار التى يتم ضغطها علىالكيبورد (فى الحقيقه : عند الضغط على أى زر على الكيبورد فإن الأسكى المقابل لهيسرى عبر الأسلاك إلى وحة التعامل مع الكيبورد على اللوحه الأم و من ثم يخزن على ال Buffers التى توجد هناك ) . بعد سماع كل حرف من هذه المخازن Buffers فإننا نختبرالأسكى لهذا الحرف فلو أنه يقابل قيمة 80 ( المقابل لحرف 'P' فى جدول الأسكى كود ) فنقوم بتشغيل دالة الطباعه من المكان 1000 فى الذاكره ،هذا مثال بسيط لمايتم فعليا داخل الحاسب عند تشغيل هذا البرنامج البسيط ، تخيلوا ما يحدث عند تشغيلالبرامج المعقده الكبيره ، فعلا كان يجب تطوير اللغات فوق بعضها ، كل تعليمه فى لغهعالية المستوى تقابلها مجموعة تعليمات فى اللغات الأقل مستوى و هكذا ، فقط تتميزلغة السمبلى بأن كل تعليمه تقابل تعليمه فى لغة الأله بالظبط .

--------------------------------------------------------------------------------------------------------------------------
توجدوحدات تخزين داخل البروسسور يتم التعامل معها مباشرا فى كل التعاملات داخل الحاسبوهو تماثل ال Buffers فى أى جزء آخر من الهاردوير و تسمى مسجلات Registers ويقومتركيبها من لبوابات المنطقيه عالية السرعه High Speed Logic Gates ، وهى أهم أهمأجزاء البروسسور التى يتم التعامل معها فى نظام السوفتوير كله (التعامل مع هذاالمسجلات مباشرا من خلال لغة الأله ومن ثم لغة الأسنبلى ) .

نقول أنالبروسسور يدعم 32 بت ... هذا يعنى أن طول المسجلات الرئيسيه = 32 بت .
مثلاالبرسسور ال 8088 كان معالج 8 بت ... وهذا يعنى أن طول المسجلات فيه = 8 بت .

الجزء التالى يتحدث على المسجلات بالتفصيل فإنتبه إليه :-
---------------------------------------------------------------

المسجلات REGISTERS :
الكمبيزتر يحتاجفي تعاملاته الى ذاكرة سريعة جداً ومتصلة بالمعالج مباشرة حتى يمكن له أن يخزن فيهاالمعلومات المطلوبة لعملية حسابية معينة أو عداد لحلقة معينة ،هذه الذاكرة تعرفبالمسجلات REGISTERS وهي ذاكرة سريعة جداً تفيد المعالج في أجراء العمليات بسرعهوكفاءة أكبرهناك خمسة أنواع أو تصنيفات للمسجلات ( تختلف هذه التصنيفاتقليلاً من مرجع لآخر ) وهي مسجلات الأغراض العامة General-Purpose Registers ( تعرففي بعض المراجع بمسجلات المعطيات Data Registers ) و هناك مسجلات الأقسام Segment Registers والمسجلات الدليلية Index Registers ومسجلات التأشير Pointer Registers بالأضافة الى مسجلات الحالة والتحكم Status and Control Registers.



المخطط 4_1 : رسم تخطيطي يوضح المسجلات في معالجات ال16 بت


--------------------------------------------------------------------------------



المخطط 4_2 : رسم تخطيطي يوضح المسجلات بعد توسعتها في معالجاتال32بت



[1]
مسجلات الأغراض العامة General-Purpose Registers :-
-----------------------------------------------------------------------------
وهيعبارة عن كل من المسجلات AX و BX و CX و DX ،طول كل منها 16بت أي كلمة أي 2بايتالبايت اليساري فيهما يعرف بالعلوي (High) أما البايت الأيمن فيهما فيعرفبالمنخفض(Low) فمثلاً المسجل AX يتألف من مسجلين العلوي وهو AH والمنخفض وهو AL ،أن تعديل المسجل الجزئي سوف يؤثر في المسجل الأم لأنه جزء منها وأيضاً التعديل فيالمسجل الأم سوف يؤثر في المسجل الجزء ، تم توسيع المسجلات في معالجات ال32 بت معبقاء المسجلات نفسها ولكن كل منها أصبح جزء من مسجل موسع بطول 32بت وهي EAX,EBX,ECX,EDX ، أي أن المسجل EAX هو بطول 32بت وكجزء منه هناك المسجل AX بطول 16بت والذي يتألف هو الآخر من مسجلين هما AL و AH بطول 8بت لكلمنهما.

المسجل AX (مسجل المركم- Accumulator Register) :-
---------------------------------------------------------------------
هذاالمسجل كان من أهم المسجلات في معالجات ال 8بت القديمة جداً حيث كانت كل العملياتالرياضية والمنطقيه تجري من خلاله ولذلك كان يسمى بمسجل المركم لتراكم النواتج فيهلكن معالجات ال16 بت وسعت المرونة وجعلت كل مسجلات الأغراض العامة تستطيع أن تجرىمن خلالها العمليات الرياضيه والمنطقية الا أن المسجل AX مازال المفضل لأجراءها حيثأن أستخدام المسجل AX أو أحد أجزاءه يؤدي مع بعض التعليمات الى توليد شفره أقلأختصاراً (الفرق بايت واحد فقط لكل تعليمية) ، يمكن استخدام المسجل AX كمسجلين هما AL و AH حيث تعرف ال 8بتات الأولى التي في اليسار بالمسجل AL وال8بتات الأخيره التيفي اليمين بالمسجل AH ، أما بالنسبة ل EAX وهو المسجل الموسع ل AX فهو بطول 32بتويعتبر المسجل AX كجزء منه.

المسجل BX (مسجل القاعدة-Base Register) :-
---------------------------------------------------------
هو المسجلالوحيد من بين مسجلات الأغراض العامة الذي يمكن أستخدامه كدليل(INDEX) ، يمكنأستخدام هذا المسجل للعمليات الرياضية والمنطقية وكما المسجلات الأخرى ينقسم هذاالمسجل الى قسمين بطول 8 بت هما BL و BH وهو ضمن مسجل أوسع هو EBX بطول 32بت.

المسجل CX (مسجل العداد-Counter Register) :-
------------------------------------------------------------
يستخد عادةكعداد ويستخدم هذا المسجل بشكل خاص مع تعليمة التكرار LOOP حيث يعمل كعداد لهاوبالطبع يمكن استخدامة في العمليات الرياضية والمنطقيه ، وكما المسجلات الأخرىينقسم هذا المسجل الى قسمين بطول 8 بت هما CL و CH وهو ضمن مسجل أوسع هو ECX بطول 32بت.

المسجل DX (مسجل المعطيات-Data Register) :-
----------------------------------------------------------
يفضلأستخدام هذا المسجل لتخزين المعطيات في عمليات الدخل والخرج والمقاطعات وبالطبعفأنه يمكن أستخدامه كباقي المسجلات في العمليات الرياضية والمنطقية وكما المسجلاتالأخرى ينقسم هذا المسجل الى قسمين بطول 8 بت هما DL و DH وهو ضمن مسجل أوسع هو EDX بطول 32بت.


[2]
مسجلات الأقسام Segment Registers :-
------------------------------------------------------
كانت العنونةالحقيقية في معالجات ال16بت تتم بأستخدام خطوط عرض 20بت وهي تكفي لعنونة 1ميجابايتمن الرام فقط ولصعوبة التأشير للرام بأستخدام مسجلات من 16بت نشأت فكرة الأقساموالعنونة المنطقية وقد قسمت الرام لمقاطع كل منها بطول 64كيلوبايت(الحد الأقصى الذييمكن عونته ب 16بت) وهذه الأقسام لايبدأ كل واحد فيها بعد الآخر وأنما هي متداخلةحيث يبدأ كل 16بت قسم جديد وللتأشير على موقع ما يلزمنا عنوان المقطع والذي بطول 16بت بالأضافة الى قيمة الأزاحة من بداية هذا المقطع وهي بطول 16بت أيضاً لذلك لجأمصمموا المعالح على وضع مسجلات خاصة بالأقسام الشائعة في البرنامج وهي قسم الشفرة Code Segment وقسم البيانات Data segment وقسم المكدسه Stack Segment وقسم المقطعالأضافي Extra Segment وبالرغم أنه في معالجات ال32بت يمكن العنونة بأستخدام 32بتذاكره حقيقية أي مايساوي 4جيجابايت من الرام الا أن طريقة الأقسام مازالت موجودةحتى يتم خزن عنواين كثيرة بأستخدام 2بايت بدل 4بايت داخل المقطع الواحد مع وجودعنوان مقطع واحد فقط مخزن قي المسجل المناسب .(ملاحظة : تم في معالحات ال32بت أضافةمسجلين أقسام جديدين بطول 16 بت أضافة الى مسجلات الأقسام السابقة والمسجلين هما FS و GS هذان القسمان يمكن أستخدمهما كما المسجل ES كمسجل قسم بيانات أضافي )

قسم الشفرةCode Segment -CS: -
-----------------------------------------------
يحمل هذا المسجل عنوانبداية القسم الخاص بالشفرة في البرنامج .

قسم البيانات Data Segment -DS :-
-----------------------------------------------
يحمل هذا المسجل عنوانبداية قسم البيانات في البرنامج .

قسم المكدسة Stack Segment -CS :-
------------------------------------------------
يحمل هذا المسجل عنوانبداية قسم المكدسه في البرنامج .

قسم الأضافي Extra Segment -ES :-
----------------------------------------------
يحمل هذا المسجل عنوانبداية قسم أضافي يمكن أن يستعمل هذا القسم الأضافي كقسم بياناتآخر.

[3]
مسجلات التأشير Pointer Registers :-
------------------------------------------------------
تحتوي مسجلاتالتأشير وهي بطول 16بت على عنوان من 16 بت وهي تستخدم بشكل خاص مع العمليات الخاصةبالمكدسه وعادة تشكل العنواين التي بها الأزاحة بالنسبة لمسجل قسم المكدسة SS ومسجلات التأشير هي مسجلان مسجل مؤشر القاعدة Base Pointer BP و مسجل مؤشر المكدسه Stack Pointer SP .

مسجل مؤشر القاعدة Base Pointer -BP :-
-----------------------------------------------------
يعمل هذا المسجلعلى تسهيل الوصول الى الوسيطات(البارمترات) والتي تحتوي على عنواين ومعطيات والتيدفعت PUSH بشكل مؤقت الى المكدسه عند أستدعاء روتيمات فرعية من البرامج مع وسيطاتممرة ، وسع هذا المسجل في معالجات ال32بت وأصبح جزء من مسجل أوسع بطول 32بت هو EBP.


مسجل مؤشر المكدسه Stack Pointer -SP :-
------------------------------------------------------
يحتوي المسجل SP على كلمة الذاكرة الحاليه التي ستعالج في المكدس ، وسع هذا المسجل في معالجاتال32بت ليصبح جزء من مسجل أوسع بطول 32بت هو ESP . هذا المسجل يعدل آلياً بواسطةالمعالج مع عملية دفع PUSH أو سحب POP في المكدس ليشير دوماً الى قمة المكدس .

[4]
المسجلات الدليلية Index Registers :-
----------------------------------------------------
هي مسجلات بطول 16بت تستخدم في عنونة بيتات مقطع البيانات وكذلك في عمليات التأشير الى السلاسلالنصية Strings ، وهناك مسجلات دليليان هما SI و DI وعادة مايستخدمان معاً دائماًبغيه تنفيذ عملية ما .

المسجل الدليلي المصدري Source Index -SI :-
--------------------------------------------------------
يستخدم هذاالمسجل في التأشير على النص المصدر وذلك لأجراء العمليات التي تتعامل مع نصوص وكذلكيستخدم في في عنونة بيتات مقطع البيانات ،وسع هذا المسجل في معالجات ال32بت ليصبحجزء من مسجل أوسع بطول 32بت هو ESI .

المسجل الدليلي الهدفي Destination Index -DI :-
------------------------------------------------------------
يستخدم هذاالمسجل في التأشير على النص الهدف وذلك لأجراء العمليات التي تتعامل مع نصوص وكذلكيستخدم في في عنونة بيتات مقطع البيانات ،وسع هذا المسجل في معالجات ال32بت ليصبحجزء من مسجل أوسع بطول 32بت هو EDI .

[5]
مسجلات الحالة والتحكم Status and Control Registers :-
-----------------------------------------------------------------------------
تتكونهذه المسجلات من مسجلين كل بطول 16بت هما مسجل الأعلام Flags Register ومسجل مؤشرالتعليمية Instruction Pointer - IP .

مسجل مؤشر التعليمية Instruction Pointer - IP :-
--------------------------------------------------------------
يحتويالمسجل IP على أزاحة التعليمية التالية التي ستنفذ ، أي أن المسجل عبارة عن مؤشرالى التعليمية التالية الموجودة في مقطع الشفرة CS-Code Segment المنفذ حالياً ،وسعهذا المسجل في معالجات ال32بت ليصبح جزء من مسجل أوسع بطول 32بت هو EIP.
وماتعليمات القفز والتكرار الى تعديل للمسجل IP .

مسجل الأعلام Flags Register :-
------------------------------------------
وهو مسجل بطول 16بت يحتوي علىأعلام طول كل منها 1بت فقط وتستخدم لتعكس حالة آخر عملية أو للتحكم بعمليات معينهوكل علم له موقع معين في ال 16 بت علماً بأن 9 فقط منها محجوزة والباقي غير معرفةوليس عليك حفظ مواقع هذه الأعلام لأنك سستعامل معها بالرمز الذي يرمز لها وكل علمله رمز مكون من حرف واحد فقط يدل عليه ويتبعه أحياناً الحرف F أختصار FLAG للتوضيحأنه علم ، كل علم أما يكون واحد أي SET أو صفر أي CLEAR .



مخطط 4_3 : هذا المخطط يوضح مسجل الأعلام الذي طولة ال 16بت




وهناك نوعين من الأعلام هي أعلام الحالة Status Flags وأعلام التحكم Control Flags .

#
أعلام التحكم Control Flags :-
-----------------------------------------
وهي أعلام مخصصة لضبط قيمتهامن قبل المبرمج أو العتاد ويتم ضبطها عند القيام بالمقاطعات أو أستدعاء البرامجالفرعية أو بعض الأوامر بهدف التحكم بشئ ما وهذه الأعلام هي :

1.
علمالأتجاه (DF=direction flag) : -
-----------------------------------------------
يؤثر في التعليمات التيتقوم بنقل البيانات مثل MOVS,CMPS,SCAS. عندما يكون العلم 1=UP يأخذ الأنتقال أتجاهالطبيعي أما عندما يكون 0=DOWN يأخذ أنتقال البيانات أتجاه معاكساً ( قيمة العلم DF عند بداية البرنامج =1). لضبط العلم بواحد نستخدم التعليمة std ولضبطه بصفر cld .


2.
علم المقاطعه (if=intrreupt flag) : -
-------------------------------------------------
يحدد هذا العلم اذاماكان بمقدور النظام أجراء مقاطعات أو لا ، ويضبط هذا العلم بواسطة أجهزة الهاردويروكذلك وقت النظام ، تستطيع أنت ضبطه أو تصفيره اذا كنت تريد حدوث مقاطعات خارجية أولا ، اذا كانت قيمة العلم=1 فهذا يعني مفعل enable ويمكن أجراء المقاطعات أما اذاكان صفر فأنه غير-مفعل disabled ولايمكن أجراء المقاطعات ( قيمة العلم IF عند بدايةالبرنامج =1). لضبط العلم بواحد نستخدم sti ضبطه بصفر CLI .


3.
علمالمصيدة (tf=trap flag) : -
------------------------------------------
يتيحهذا العلم وضع المعالج في نمط الخطوة الواحدة في الوقت الوحد (single step mode) مما يسمح لبرامج فحص الأخطاء كالديبغر بتتبع البرنامج ، اذا كانت قيمة العلمواحد=ON فأن النمط يعمل أما اذا كان صفر=off فأن النمط لايعمل ( قيمة العلم TF عندبداية البرنامج =0) .

#
أعلام الحالة Status Flags :-
---------------------------------------
هذه الأعلام تضبط آلياً بعد كلعملية رياضية أو منطقية وهي تعكس هذه العملية ، ويمكن بعد العملية التحقق من قيمهذه الأعلام لتنفيذ عمليات مثل الشروط والحلقات وهذه الأعلام هي :

1.
علمالحمل (cf=carry flag) : -
----------------------------------------
يضبطهذا العلم=1 اذا كان نتيجة آخر عملية كبيرة جداً على الهدف أو المقصد (في الأعدادالتي بدون أشارة فقط ) ، مثال هذا البرنامج :

mov ah,200
add ah,100

بما أن المسجل AH هو 8بت فأن أقصى قيمة يتحملها هي 256 وبما أن القيمة فيالمسجل هي 200 ثم أضفنا لها 100 فأن الجواب أكبر من الهدف (aH هنا) لذلك العلم CF سوف يضبط=1 بعد عملية الجمعلضبط لعلم برمجياً stc ولتصفيره clc

2.
علمالفيض (OF=overflow flag) : -
----------------------------------------------
هو نفس علم الحمل لكن معالعمليات ذي الأشارة أي أنه يضبط اذا كان ناتج آخر عملية أكبر أو أصغر من حدودالهدف ، مثال :

mov ah,-100
add ah,-50

بما أن أصغر قيمةيتحملها المسجل AH هي -128 لكن ناتج العملية -150 فأن علم الفيض يضبط=1

3.
علم الأشارة (sf=sign flag) : -
-------------------------------------------
يضبط هذا العلم اذا كان ناتجآخر عملية رياضية أو منطقية سالب ويصفر اذا موجب (في الواقع أن العلم نسخة من البتالأخيرة للجواب( بت الأشارة) - كما ذكرنا سابقاً فأن العدد سالب اذا البت الأخيرة 1وموجب اذا صفر ) .

4.
علم الصفر(zf=zero flag) : -
-------------------------------------
يضبط هذا العلم=1 اذا كانت نتيجةآخر عملية رياضية أو منطقية تساوي صفر .

5.
علم الحمل المساعد(af=auxiliary carry flag) : -
---------------------------------------------------------------
يضبطالعلم=1 اذا تسببت آخر عملية رياضية أو منطقية حمل من البت الثالثة الى البتالرابعة أو أستلاف من البت الرابعه الى البت الثالثه . هذا العلم لاتوجد له فائدةواضحةوهو قليل الأستخدام برمجياً .

6.
علم الأزدواجية - التحقق (pf=parity flag) : -
-----------------------------------------------------------
ببساطةيضبط=1 هذا العلم اذا كان عدد الوحايد في ناتج آخر عملية رياضية أو منطقية زوجياًوبصفر اذا كان فردياً ، مثال لو كان جواب آخر عملية = 00100010 فأن العلم سوفيضبط=1 لأن عدد البتات التي تحتوي وحايد =2 وهو عدد زوجي أما اذا كان الجواب مثلاً = 11100000 فأن العلم يصفر لأن عدد البتات التي تحوي وحايد=3 وهو عدد فردي . وكماعلم الحمل المساعد AF فأن أستعمالة قليل برمجياً ويستخدم عادة من قبل نظام التشغيللأدارة الذاكرة وكذلك برامج الأتصال لتحقق من سلامة البيانات المرسلة .

لاحط أن كل من الأعلام [علم المصيدة (tf=trap flag)/علم الفيض (OF=overflow flag)/علم الأشارة (sf=sign flag)/علم الصفر(zf=zero flag)/علم الحملالمساعد(af=auxiliary carry flag)/علم الأزدواجية - التحقق (pf=parity flag)] لايوجد لهم تعليمات مباشرة لضبطهم أو تصفيرهم وتحتاج أن تستخدم طريق فيها أنحناءةبسيطة لتعديل قيم هذه الأعلام سوف يتم شرحها في دروس قادمة علماً بأن البرامجالعادية لن تحتاج لتعديل قيم هذه الأعلام وكل ماستحتاجه هو قرآة القيم التي بها .

إلى هنا ينتهى الدرس الثالث ، ونبدأ من الدرس الرابع إن شاء الله تعليماتلغة الأسمبلى ( البدايه الفعليه ) ، نشكركم لحسن إستماعكم معنا ، رجاء الإهتمامالتام بهذه الدروس الثلاثه السابقه لأهميتها الشديده.


********************
__________________


_________________



معاينة صفحة البيانات الشخصي للعضو

hamo81

avatar
المشرف العام
المشرف العام
اليوم الرابع

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

سنتناولالأتى فى هذا الدرس :-
---------------------------------
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 ثم أنتر لتنفذالتعليميه وترى النتائج والتعليميه التي بعدها وهكذا ولاتنسى أذا أردت أن تدخل كودجديد الخروج والعودة مرة أخرى الى الديبغر لتصفر المسجلات والذاكره

__________________


_________________



معاينة صفحة البيانات الشخصي للعضو

hamo81

avatar
المشرف العام
المشرف العام
اليوم الخامس
سنبدأ بتعليمات وأوامر الأسمبلى ،،،
التعليمات الحسابيه Arithmatic Instructions
-------------------------------------------------------
1 - الجمع :-
--------------
التعليمه : Add
وتأخذ فىالحاله العاديه 2 وسيط ، المصدر و الهدف وهى تكافىء === المصدر = المصدر + الهدف
ADD Source , Destination === Source = Source + Destination

أمثله :

CODE


; A2H + 20H = C2
MOV AX , A2; 1st Number
ADD AX , 20; 2nd Num


نأخذ فىإعتبارنا أن العدد كون بالنظام السادس عشر إفتراضيا حالما يتم تغييره إلى عشرى أوثنائىبمعنى فى المثال السابق أول خطوه نقوم بتحميل A2 بالنظام السادس عشر إلىالمسجل AX
وفى الخطوه الثانيه قمنا بجمع على ما بداخل المسجل الرقم السادس عشر A2


مثال آخر:

CODE
[/u]

; A111 + 2302 + 1203 + 4099 = 116AF
; OF COURCE AX IS 16 BIT RWG. SO IT WILL CONTAINS 16AF AFTER THE OPERATION
MOV AX , A111
ADD AX , 2302
ADD AX , 1203
ADD AX , 4099
; AX = 16AF AND CARRY FLAG IS BEEN SET




[u]مثال آخر ( بإستخدام الذاكره ) :
نضيف محتويات الذاكره بالعنوان [A200] + [3409] >>>>


CODE

MOV AX , [A200]
ADD AX , [3409]


ملاحظه :يمكن القيام بكل هذه الأمثله على برنامج ال Debug والذى تم شرحه فى الدرسالسابق ،،،

-------------------------------------------------------------------------------------------------------------------------
2 - الطرح :-
-------------
التعليمه : SUB

بالظبط نفس تعليمة الجمعمثال :-نطرحمحتويات المسجل CX من محتويات المسجل SI


CODE

SUB SI , CX


مثال آخر : نطرح محتويات المكان فى الذاكره المعنون بالعنوان الموجود فىالمسجل BX من FFFF


CODE

MOV AX , FFFF
SUB AX , [BX]





-------------------------------------------------------------------------------------------------------------------------
3 - الضرب :-
---------------
التعليمه : MUL

يتم ضرب أى رقمين فى لغة الأسمبلى فى ثلاث أنظم ألى الآن :- الأول : ال8-بت (البايت) :-يتم وضع إحدى قيمالضرب فى AL و الآخر فى أى ريجستر آخر له نفس الحجم أو مكان فى الذاكره بجانب كودالضرب الذى هو فى حالتنا هنا [MUL] للأرقام الغير محددة الإشاره . و [IMUL] للأرقامالمحددة الإشاره .وتوضع النتيجه فى ال AX .

مثال :للحصول على حاصل ضرب 120 * 30 نقوم بالأتى :-



CODE
;----------------------------------
MOV CL,30D
MOV AL,120D
MUL CL
MOV [1000H] , AX ;
لتخزين الناتج فى الذاكره المعنونهب1000 بالنظام السادس عشر
;----------------------------------

الثانى : ال16-بت (الكلمه) :-يتم وضع إحدى القيم فى AX و ألآخرفى أىريجستر آخر له نفس الحجم أو مكان فى الذاكره بجانب كود الضرب و توضع النتيجه فى DX:AX . و هذا معناه أن الجزء ال Low من ناتج القسمه سيخزن فى ال AX و الجزء ال High سيوضع فى ال DX .

مثال : للحصول على حاصل ضرب 20000 * 2365 سنقوم بالآتى :-



CODE
;----------------------------------
MOV CX,2365D
MOV AX,20000D MUL CX
MOV [1000H],AX ;
تخزين الجزء الأول فى المكان فى الذاكرهالمعنون ب 1000
MOV [1001H],DX ;
تخزين الجزء الثانى فى المكان فى الذاكرهالذى يلى المكان السابق
;----------------------------------

الثالث : ال32 بت :- يتم وضع إحدى القيم فى EAX و ألآخرفى أى ريجستر آخرله نفس الحجم أو مكان فى الذاكره بجانب كود الضرب و توضع النتيجه(64 بت) فى EDX:EAX . و هذا معناه أن الجزء ال Low من ناتج القسمه سيخزن فى ال EAX و الجزء ال High سيوضع فى ال EDX .

بالطبع نحن نتعامل كبدايه على الأنظمه إلى ال 16 بت ،،،


-------------------------------------------------------------------------------------------------------------------------
4 - القسمه :-
---------------
التعليمه : DIV

أيضاً تتم فى نفس النظم السابقه والخاصه بالضرب :-

الأول : ال8بت (بايت) :- يتم و ضع المقسوم فى AX و المقسوم عليه فى أىريجستر حجمه بايت مثل BL,CL,DL,... أو مكان فى الذاكره لها حجم بايت مثل BYTE PTR [1234H] , BYTE PTR [BX] .و يوضع ناتج القسمه فى AL و باقى القسمه فى AH بإستخدام [DIV] .
لاحظ:- أنه فى حالة قسمة الأرقامالمحددة الإشاره بإستخدام [IDIV]تكون إشارة ناتج القسمه هى الإشاره العاديه فى هذهالحالات . وتكون إشارة خارج القسمه Remender دائماً موجبه و صحيحه Integer.

لاحظ:-كل القيم هنا 8-بت إذاً , لابد من تحويل القيمه ال 8-بت للمقسوم إلى 16-بت ليمكن نقلها ألى AX ويتم ذلك فى حالة القيم غير محددةالإشاره بمسح ال AH ليكون كله أصفار و تكون قيمة المقسوم 16-بت . أما فى حالة القيممحددة الإشاره يتم ذلك عن طريق كود [CBW] المسئول عن تحويل البايت(8-بت) إلى كلمه (16-بت) لل AX فقط.

مثال :- للحصول على ناتجقسمة(+16) على (-5) يمكننا عمل الأتى :-



CODE
;----------------------------------
MOV AL,16D
CBW
MOV BL,5D
NEG BL
IDIV BL
MOV PYTE PTR[1000H] , AL
MOV PYTE PTR[2000H] , AH
;----------------------------------

وهناتم نقل المقسوم إلى AL وتم عمل مد له عن طريق [CBW] . ثم تم نقل قيمة المقسوم عليهإلى BL بعد وضع الإشاره السالبه عن طريق [NEG]. إذا القيم جاهزه لعملية القسمه ويتمحفظ الناتج فى الذاكرهبعدها.


--------------------------------------------------------------------------------

باقىالنظم كما سبق من الممكن أن تقوم بإستنتاجها .


-------------------------------------------------------------------------------------------------------------------------
ملاحظه أخيره :إستخدمنا التعليمه MOV وهى مسئوله - كما توقعتم - على تحميل المسجلات أو أماكن الذاكره بقيم معينه أو محتويات مسجل أوأى قيم أخرى ،،
__________________


_________________



معاينة صفحة البيانات الشخصي للعضو

hamo81

avatar
المشرف العام
المشرف العام
اليوم السادس
السلام عليكماليوم السادس فى الأسمبلى،،سنكمل بإذن الله ما بدأناه فى اليوم السابق من سرد تعليمات الأسمبلى،ولق إستعرضنا فى اليوم السابق(الخامس) التعليمات الحسابيه مثل ADD,SUB,MUL,DIV

اليوم ، نبدأ بتعليمات عامه منها ما يستخدم بكثره ولقدحاولت قدر الإمكان أن أبتعد عن التعليمات التى لا تستخدم إطلاقا إلى فى حالات نادرهيمكن أن نتحدث عنها آن حدوثها ، المهم ... خذ نفس عميق ... ركز .... و Let's Go

MOV
-------
التعليمه تستخدمفى المساواة بدلا من "=" أو لتحميل مكان ما بالذاكره( سواء مسجلات أو عناوين ذاكرهرام ) بقيم أو بمحتويات ذاكره أخرى و من هنا نستنتج أن هذه التعليمه تحتاج إلى 2مدخل Argument المصدر و الجهه Source and destination . ويذكر أن هذه التعليمه أشهرتعليمات الأسمبلى و أكثرها إستخداما ،،أمثله :-

CODE

MOV AX,2345H ; AX = 2345H
MOV AL,34 ;AL = 34 Decimal
MOV [2312] , BX ;Memory location 2312 IN current data segment = BX Contents
MOV [SI] , 30 ;Memory location in SI Contents = 30 Decimal
.
.
.


لاحظ :-
---------

-
لا يمكن نقل محتويات ذاكره رام إلى محتويات ذاكره رامبنفس التعليمه ، أو أى تعليمه أخرى .... وذلك لأن البروسسور لا يستطيع القيامبالتعامل مع الذاكره أكثر من مره واحده لكل تعليمه أسمبلى (المقابله لها بلغةالأله) >>>



CODE

MOV [1000],[2000] ;Error




-
لا يمكن النقلبين مكانين مختلفى الحجم ، بمعنى أنه لا يمككنا أن ننقل ما بداخل مسجل بعرض 16 بتإلى مسجل آخر بعرض 32 بت أوالعكس .



CODE

MOV AX,AL ;Error
MOV AL,AX ;Error




-
عند النقل من مكان فىالذاكره إلى مسجل فإن البيانات التى تنتقل حقيقاً هى بيانات إبتدأءا من هذا العنوانو بعرض المسجل ، وخذ فى إعتبارك ان الذاكره مقسمه BYTES بمعنى أنك أردت تحميل AX وهو بعرض 32 بت بمحتويات الذاكره عند 1000 فإنه يبدأ بتحميل 4 بايت من عند هذاالعنوان .



CODE

MOV CX,[0110] ;CX = 4 BYTES Contents starts from address 0110 at current data segment





------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NOP
-------
هذه التعليمه تعبر عن إضاعة الوقتو هى إختصار ل No Operation و هى تضيع و قت تعليمه قياسيه بحيث أنك إذا أردت عملإنتظار Delay فإن هذه التعليمه قياسيه و تستخدم و طبعا تستخدم فى دوره بحيث أنكمثلا لو اردت إنتظار ثانيه فإنك تكررها 100000 مره على الأقل ( لم احسبها و هىتتوقف على سرعة المعالج لديك ) .

أمثله :-

CODE

NOP ;Instruction tells the processor too do nothing this instruction cycle time
;and used to waste a small time according to cpu clocking speed





------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HLT
-------
وتستخدم فى إنهاء عمل البروسسور ولست اقصد الجهاز نفسه ، يعنى إحتمال يهنج و إحتمال لا يفعل أى شىء ، يعنى هىإستخدامها كان زمان فى الإصدارات القديمه من اللغه ، أما فى الوقت الحالى ، فإنهتوجد تعليمات أخرى تخبر المعالج بإيقاف البرنامج أو إنهاءه وما شابه ...

أمثله:-

CODE

HLT ;No commant





------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INC
------
تستخدم فى عمل زياده للمعطى بمقدار 1 ، وهى تقابل عملية جمع واح + القيمه الى بداخل المعطى و من ثم تخزين القيمهالجديده .

أمثله :-

CODE

INC AX ;AX = AX + 1 === ADD AX,1
INC [BX] ;[BX] = [BX] + 1 === ADD [BX] , 1
INC CX ;CX = CX + 1





------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DEC
-------
وهى عكس سابقتها و تستخدم فىإنقاص المعطى Operand بواحد . و هى تقابل التعليمه SUB .....,1 و بالطبع فإن المكانالخالى يتم وضع ال Operand

أمثله :-

CODE

DEC [SI] ;[SI] = [SI] -1
DEC AX ;AX = AX - 1 === SUB AX,1
DEX CX




-
عند إستخدام هذهالتعليمه مع مسجل أو مكان بالذاكره يحتوى على 0 فإنها تدخل فى النطاق السالب بعده ويتم تغيير علم الإشاره SIGN Flag فى مسجل الأعلام.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NEG
--------
وهى تستخدم فى تغيير غشارةالمعطى Operand ، وهى إختصار للكلمه الإنجلييزيه Negiate بمعنى جعل القيمه سالبه وطبعا تعمل مع جميه القيم السالبه لتجعلها موجبه و الموجبه التى تحلها إلى سالبهأمثله :-

CODE

MOV AX,100 ;AX = 100
NEG AX ;AX = FF00 = -100
NEG AX ;AX = 100 Again





------------------------------------------------------------------------------------------------------------------------------------------------------------------------
سننتقلالأن إلى تعليمات الأسمبلى المنطقيه Logic Instructions

AND
-------
وهى تقوم بعملية "و" المنطقيه AND Gate بين 2 Operrand ومن ثم تخزن القيمه فى ألأول كالعاده ،،،أمثله :-

CODE

MOV AX,10 ;AX = 10
MOV BX,5 ;BX = 5
AND AX,BX ;AX = 0 Because that 10 (1010) and 5(0101) = 0000 :-)


تستخدم هذهالتعليمه فى عمليه تسمى Masking ،

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OR
-----
وهذه التعليمه كما أستنتجت فهىتعبلر عن العمليه المنطقيه "أو" OR Gate و لها نفس شروط ال AND ،أمثله :-

CODE

OR AX,CX
OR [1020],CL
OR AX,0000





------------------------------------------------------------------------------------------------------------------------------------------------------------------------
XOR
-------
هذه التعليمه تستخدم فى العمليهالمنطقيه XOR ، كما سنرى فىالأمثله :-



CODE

MOV AX,1000 ;AX = 1000
XOR AX , 2000 ;AX = 1080
XOR AX,2000 ;AX = 1000


لاحظ أنهذهالتعليمه تستخدم فى التشفير الأحادى Single Encyreption لأنه كما لاحظنا فى المثالالسابق ، فإننا عملنا تشفير للقيمه بداخل المسجل AX فإستخدمنا المفتاح (القميهالأخرى التى تستخدم فى فك التشفير أو إرجاع القيمه الأصليه ثانيا) و هى 2000ومن ثم عند القيام بنفس العمليه مع نفس القيمه فإنه يتم إرجاع القيمه الأصليه
"
لقد صممت برنامج بسيك بالأسمبلى يقوم بتشفير نصوص مدخله من قبل المستخدم و منثم يعيد فكها ثانيا بإستخدام مفتاح ثابت بداخل البرنامج و لرؤية البرنامج و السورسكود الخاص به ، يمكنك الإطلاع على الدرس التاسع فى موقعىhttp://ezzuz.tk " !!!!!!!!

-
لا حظ أيضاأنالتعليمات المنطقيه Logic Instructions تستخدم فى عمليات البت Bit Operation وكمانعلم أن البت هى اصغر وحدة تخزين بالحاسب ، ومن ثم تستطيع تسخير هذه التعليماتلمساعدتك فى تكوين و التعامل مع المتغيرات المنطقيه Boolean Variables والتى تحتملقيمتين فقط أما صح أو خطأ True or False ،،،

__________________


_________________



معاينة صفحة البيانات الشخصي للعضو

hamo81

avatar
المشرف العام
المشرف العام
اليوم السابع


أتذكر أن آخر تعليماتتناولناها سويا الدرس السابق هى التعليمات المنطقيه ، و نسيت ذكر واحده فقط ،سأذكرها هنا أولا :

NOT
هذهالتعليمه مسؤوله عن عكس القيمه التى بداخل المكان الذى يذكر بعدها ، بمعنى ... مممممممممم ، أنظر المثال الأتى :

مثال
:
-------

لو أنهيوجد بالمسجل AL قيمه ثنائيه على هذا الشكل 01110010
ونريد عكس هذه القيمه لتكونهكذا 10001101 ، نستخدم هذه التعليمه و هو مساويه للمقابل الأول First Complement ،كل بت يتم عكس قيمته .



CODE

MOV AL,01110010B
NOT AL
;AL = 100011010B NOW




--------------------------------------------------------------------------------------------------------------------------
نأتىلتعليمات الإزاحه و الدوران Shift And Rotate Instructions- هذه التعليمات تتعامل مع التشكيل الثنائى المنطقى كما تتعاملالتعليمات المنطقيه السابقه مع القيم المختلفه Logic Bit Instructions
-
تستخدمهذه التعليمات بكثره فى دوال التحكم فى وحدات الإدخال و الإخراج Control I/O Divices
-
تستخدم مع جميع أنواع المسجلات و الذاكرهأولا : تعليمات الإزاحه : Shift Instructions- معنى الإزاحه هى إزاحة القيم الثنائيه المتتاليه إلى اليمينأو اليسار (>>> || <<<)
-
تستخدم فى العمليات الحسابيه مثلالضرب و القسمه (إزاحه لليسار بت واحده تعنى ضرب فى 2 و إزاحه لليمين بت واحد تعنىقسمه على 2)
-
هناك أربع تعليمات إزاحه عباره عن مجموعتين (إزاحه منطقيه Logical Shift و إزاحه حسابيه Arithmatic Shift)
-
جميع هذه التعليمات تتم من خلال علمالحمل Carry Flag
-
وكما ترى بالشكل الأتى ، كيفية عمل هذه التعليمات و الفرقبينهما .

- تلاحظ أن الإزاحه المنطقيهإلى اليسار SHL تتم الإزاحه و يتم وضع من اليمين صفر ، وفى الإزاحه المنطقيه إلىاليمين SHR يتم وضع صفر من اليسار .
-
تلاحظ فى تعليمات الإزاحه الحسابيه إلىاليسار SAL مثل الإزاحه المنطقيه إلى اليسار ، أما الإزاحه الحسابيه إلى اليمينفيتم وضع نفس القيمه فى االبت الأخير كما هى و هذا بسبب عدم تأثر إشارة القيمهالموجوده و لذلك سميت إزاحه حسابيه .
-
يمكن إستعمال الإزاحه المنطقيه مع القيمالتى بدون إشاره Unsigned Numbers .
-
يمكن إستعمال الإزاحه الحسابيه مع القيمالتى بإشاره Signed Number .
-
لا يمكن إستعمال الإزاحه مع مسجلات المقاطع مطلقاوفيما عذا ذلك يمكن إستخدامها.أمثله لتعليمات الإزاحه المختلفه :-
--------------------------------------



CODE

SHR AH,3 ;AX is logically shifted Right 3 places
SHL CX,12 ;CX is logically shifted right 12 places
SHR [1000] , 3 ;The memory location adrresed by 1000 in the data segment is right shifted by 3 places
MOV CL,10
SAR DX,CL ;DX is arithmatically shefted to right by number in CL
;Note that CL Here called the sheft count register and can be used as above
SAL EDX,1 ;EDX is arithmaticaly shifted by 1 place


مثال لإستخدامعملية الإزاحه إلى اليسار فى ضرب القيمه الموجوده داخل المسجل AX فى القيمه 1010وهى مساويه ل10 فى النظام العشرى .



CODE

SHL AX,1
;AX = AX * 2B
MOV BX,AX
;BX = AX * 2
SHL AX,2
AX = AX * 8
ADD AX , BX
;AX =AX * 10
;AX = AX * 1010B
;




--------------------------------------------------------------------------------------------------------------------------
ثانيا : تعليمات الدوران : Rotate Instructions- تقوم هذه التعليمات بعمل إزاحه من طرف المسجل أو المكانبالذاكره إلى الطرف الأخر.
-
أربع تعليمات مقسمين إلى مجموعتين ( دوران خلال علمالحمل Rotate أودوران خارج علم الحملRoate throught carry )
-
وكما ترى بالشكلالأتى ، كيفية عمل هذه التعليمات و الفرق بينهما .

- يتضح من الشكل المبين سابقا أن تعليمات الدوران من خلال علمالحمل RCL , RCR تدور البتات من طرف إلى علم الحمل إلى الطرف الأخر .
-
أماالتعليمات الأخرى ROR , RRL تدور البتات من طرف إلى الأخر ومن ثم وضع البت المنقولهإلى علم الحمل كما هو مبين بالشكل.
-
أمثله :-

CODE

ROL SI,14 ;SI rotated left by 14 places
RCL BL,6 ;BL rotates left through carry by 6 places
ROL ECX,18 ;ECX rotates left by 18 places
RCR AH,CL ;AH rotates through carry by the number of places in CL
ROR WORD PTR[BP] , 2 ;The word contents of the stack segment memory
location addressed by BP rotate right by 2 places




--------------------------------------------------------------------------------------------------------------------------
تعليماتالبحث عن البت 1 : Bit Scan Instructions- وظيفة هذه التعليمات هى البحث عن بت واحد داخل مسجل ما أومكان بالذاكره .
-
هذه التعليمات لها صيغتين وهما BSF (Bit Scan Forward) & BSR (Bit Scan Reverce) 2
- BSF
وتقوم بالبحث من اليسار إلى اليمين (من البت 0إلى البت 15 فى AX )
- BSR
وتقوم بالبحث من اليمين إلى اليسار (من البت 15 إلىالبت 0 فى AX)
-
تأخذ التعليمه مدخلان (Source & Destination) ،
-
عندمايجد المعالج 1 فإنه يقوم بتصحيح القيمه التى بعلم الصفر If a 1-bit is encountered , zero flag is set . ومن ثم يوضع رقم هذه البت فى المدخل الأول Destination .مثال :-



CODE

MOV AL,00101000
BSF BL,AL
;Zero Flag is set
;BL contains 3 , the 1-bit position in Al from left
BSR CL,AL
;Zero Flag is set
;CL Contains 4 , the 1-bit position in AL from right



__________________


_________________



معاينة صفحة البيانات الشخصي للعضو

Mostafa.M

avatar
المدير العام
المدير العام

دورة قوية ومفيدة جداً بارك الله فيك وجعلها الله فى ميزان حسناتك

معاينة صفحة البيانات الشخصي للعضو http://www.almoslemon.ahlamontada.net

الرجوع الى أعلى الصفحة  رسالة [صفحة 1 من اصل 1]

صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى