هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.



 
الرئيسيةالتسجيلأحدث الصوردخول

 

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

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


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

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

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

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

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

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

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

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

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


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


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


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


الرجوع الى أعلى الصفحة اذهب الى الأسفل
golden flower
مشرفة
مشرفة
golden flower


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

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


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

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

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


إن المسجل 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).

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

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


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

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



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



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



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

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

إذا فهمنا كيف يمكن تحديد العنوان الحقيقي في الشكل السابق ومن المعادلة التي تليه فإنه يمكننا هنا وببساطة تحديد العنوان الفرعي 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 .

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

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

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

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

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


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



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) أو إعطاء ملاحظات مختلفة عليها ، وهذا الحقل يأتي دائماً بعد فاصلة منقوطة (

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


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

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

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


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

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

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

شكرا على مجهولدك
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
الدرس الاول في لغة التجميع
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-

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