Skip to main content

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


  1. اليوم القبل الأول

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


    - ما هو 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 و بهذا يكون تم إنهاءتنفيذ هذه التعليمه .

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

    1. اليوم الأول

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

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

      1. الدرس الثاني

        كيان الحاسوب الصلب :-
        ---------------------------
        يتألف الحاسوب بشكل أساسي مناللوحة الأم 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 بايت .
        إلى هنا ينتهى الدرس الثانى ،

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


        -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


      1. اليوم الرابع

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


        1. اليوم الخامس
          سنبدأ بتعليمات وأوامر الأسمبلى ،،،
          التعليمات الحسابيه 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 وهى مسئوله - كما توقعتم - على تحميل المسجلات أو أماكن الذاكره بقيم معينه أو محتويات مسجل أوأى قيم أخرى ،،

Popular posts from this blog

ظروفنا ماتستحي وايامنا ماهيب ريف ,,

القصيدة لـ محمد بن الذيب ..... ويقول فيها ظروفنا ماتستحي وايامنا ماهيب ريف = والأرض من كثر القحط ماعاد شفت اعلافها وحقي على البيت القوي ماهو على البيت الضعيف = وإلى بغيت أدمدم الجمه على غرافها خليت شمس العشق مركونه على حد الرصيف = الخطه المحبوكه تحقق جميع اهدافها يا اهل الثنائيات مضمون الثنائه سخيف= أنا لحالي أحكم الدفه مع مجدافها والمعرفي (شرطي) وخاواني ورقيته (عريف) = لكن تجهله العلوم ارباعها وانصافها يبغى يسوي مع جنابي بهرجه وانا مخيف = وهو الى شاف الدروب المستحيله خافها والمختلف مجلة الجمهور والشعر النظيف = ماهي غريبة لالقيتو صورتي في غلافها بس الغريبة يوم مريت الحساء ياهل القطيف = تذكرت عيني مدامعها على مشرافها واليوم مابه عذر يوم ارقاك يالضلع المنيف = الا اني اتعب ارجولي من كثر وقافها واكثر مشاريه الشجر عليك يافصل الخريف = هتكت ستر غصونها واسرفت في كلافها انا جويع وجوعي مواصل ماهو قطعة رغيف = وعيني من الفرقا حداها الهم عن محرافها والعفو عند المقدره صوره من الحب العفيف = هذا كلام اللي قطار العمر كله طافها اخذت فـ أبها شهر كامل يسمونه مصيف = والشمس تحجبها السحابه والرعود خلافها وعي...

رابـــــح صقـــر == انا كـــــــــــــذا

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

احبك ولا ظني ضلوعي تحمل . - محمد عبده

احبك .. احبك احبك ولا ظني ضلوعي تحمل .. أحبك عسى ربي يقوي ضلوعي احبك .. احبك احبك واظن الصبر يا زين كمل .. أحبك ولا موني بحبك أربوعي حبيبي .. حبيبي حبيبي دخيلك في محبك تجمل .. حبيبي ترفق جف منبع دموعي عشيري .. عشيري عشيري عيوني بازرق الدمع همل .. عشيري دموعي بيدي طفن شموعي ظنيني .. ظنيني ظنيني هذا قلبي رجا فيك وأمل .. ظنيني كفاني في هواكم خضوعي مقام: بياتي