الرئيسيةالتسجيلدخول
شاطر | 
 

 الدرس الاول في لغة التجميع

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
golden flower
مشرفة
مشرفة


انثى
عدد الرسائل: 2517
العمر: 26
تاريخ التسجيل: 28/04/2008

مُساهمةموضوع: الدرس الاول في لغة التجميع   السبت مارس 28, 2009 6:18 am

المسجـــلات Registers

مسجلات وحدة المعالجة المركزية (CPU) هي مواقع ذاكرة خاصة بنيت من القلابات Flip Flops ، في الحقيقة إنها ليست جزء من الذاكرة الرئيسية ، ولكنها مخزن بيانات مؤقت خاص بوحدة المعالجة المركزية ، حيث أن لهذه الوحدة أربعة مسجلات بيانات بالضبط من ذوات الستة عشر بتاً .

إن جُل العمليات الحسابية والمنطقية تتم بواسطة هذه المسجلات ، ولكل مسجل من هذه المسجلات اسم خاص يُعرف به بدلاً من عنوانه ، وأسماء هذه المسجلات هي كالتالي :

مسجل المركم AX ، مسجل القاعدة BX ، مسجل العداد CX ، مسجل البيانات DX .

إضافة إلى المسجلات أعلاه التي هي مرئية بالنسبة للمبرمج فإن للمعالج 8086 مسجل اسمه مؤشر الإيعاز IP وهذا المسجل مهمته أنه يشير إلى الإيعاز القادم ، وهناك أيضاً مسجل آخر يدعى بمسجل الحالات Flags وهو مسجل يحمل نتيجة المقارنة بين محتوى مسجلين مثل تحديد أيهما الأكبر أو هل هما متساويان ، حيث أن حالات هذا المسجل مهمة جداً في بناء البرامج كما سنرى في حينه.

ولأن المسجلات موجودة على الرقاقة الإلكترونية للمعالج فأثناء معالجتها بوحدة المعالجة المركزية ستكون أسرع بكثير من استخدام الذاكرة في الحصول على البيانات المطلوبة ، حيث أن الوصول إلى موقع الذاكرة قد يتطلب دورة زمن واحدة أو أكثر بينما الوصول إلى المسجلات قد يأخذ صفراً من عدد دورات الزمن ، ولهذا السبب فيجب دائماً أن نحاول إبقاء المتغيرات في المسجلات بدلاً من استخدام مواقع الذاكرة . وأخيراً يمكننا القول أن المسجلات مازالت تعتبر مكاناً ممتازاً للخزن المؤقت للبيانات .

والشكل التالي يوضح كوكبة هذه المسجلات :





1- مسجلات البيانات Data Registers

2- مسجلات التأشير Pointer Registers

3- مسجلات الفهرسة Index Registers

4- مسجل الحالات Flags Register

5- مسجلات المقاطع Segment Registers

مسجلات الأغراض الخاصة Special Purpose Registers

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

يوجد نوعان من المسجلات الخاصة وهما : مسجل مؤشر الإيعاز IP ومسجل الحالات Flags ، حيث تتمثل وظيفة مسجل مؤشر الإيعاز في أنه يحتوي على الإيعاز الذي ينفذ حالياً . حيث يمكنه الإشارة إلى أي موضع في مقطع شيفرة الذاكرة التي بها (216 ) أي 65,536 موقع ذاكرة مختلف . بينما مسجل الحالات فهو بخلاف المسجلات الأخرى التي تتعامل مع 8 أو 16 بت معاً فإنه وببساطة مجموعة انتقائية من البتات إن جاز التعبير ، هذه البتات تعمل على تحديد الحالة الحالية للمعالج ، فالبرغم من أن عدد هذه البتات هو 16 بت إلاّ أننا نستخدم تسعة فقط من هذه البتات ، أربعة منها شائعة الاستخدام وهي : حالة الصفر ZF ، الحمل CF ، حالة الإشارة SF ، حالة الحمل الفائض OF .

بعد كل هذا الكلام يمكننا أن نستنتج أن باقي المسجلات هي مسجلات أغراض عامة ، وهي موضحة في الفقرة التالية .


مسجلات الأغراض العامة General Purpose Registers



هناك ثمانية مسجلات تستخدم لخدمة الأغراض العامة إن جاز القول وهي : المسجلات AX و BX و CX و DX و SI و DI و BP و SP .

يمكن استخدام العديد من هذه المسجلات بشكل متبادل في العمليات الحسابية ، ولكن هناك العديد من الإيعازات قد تتطلب مسجلاً معيناً لكي تعمل بشكل أكفأ وهذا ما ستلاحظه عندما نتقدم في هذه المواضيع .

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

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

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

- المسجل CX ( العداد ) : اسم هذا المسجل يدل على عمله ، أي أنه يستخدم كعداد ، وغالباً ما نستخدمه لحساب التكرارات في الحلقة أو لتحديد عدد الحروف في السلسلة .

- المسجل DX ( البيانات ) : لهذا المسجل غرضان خاصان وهما : الغرض الأول وهو أنه يحمل الفائض Overflow الناجم عن عملية حسابية معينة ، وثانيهما أنه يحمل عناوين الإدخال والإخراج أثناء دخول البيانات وخروجها ضمن ناقل البيانات I/O Bus كما سنرى في مواضيع متقدمة إن قدر الله لنا ذلك .

- المسجل SI ( مفهرس المصدر ) والمسجل DI ( مفهرس الهدف ) : هذين المسجلين لهما نفس الأغراض الخاصة إذ تستعمل هذه المسجلات كمؤشرات للوصول غير المباشر للذاكرة ، وهذا ما سنراه في الطريقة الرابعة من طرق عنونة الذاكرة ، وأيضاً فإن هذين المسجلين يستخدمان في إيعازات السلاسل للمعالج 8086 .

- المسجل BP ( مؤشر القاعدة ) : هذا المسجل شبيه في عمله بالمسجل BX ، فهو عموماً يستخدم كمتغير محلي في العديد من الإجراءات .

- المسجل SP ( مؤشر المكدس ) : إن هذا المسجل له غرض خاص جداً وهو أنه يُبْقي على برنامج المكدس ، وعادة إننا لا نستخدم هذا المسجل لغرض العمليات الحسابية . إن العمل الصحيح للبرامج يعتمد على استخدام هذا المسجل بعناية .


منقوووووووووووووووووول



_________________
http://gflower.computality.com/
الرجوع الى أعلى الصفحة اذهب الى الأسفل
golden flower
مشرفة
مشرفة


انثى
عدد الرسائل: 2517
العمر: 26
تاريخ التسجيل: 28/04/2008

مُساهمةموضوع: رد: الدرس الاول في لغة التجميع   السبت مارس 28, 2009 6:21 am


عنوان الذاكرة الحقيقي Real Memory Address

وهو عبارة عن عملية تسمح للمعالج الدقيق بعنونة أول 1Mbit من مساحة الذاكرة، حيث أن المعلومات المحتواة في مسجل المقطع عبارة عن ارتباط على النحو التالي :




إن المسجل CS يحفظ الخانات الأربعة العليا ( 16 بت ) من عنوان بداية المقطع الذي يتم جلب الإيعاز منه بواسطة وحدة BIU (Bus Interface Unit ) ، وإن مؤشر الإيعازات IP يحتفظ بعنوان شيفرة التعليمة التالية ضمن مقطع الشيفرة Code Segment ، ويشار إلى محتوى IP بالإزاحة لأن هذه القيمة تضاف إلى عنوان القطاع لتوليد العنوان الحقيقي اللازم والمكون من خمسة خانات ( أي 20 بت) ، وكما ذكرنا سابقاً إن عنوان الذاكرة الحقيقي يمكنه عنونة 1Mbit وذلك وفق العملية التالية : 220 = 1048576 bit = 1Mbit .



مـــلاحـظة

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

المقاطع والعناوين الفرعية Segments and Offsets

إن العنوان الحقيقي عبارة عن ارتباط بين عنوان المقطع Segment Address والعنوان الفرعي Offset address للوصول إلى العنوان الحقيقي ، حيث أن عنوان المقطع يوجد بأحد مسجلات المقاطع Segment Registers التي تعرف بداية عنوان مقطع الذاكرة ( 64KBit).

ولفهم كيف يتم الحصول على العنوان الحقيقي انظر إلى الشكل التالي :




من الشكل أعلاه لنفرض أننا نريد الوصول إلى العنوان 1F000 ، ولكي نصل إلى ذلك يجب علينا الحصول على عنوان بداية المقطع الذي يوجد به العنوان المراد (1000) ، وعندما نحصل على هذا العنوان نضيف إليه العنوان الفرعي (F000 ) الذي يوصلنا إلى العنوان المرغوب والذي هو 1F000 حيث أن هذا العنوان يمكن أن يكون موقع لبرنامج ما أو إيعاز ما أو أية بيانات أخرى. مع ملاحظة أنه في الشكل أعلاه نرى أنه يمكن عنونة جزء من الذاكرة لا يتعدى 1 ميقا بت كما أشرنا إلى ذلك سابقاً ، أيضاً يمكننا ملاحظة أن الجزء المضلل والذي بحجم 64 كيلو بت هو الحجم الأقصى لمقطع الذاكرة حيث يبدأ من العنوان 10000 إلى العنوان 1FFFF وإذا طرحنا البداية من النهاية سنحصل على الحجم FFFF ، وهذه القيمة تمثل 64 كيلو بت.

مما سبق يمكننا استنتاج أن العنوان الحقيقي Physical Address هو عبارة عن علاقة صيغت كالتالي:



Physical Address = (Segment Reg.)*10 + Offset Reg.



مع ملاحظة أن العنوان الحقيقي يختصر دائماً بالصيغة PA



مـــــــثال: حدد العنوان الفرعي لكل الحالات في الجدول التالي ؟



إذا فهمنا كيف يمكن تحديد العنوان الحقيقي في الشكل السابق ومن المعادلة التي تليه فإنه يمكننا هنا وببساطة تحديد العنوان الفرعي Offset Address وذلك ضمن المعطيات التي في السؤال .

ففي الحالة الأولى إذا أخذنا عنوان النهاية Ending Address وهو 2FFFFH (مع ملاحظة أن الحرف H هنا يعني أن القيمة هي بالنظام السادس عشر وليس ضمن القيمة !) وطرحنا منه عنوان البداية Starting Address وهو 20000H ، وعندها سنحصل على 0FFFFH وبإزالة الصفر الذي على أقصى اليسار سنحصل على عنوان فرعي قيمته FFFFH . مع ملاحظة أن عنوان البداية هو عبارة عن ضرب مسجل المقطع ( 16بت ) بالقيمة 10 لكي نحصل على عنوان بداية بطول 20 بت وبعد أن أنجزنا ذلك أضفنا العنوان الفرعي FFFFH إلى عنوان بداية المقطع لكي نحصل على العنوان المطلوب ، وإذا دققنا قليلاً سنلاحظ أن القيمة FFFFH والتي تمثل العنوان الفرعي هي في الحقيقة أقصى قيمة في هذا المقطع Segment وذلك لأن أقصى حجم يمكن أن يأخذه مقطع الذاكرة هو 64 كيلو بت والتي تمثل FFFFH .

وبنفس الشيء لباقي الحالات التي في الجدول .

إذا فهمنا كيف يمكن تحديد العنوان الحقيقي في الشكل السابق ومن المعادلة التي تليه فإنه يمكننا هنا وببساطة تحديد العنوان الفرعي Offset Address وذلك ضمن المعطيات التي في السؤال .

ففي الحالة الأولى إذا أخذنا عنوان النهاية Ending Address وهو 2FFFFH (مع ملاحظة أن الحرف H هنا يعني أن القيمة هي بالنظام السادس عشر وليس ضمن القيمة !) وطرحنا منه عنوان البداية Starting Address وهو 20000H ، وعندها سنحصل على 0FFFFH وبإزالة الصفر الذي على أقصى اليسار سنحصل على عنوان فرعي قيمته FFFFH . مع ملاحظة أن عنوان البداية هو عبارة عن ضرب مسجل المقطع ( 16بت ) بالقيمة 10 لكي نحصل على عنوان بداية بطول 20 بت وبعد أن أنجزنا ذلك أضفنا العنوان الفرعي FFFFH إلى عنوان بداية المقطع لكي نحصل على العنوان المطلوب ، وإذا دققنا قليلاً سنلاحظ أن القيمة FFFFH والتي تمثل العنوان الفرعي هي في الحقيقة أقصى قيمة في هذا المقطع Segment وذلك لأن أقصى حجم يمكن أن يأخذه مقطع الذاكرة هو 64 كيلو بت والتي تمثل FFFFH .

وبنفس الشيء لباقي الحالات التي في الجدول .



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

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




إن الشكل العام للتعليمة في لغة التجميع يكون على الصورة التالية :



Label: Operation Operands ; comment



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

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

وإن اختيار اسم العلامة يجب أن يخضع لشروط معينة وهي شروط تكوين الأسماء في لغة التجميع 8086 وهــي كالتالي:

1. يتكون الاسم من الحروف A-Z .

2. الأرقام من 0 إلى9 .

3. الرموز الخاصة مثل @ ، - ، $ ، . . . ؟ ويجب ألاّ يكون ذلك الاسم من الرموز المحجوزة في اللغة مثل أسماء المسجلات المختلفة وغيرها .

أما حقل الـ Operation فهو الاختصار الرمزي لأسم العملية المطلوب تنفيذها من قبل المعالج ويمكن لهذا الاختصار أن يتكون من حرفين حتى ثمانية أحرف .

وبالنسبة لحقل المعاملات Operands فهي تلك المعاملات المطلوب إجراء العمليات عليها ويمكن أن يحتوي حقل المعاملات على معاملين أو معامل واحد ويمكن أيضاً ألاّ يحتوي على أي معامل ، أما في حالة ما إذا وُجد في حقل المعاملات معاملين فتوضع فاصلة بينهما ويسمى المعامل القريب من التعليمة بمعامل الهدف Destination والمعامل الذي يلي الفاصلة بمعامل المصدر Source ، ويكون الشكل العام لهذا النوع من التعليمات كالشكل السابق مع تغيير حقل المعاملات Operands بالمعاملين الهدف والمصدر بهذه الصيغة :



Label: Operation Destination, Source ; comment



أما حقل الملاحظات Comments فهو حقل اختياري في جميع التعليمات (أي يمكننا أن نهمله) ويستخدم لوصف العملية التي يجريها ذاك الإيعاز(Operation) أو إعطاء ملاحظات مختلفة عليها ، وهذا الحقل يأتي دائماً بعد فاصلة منقوطة (


_________________
http://gflower.computality.com/
الرجوع الى أعلى الصفحة اذهب الى الأسفل
ضوء المكان
عضو ملكي
عضو ملكي


انثى
عدد الرسائل: 1201
العمر: 25
تاريخ التسجيل: 06/11/2008

مُساهمةموضوع: رد: الدرس الاول في لغة التجميع   الإثنين مارس 30, 2009 8:12 pm

رااااااااااااااااااااااااااااااااااااااااااااااااااااااااائع ياجولدن
شكرا ليكي
الرجوع الى أعلى الصفحة اذهب الى الأسفل
سمسمة
مشرفة
مشرفة


انثى
عدد الرسائل: 4401
العمر: 25
تاريخ التسجيل: 03/07/2008

مُساهمةموضوع: رد: الدرس الاول في لغة التجميع   الأربعاء أبريل 01, 2009 7:53 am

جميل اووووووووى ياجودلن

شكرا على مجهولدك

_________________
لا تتعجب إذا رأيتني أضحك يوماً وأبكي
يوماً ... فأنا كالورد ... يومـًا أزين
عرسـًا ... ويوما أزين قبراً.....
----------------------------

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

الدرس الاول في لغة التجميع

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

 مواضيع مماثلة

-
» الدرس الأول تاريخ للصف الثالث الأعدادي
» الدرس 5 للجدع المشترك اداب علوم الحياة والأرض
» سيرفر جوبا الاول في العرب
» تاريخ الصف الاول الثانوى 2015

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