سوني اركسون SONY ERICSSON


 
الرئيسيةس .و .جبحـثالتسجيلقائمة الاعضاءالمجموعاتدخول
شاطر | 
 

 لغة التجميع و المعالجات الدقيقة

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
انتقل الى الصفحة : 1, 2, 3, 4  الصفحة التالية
كاتب الموضوعرسالة
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:38 pm



لغة التجميع و المعالجات الدقيقة

Assembly Language Programming and Microprocessors

الفصل الأول


مقدمة

في هذه المحاضرات سنتناول موضوع المعالجات الدقيقة وبرمجتها وسيتم التركيز علي المعالجات المستخدمة في الأجهزة الشخصية Personal Computers وهي المعالجات المصنعة بواسطة شركة Intel والمعالجات المتوافقة معها. وقد تمت الاستعانة بمجموعة من المراجع التي تغطي هذا الموضوع ولكن تم اعتماد المرجع الأول و هو كتاب Assembly Language Programming and Organization of The IBM PC كمرجع أساسي تم اللجوء إليه بصورة أساسية في كتابة هذه المادة هذا بالإضافة إلي مجموعة المراجع الأخرى والتي تم توضيحها في نهاية المادة



الخلفية المطلوبة
Background

يجب الإلمام جيدا بكيفية التعامل مع الأنظمة الرقمية المختلفة وبالذات النظام الثنائي والسداسي عشري وإجادة التعامل مع العمليات الحسابية المختلفة من جمع وطرح وضرب وقسمة للأرقام المختلفة في تلك الأنظمة.

كذلك يجب التعرف علي إحدى لغات البرمجة العليا علي الأقل ويفضل أن تكون إحدى اللغات التي تستعمل الهيكلة Structured Programming Language مثل الباسكال والسي ولكن يمكن بسهولة فهم البرامج بمجرد الإلمام بأي من لغات البرمجة العليا الأخرى. والهدف من ذلك هو كتابة بعض البرامج من خلال استعراض لغة التجميع ويفضل أن تكون لدينا بعض مهارات البرمجة المختلفة.


:

الفصل الثاني : يتناول المعالجات الدقيقة بصورة عامة والمعالجات المنتجة بواسطة شركة Intel بصورة خاصة ثم يتعرض للتركيب الداخلي للمعالج 8088 والمسجلات المختلفة به وطريقة التخاطب مع الذاكرة.

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

الفصل الرابع: يتم فيه التعرف علي مسجل البيارق Flag Register وتأثر البيارق بالعمليات المختلفة وتوضيح حالات الفيضان المختلفة التي قد تحدث بعد تنفيذ عملية محددة.

الفصل الخامس: يتم فيه توضيح أوامر التفرع المختلفة وبعدها يتم التعرف علي كيفية تحويل البرامج الصغيرة من البرامج ذات المستوي العالي High Level Language ويتضمن ذلك تحويل أوامر التفرع والتكرار المختلفة إلى لغة التجميع. بعد ذلك تتم كتابة أحد البرامج الكبيرة نسبياً وتوضيح كيفية تحليل البرنامج إلى مرحلة الكتابة للبرنامج

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

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

الفصل الثامن: يتم فيه التعرف علي أوامر الضرب والقسمة واستخدام البرامج الفرعية عن طريق كتابتها في ملف مختلف. ويتم كتابة برامج فرعية تقوم بقراءة أرقام عشرية من لوحة المفاتيح وطباعتها في الشاشة.

الفصل التاسع: يتم فيه التعرف علي أنماط العنونة المختلفة والمستخدمة في لغة التجميع كما يتم التعرف علي طريقة التعامل مع المصفوفات المختلفة.

الفصل العاشر: يتم فيه التعرف علي أوامر التعامل مع النصوص وسلاسل الحروف Strings.




الهدف من المادة



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


عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:12 pm عدل 6 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:42 pm

الفصل الثاني
المعالجات وتنظيم الحاسب الشخصي
مقدمة:

تعتمد الأجهزة المتوافقة مع نظام IBM على المعالجات من عائلة المعالج Intel. في هذا الفصل سيتم عرض عام للمعالجات من عائلة المعالج 8086 في الجزء الأول حيث يتم التعرف على المعالج 8086 مع توضيح المسجلات المختلفة و استخدامات كل مسجل ثم يتم توضيح عملية تقسيم الذاكرة إلي قطاعات Segments.

عائلة المعالجات Intel 8086

تعتمد الحاسبات الشخصية المتوافقة مع IBM على المعالجات من النوع Intel وهي تشمل المعالجات 8086 و 8088 و 80286 و 80386 و 80486 و أخيراً المعالج Pentium حيث يتم استخدام المعالج لبناء نظام حاسوب بخصائص محددة كما في حالات استخدام المعالج 8088 لبناء الحاسوب من النوع IBM PC و استخدام المعالج 80286 لبناء الحاسوب المسمى XT ( eXtended Technology ) كما تم بناء النظام AT ( Advanced Technology ) مع ظهور المعالج 80386.

ثم بعد ذلك ونتيجة لأهمية وضع نظم ثابتة ومعرفة للجميع ظهرت أنظمة ISA (Industry Standard Arch.) و EISA ( Extended ISA ) وهي أنظمة تستعمل المعالجين 80386 و 80486.

مع ظهور المعالج الجديد والمسمي Pentium ظهرت الحاجة لأنظمة جديدة ذات سرعة عالية فظهرت أنظمة الناقل المحلي Local Bus Systems مثل نظام PCI ونظام VESA وذلك للاستفادة من الإمكانات الجديدة للمعالج.

مما يجدر ذكره أن المعالجات من عائلة Intel حافظت على التوافقية في تصميم المعالجات بحيث يتم استيعاب وتنفيذ البرامج التي تمت كتابتها لتعمل مع المعالجات القديمة في المعالجات الجديدة بدون مشاكل وهو ما يسمى بتوافقية البرامج Software Compatibility وهي ميزة كبيرة في التصميم حيث تم الاحتفاظ بالبرامج القديمة دون أي تعديل مع إمكانية تشغيل البرامج الجديدة ذات الإمكانات الجديدة والتي لم تكن موجودة في المعالجات القديمة. فيما يلي سنتناول المعالجات المختلفة بشيء من التفصيل وذلك بتوضيح الخصائص العامة للمعالج من حيث طول الكلمة Word Length وأقصي قيمة للذاكرة بالإضافة لبعض الخصائص العامة.




[b]المعالج 8086 والمعالج 8088


قامت شركة Intel في عام 1978 بطرح المعالج 8086 وهو معالج يتعامل مع كلمة بطول 16-bits (يتم التعامل 16-bitفي المرة الواحدة ).بعد ذلك وفي سنة 1979 تم طرح المعالج 8088 وهو مشابه للمعالج 8086 من ناحية التركيب الداخلي ولكنه مختلف عنه في التعامل العام الخارجي حيث يتم فيه التعامل الخارجي بكلمه طولها 8-bits بينما يتعامل المعالج 8086 باستخدام نبضة سريعة وبالتالي فان أداءه افضل (زيادة سرعة النبضة تعنى زيادة[/b]


عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:13 pm عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:45 pm



التردد وبالتالي نقصان الزمن اللازم لتنفيذ أمر محدد ويتم تعريف سرعة المعالج بتحديد التردد الأقصى الذي يعمل به وتقاس وحدة التردد بالميجاهيرتز MHz).

قامت شركة IBM باختيار المعالج 8088 لبناء الحاسب الشخصي IBM PC وذلك لسهولة التعامل معه بالإضافة إلي رخص التكلفة حيث كان من المكلف في ذلك الوقت بناء الحاسب على المعالج 8086 ذات الـ16-bit وذلك بسبب ارتفاع تكلفة بناء نظام بوحدات مساعده تتعامل مع كلمة بطول 16-bit في ذلك الزمن.

يتعامل المعالجان 8086 و8088 بنفس التعليمات وهما يمثلان نقطة البداية التي بدأت منها المعالجات الجديدة والتي يتم استعمالها في أجهزة الحاسب الشخصية وبالتالي فان البرامج التي تعمل على المعالجين 8086 و 8088 مازالت صالحة للعمل في المعالجات الجديدة وهو ما أسميناه بالتوافقية في البرامج.



المعالجان 80186 و 80188

يعتبر المعالجان 80186 و 80188 تطويراً للمعالجين 8086 و 8088 وذلك عن طريق تنفيذ كل التعليمات التي كانت مستخدمة في المعالجات القديمة بالإضافة إلي بعض الأوامر المختصة بالتعامل مع بعض الوحدات المساعدة Support Chips.كذلك تمت إضافة بعض الأوامر الجديدة وهى ما تسمى بال Extended Instruction. وعموماً لـم يتم استعمال المعالجين في الأجهزة بصورة كبيرة وذلك نسبة لعدم وجود فارق كبير عن سابقيهما بالإضافة إلى ظهور المعالج الجديد 80286 في الأسواق.







المعالج 80286 :-

تم طرح المعالج 80286 في سنة 1982 م وهو معالج يتعامل مع كلمة بطول 16 Bits ولكنه أسرع بكثير من المعالج 8086 حيث تصل سرعته إلي 12.5 MHZ وذلك مقارنة مع 10 MHZ للمعالج 8086. كذلك تميز المعالج 80286 بالمزايا التالية :-

1 - نمطين للأداء Two Modes Of Operations

المعالج 80286 يمكنه العمل في نمطين وهما النمط الحقيقي Real Mode والنمط المحمى Protected Mode.

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



عدل سابقا من قبل zakagadir في الأربعاء فبراير 20, 2008 2:54 am عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:48 pm





محددة من الذاكرة لكل برنامج على حدة ومنع البرنامج من التعامل مع مناطق الذاكرة التي تخص البرنامج الآخر.

2 - ذاكرة أكبر :-

يمكن للمعالج 80286 التخاطب مع ذاكرة تصل إلي 16 MByte وذلك في النمط المحمى (مقابل 1 MBYTE للمعالج 8086 ).

3 - التعامل مع الذاكرة الافتراضية :-

حيث يتم ذلك في النمط المحمى وذلك بإتاحة الفرصة للمعالج للتعامل مع وحدات التخزين الخارجية لتنفيذ برامج كبيرة تصل لـ 1 GBYTE (لاحظ أن أقصى قيمة للذاكرة هي 16 MBYTE فقط) وسيتم التحدث عن هذه الطريقة بالتفصيل في مادة نظم التشغيل.

المعالج 80386 :-

في عام1985 تم إنتاج أول معالج يتعامل مع كلمة بطول 32 BITS وهو المعالج 80386 وهو أسرع بكثير من المعالج 80286 وذلك لمضاعفة طول الكلمة (من 16_BIT إلى32_BIT) ونسبة للسرعة الكبيرة التي يتعامل بها المعالج والتي تصل إلي 40 MHZ فإنه يقوم بتنفيذ عدد كبير من الأوامر في عدد أقل من عدد النبضات التي يستغرقها المعالج 80286.

يستطيع المعالج 80386 التعامل مع النمط الحقيقي والنمط المحمى حيث يعمل في النمط الحقيقي كالمعالج 80386 وفي النمط المحمى كالمعالج 80286. ذلك بالإضافة إلي نمط جديد يسمى بالنمط الافتراضي للمعالج 8086 (VIRTUAL 8086 MODE ) وهو نمط مصمم لجعل أكثر من برنامج من برامج المعالج 8086 تعمل في الذاكرة في وقت واحد.

يستطيع المعالج 80386 التعامل مع ذاكرة يصل حجمها إلي 4 Gbytes وذاكرة افتراضية يصل حجمها إلى 64 T BYTES.

توجد كذلك نسخة رخيصة من المعالج تسمى 80386SX وهى تحتوى على نفس الشكل الداخلي للمعالج 80386 ولكنها خارجيا تتعامل مع 16 BITS .



المعالج80486 :-

في عام 1989 ظهر المعالج 80486 وهو عبارة عن نسخة سريعة من المعالج 80386 حيث يحتوى على كل مزايا المعالج 80386 بالإضافة للسرعة الكبيرة وتنفيذ الكثير من الأوامر المستخدمة بكثرة في نبضة واحدة فقط كذلك احتوائه على المعالج المساعد 80387 والمختص بالعمليات الحسابية التي تحتوى على أعداد حقيقية حيث كانت هذه العمليات تستغرق وقتاً طويلاً من المعالج 80386 مما تطلب وجود المعالج 80387 والذي يسمي بالمعالج المساعد الرياضي Math. Co_Processor وقد تم دمج هذا المعالج مع المعالج 80386 بالإضافة إلي ذاكرة صغيرة تسمي بالـ Cache Memory (وهي ذاكرة ذات زمن وصول صغير جداً ويتم استخدامها كوسيلة لتبادل البيانات بين الذاكرة العادية والمعالج الدقيق)وحجمها 8 Kbytes.

يعتبر المعالج 80486 أسرع من المعالج 80386 والذي يعمل على نفس التردد بحوالي ثلاث مرات. هذا بالإضافة إلي أن المعالج 80486 يعمل على ترددات (سرعات) عالية جداً تصل إلي 100 M Hz.



عدل سابقا من قبل zakagadir في الأربعاء فبراير 20, 2008 2:56 am عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:50 pm



أما المعالج 80486SX فهو كالمعالج 80486 تماماً من حيث العمل الداخلي فيما عدا أنه لا يحتوي على معالج رياضي داخله. وقد ظهرت عدة إصدارات من المعالج 80486 ولكن لا توجد اختلافات جوهرية كبيرة بينها والمجال هنا لا يتسع لذكرها.



المعالج Pentium

المعالج Pentium هو آخر إصدارات شركة Intel وهو أول معالج يتعامل مع كلمة بطول 64 Bits بالإضافة إلي السرعة العالية جداً التي يعمل بها مقارنة بالمعالج 80486 هذا بالإضافة إلي زيادة حجم الذاكرة الداخلية Cache Memory.

وقد ظهرت إصدارات مختلفة للمعالج Pentium ازدادت فيها سرعة المعالج وتمت إضافة إمكانات إضافية إليه فيها مثل MMX والذي يمتاز بأن به أوامر للتعامل مع الوسائط المتعددة.



التركيب الداخلي للمعالج 8088 والمعالج 8086



في هذا الجزء سيتم التعرف على التركيب الداخلي للمعالج وذلك عن طريق التعرف على المسجلات المختلفة الموجودة داخل المعالج ووظيفة كل مسجل وسيتم في الأجزاء التالية مناقشة الأوامر المختلفة التي يتم استخدامها في التعامل مع المعالج. ونسبة لتوافقية البرامج التي تم الحفاظ علىها في المعالجات الجديدة سنجد أن هذه التعليمات يمكن استخدامها مع المعالجات الحديثة وحتى الـ Pentium.
المسجلات



يتم تخزين البيانات داخل المعالج في المسجلات، ويتم تقسيم المسجلات إلى:

مسجلات بيانات: ويتم فيها التعامل مع البيانات من حيث التخزين وإجراء العمليات الحسابية والمنطقية.

مسجلات عناوين: ويتم فيها تخزين العناوين المختلفة.

مسجل الحالات: وهو يحتوي على حالة المعالج بعد تنفيذ أمر محدد.

ويحتوي المعالج على عدد 14 مسجل وسنقوم في الجزء التالي بتوضيح أسماء ووظيفة كل مسجل.

مسجلات البيانات DX,CX,BX,AX

يتم استخدام هذه المسجلات الأربعة في التعامل مع البيانات داخل المعالج و يمكن للمبرمج التعامل مباشرة مع هذه المسجلات. وبالرغم من أن المعالج يستطيع أن يتعامل مع بيانات في الذاكرة إلا أن التعامل مع المسجلات يكون أسرع بكثير من التعامل مع الذاكرة (يلزمه عدد اقل من النبضات) وبالتالي نفضل دائماً التعامل مع المسجلات لسرعتها. وهذا سبب زيادة عدد المسجلات في المعالجات الحديثة.
يمكن التعامل مع كل من هذه المسجلات على أنه وحده واحدة بحجم 16-BITS أو على وحدتين كل واحدة بسعة 8-BITS إحداهما العليا HIGH و الثانية المنخفضة LOW مثلا يمكن التعامل مع المسجل AX على انه مسجل بحجم 16-BITS أو التعامل مع النصف العلوي (HIGH) AH على انه مسجل 8-BITS و المسجل المنخفض AL (LOW) على أنه مسجل .8-BITS وبالمثل مع المسجلات D,C,B و



عدل سابقا من قبل zakagadir في الأربعاء فبراير 20, 2008 2:57 am عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:52 pm



بالتالي يصبح لدينا 8 مسجلات من النوع 8-BITS أو أربعة مسجلات من النوع 16-BITS.

بالرغم أن المسجلات الأربعة ذات استخدامات عامه GENERAL PURPOSE REGISTERS بحيث يمكن استخدامها في أي استخدامات عامه إلا أن لكل مسجل استخداماً خاصاً نتناوله في الجزء التالي:





1-المسجل (Accumulator) AX

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

2-المسجل (Base Register) BX

يستخدم المسجل BX في عنونه الذاكرة حيث تتطلب بعض العمليات التعامل مع الذاكرة بمؤشر محدد ويتم تغيير قيمه المؤشر لإجراء عمليه مسح لجزء محدد من الذاكرة كما سنرى فيما بعد.

3-المسجل (Count Register) CX

يتم استخدام المسجل CX كعداد للتحكم بعدد مرات تكرار مجموعه محدده من التعليمات.كذلك يتم استخدامه في تكرار عمليه دوران مسجل لعدد محدد من المرات.

4-المسجل (Data Register )DX

يتم استخدامه في عمليات الضرب والقسمة كذلك يتم استخدامه كمؤشر لموانئ الإدخال والإخراج عند استخدام عمليات الإدخال والإخراج.



مسجلات المقاطع CS, DS, SS, ES

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

نعلم أن المعالج 8088 يتعامل مع 20 إشارة عناوين ( ناقل العناوين Address Bus يحتوي على 20 إشارة) وبالتالي يمكن مخاطبة ذاكرة تصل إلى 220 = 1,048,576 أي 1 Mbytes.

ونجد أن عناوين أول 5 خانات في الذاكرة هي :

00000 h = 0000 0000 0000 0000 0000

00001 h = 0000 0000 0000 0000 0001

00002 h = 0000 0000 0000 0000 0010

00003 h = 0000 0000 0000 0000 0011

00004 h = 0000 0000 0000 0000 0100



عدل سابقا من قبل zakagadir في الأربعاء فبراير 20, 2008 2:58 am عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:53 pm



ولأن العناوين في الصورة الثنائية تكون طويلة جداً فمن الأسهل التعامل مع العناوين بكتابتها في الصورة السداسية عشر وبالتالي يكون عنوان أول خانة في الذاكرة هو 00000h وعنوان آخر خانة هو FFFFFh.

مما سبق يتضح أن العنوان يتكون من 20 خانة بينما كل المسجلات الموجودة داخل المعالج ذات طول مقداره 16 خانة فقط مما يجعل مخاطبة الذاكرة كلها مستحيلة باستخدام مسجل واحد فقط ( لاحظ أن المسجل الواحد باستطاعته مخاطبة ذاكرة تصل إلي 64 Kbytes فقط ) ونتيجة لظهور هذه المشكلة تم تقسيم الذاكرة إلي مجموعة من المقاطع Segments كل مقطع بسعة 64 K Bytes كما سنوضح في الجزء التالي.


مقاطع الذاكرة



مقطع الذاكرة هو جزء متصل بطول 216 = 64 Kbytes وكل مقطع في الذاكرة يتم تحديده برقم محدد يسمي رقم المقطع Segment Number وهو رقم يبدأ بالرقم 0000h وينتهي بالرقم FFFFh.

بداخل المقطع يتم تحديد العنوان بواسطة إزاحة محددة Offset وهذه الإزاحة عبارة عن بُعد الموقع المحدد من بداية المقطع وهو رقم بطول 16 Bytes أي تتراوح قيمته بين الرقمين 0000h و FFFFh.

وبالتالي لتحديد عنوان محدد في الذاكرة يجب توضيح قيمة كل من المقطع والإزاحة وبالتالي تتم كتابة العنوان على الصورة:
Segment : Offset



وهو ما يسمي بالعنوان المنطقي Logical Address فمثلاً العنوان AABB:5566 يعني الإزاحة 5566 داخل المقطع AABB.

للحصول على العنوان الفيزيائي يتم ضرب قيمة المقطع في الرقم 16 ( إزاحته لليسار بمقدار أربعة خانات ثنائية أو خانة واحدة سداسية عشر) ويتم بعد ذلك إضافة قيمة الإزاحة إليه وبالتالي فإن العنوان الفيزيائي المناظر للعنوان AABB:5566 هو:








1

1

1



0

B

B

A

A



6

6

5

5


+

(العنوان الفيزيائي بطول 20 خانة)

6

1

1

0

B

=



وبالتالي يصبح العنوان الفيزيائي = رقم المقطع × 16+ قيمة الإزاحة = B0116





عدل سابقا من قبل zakagadir في الأربعاء فبراير 20, 2008 3:00 am عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الثلاثاء فبراير 19, 2008 4:56 pm



مواضع المقاطع
LOCATIONS OF SEGMENTS

يتضح مما سبق أن المقطع الأول في الذاكرة يبدأ بالعنوان 0000:0000 أي 00000 وآخر عنوان داخل المقطع هو العنوان 0000:FFFF أي العنوان 0FFFF بينما يبدأ المقطع الثاني في العنوان 0001:0000 أي العنوان 00010 وينتهي بالعنوان 0001:FFFF أي العنوان 1000F. وكما نرى فإن هناك كثيراً من التداخل في المقاطع داخل الذاكرة. الشكل(1) يوضح الذاكرة وعناوين المقاطع المختلفة بداخلها:


محتويات الذاكرة

العنوان


45

1001F


نهاية المقطع رقم 2





عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:14 pm عدل 2 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الأربعاء فبراير 20, 2008 3:06 am



……..


45

1000F


نهاية المقطع رقم 1

……..


35

0FFFF


نهاية المقطع رقم 0

……..





29

00020


بداية المقطع رقم 2



76

00010


بداية المقطع رقم 1



54

00000


بداية المقطع رقم 0



الشكل ( 1 )

في الشكل(1) يتضح أن المقطع يبدأ بعد كل 16 خانة في الذاكرة. وعلى ذلك تسمى كل 16 خانة في الذاكرة بفقرة Paragraph. ويسمى أي من العناوين التي تقبل القسمة على العدد 10h بحدود الفقرات Paragraph Boundaries.

ولأن هنالك تداخلاً في القطاع فان تحديد العنوان الفيزيائي قد يتم بأكثر من طريقة أي عن طريق اكثر من تشكيلة في عنوان المقطع وعنوان الإزاحة. والأمثلة التالية توضح ذلك :


عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:15 pm عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الأربعاء فبراير 20, 2008 3:07 am



مثال
:- قم بتحديد قيمة الإزاحة المطلوبة لتحديد العنوان 1256A وذلك في :

أ- القطاع 1256 ب- القطاع 1240

الحل :

يتم استعمال المعادلة : العنوان = المقطع *16 + الإزاحة

أ- افترض أن قيمة الإزاحة المطلوبة X بالتعويض في المعادلة نجد أن

X +10h*1256 = 1256A

X +12560 = 1256A

X = 000A

وبالتالي فان العنوان هو 1256:000A



ب – بإتباع نفس الطريقة التي اتبعناها في الجزء السابق

افترض أن قيمة الإزاحة المطلوبة X بالتعويض في المعادلة نجد أن

X +10h *1240 = 1256A

X +12400 = 1256A

X = 016A

وبالتالي فان العنوان هو 1240:016A

أي أن العنوانين يشيران إلي نفس العنوان في الذاكرة
1256A = 1256:000A = 1240:016A



من الممكن أيضاً معرفة رقم المقطع بمعرفة العنوان الفيزيائي وقيمة الإزاحة كما في المثال التالي :
مثال



ما هو عنوان المقطع لتحديد العنوان 80FD2h إذا كانت الإزاحة تساوي 8FD2h

باستعمال المعادلة : العنوان = المقطع *16 + الإزاحة، نجد أن



عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:16 pm عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الأربعاء فبراير 20, 2008 3:09 am



80FD2h = قيمة مسجل المقطع * 10h + BFD2h



قيمة مسجل المقطع = 7500h



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

يتم وضع البرنامج في مقطع البرنامج Code Segment ووضع البيانات في مقطع البيانات Data Segment وكذلك المكدس حيث له مقطع المكدس Stack Segment ولدينا مقطع إضافي يسمي بالـ Extra Segment.



مسجل مقطع البرنامج Code Segment Register (CS)

يحتوي هذا المسجل على عنوان مقطع البرنامج Code Segment Address حيث يتم تحديد مقطع محدد في الذاكرة يتم وضع البرنامج فيه، بعد ذلك يلزم تعريف ذلك العنوان للمعالج حيث سيتم تنفيذ البرنامج؛ لذلك يجب تحديد عنوان هذا المقطع ووضعه في مسجل خاص يسمي بمسجل مقطع البيانات Code Segment Register (CS) ويتم تحديد قيمة الإزاحة باستخدام مسجل مؤشر التعليمات Instruction Pointer والذي سيتم التحدث عنه لاحقاً.



الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الأربعاء فبراير 20, 2008 3:10 am


مسجل مقطع البيانات
Data segment Register (DS)

يحتوي هذا المسجل على عنوان مقطع البيانات Data Segment Address حيث يتم تعريف البيانات التي يتعامل معها البرنامج في منطقة محددة من الذاكرة ( وتسمي مقطع البيانات ) ويتم تحديد عنوان هذا المقطع ووضعه في المسجل DS. بعد ذلك يمكن مخاطبة الذاكرة والتعامل مع المتغيرات المختلفة باستخدام مسجلات أخري تحوي قيمة الإزاحة المطلوبة.

[b]مسجل مقطع المكدس
Stack Segment Register (SS)

يتم تحديد جزء من الذاكرة والتعامل معه كمكدس حيث يعمل المكدس بطريقة (Last In First Out ( LIFO )ويتم استعماله في مجموعة من العمليات أهمها عملية النداء لبرامج فرعية كما سنرى لاحقاً ويتم استعمال مجموعة المسجلات لتحوي قيمة الإزاحة ومن أهمها مؤشر المكدس Stack Pointer (SP).

[u]مسجل المقطع الإضافي
Extra Segment Register (ES)

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



[u]مسجلات المؤشرات والفهرسة
Index and Pointer Registers (SP, BP, SI, DI)

[/u][/u][/b]
[u]
[/u]


عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:17 pm عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الأربعاء فبراير 20, 2008 3:10 am



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

مؤشر المكدس Stack Pointer (SP)

يتم استخدام هذا المسجل مع مقطع المكدس وسيتم التحدث بالتفصيل عن المكدس في الفصول القادمة.

مؤشر القاعدة Base Pointer (BP)

يتم استخدام هذا المسجل أساساً للتخاطب مع البيانات الموجودة في المكدس ولكنه عكس مؤشر المكدس حيث يمكن استخدامه لمخاطبة الذاكرة في مقاطع أخري غير مقطع المكدس.

مسجل فهرسة المصدر Source Index (SI)

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

مسجل فهرسة المستودع Destination Index (DI)

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

مؤشر التعليمات أو الأوامر Instruction Pointer (IP)

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

يتم تخزين الإزاحة للأمر المطلوب تنفيذه في مؤشر التعليمات أو الأوامر Instruction Pointer (IP) حيث يتم ذلك في مقطع البرنامج Code Segment وبالتالي فإن عنوان الأمر المطلوب تنفيذه هو CS:IP. ولا يمكن مخاطبة مؤشر التعليمات مباشرة من داخل البرنامج وإنما يتم تغيير قيمته بطريقة غير مباشرة مثل حالات التفرع إلي عنوان محدد حيث يتم وضع قيمة ذلك العنوان في مؤشر التعليمات وذلك في حالة حدوث عملية التفرع
.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الأربعاء فبراير 20, 2008 3:11 am



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

المقاطعة Interrupt Flag ووضع القيمة صفر فيه وبالتالي فإننا نطلب من المعالج أن يتجاهل نداءات



المقاطعة الواردة إليه من لوحة المفاتيح مثلاً ( أي لا يتم استقبال مدخلات من لوحة المفاتيح ) وسيتم التحدث عن هذه البيارق بالتفصيل لاحقاً.



عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:18 pm عدل 1 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
zakagadir
Admin


عدد المساهمات: 3267
تاريخ التسجيل: 16/11/2007

مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   الأربعاء فبراير 20, 2008 3:12 am


تنظيم الذاكرة في الحاسب الشخصي

Memory Organization

يتعامل المعالج 8088 مع ذاكرة بطول 1Mbyte.ولا يمكن استخدام كل الذاكرة في البرامج التي يتم كتابتها ولكن هناك مناطق في الذاكرة محجوزة لأغراض محددة فمثلا لدينا الجزء الأول من الذاكرة بطول 1KByte محجوز لعناوين نداءات المقاطعة Interrupt Vector Table كذلك هناك أجزاء مخصصة لبرامج النظام الأساسي للإدخال والإخراج BIOS والذي يقوم بعمليات الإدخال و الإخراج في الجهاز؛ و يتم تخزينه داخل ذاكرة قراءة فقط ROM (READ ONLY MEMORY) وهو الذي يقوم ببدء تشغيل الجهاز في المرحلة الأولى.

كذلك توجد منطقة في الذاكرة مخصصة لوحدة العرض الشاشة (VIDEO DISPLAY MEMORY).

[b]

[b]موانئ الإدخال والإخراج
I/O PORTS

يتعامل المعالج 8088 مع 64KB من عناوين الإدخال والإخراج وذلك للتعامل مع الأجزاء الإضافية والخارجية. وعموما لا يفضل التخاطب مع موانئ الإدخال والإخراج مباشرة إلا في بعض الحالات الخاصة وذلك بسبب احتمال تغير العناوين في بعض الأجهزة ويفضل أن يتم التعامل مع الأجهزة عن طريق نداءات لنظام التشغيل ليقوم هو بهذه المهمة.



[b]تمارين


1-ما هو الفرق بين المعالج 80286 والمعالج 8088 ؟

2- ما هو الفرق بين المسجل والموقع المحدد في الذاكرة ؟

3- اذكر وظائف مسجلات البيانات DX,CX,BX,AX.

4- ما هو العنوان الفيزيائي للموقع المحدد بالعنوان 0A51:CD90 ؟

5- موقع في الذاكرة عنوانه 4A37B احسب:

أ- الإزاحة إذا كان عنوان القطاع هو 40FF.

ب- عنوان القطاع إذا كانت قيمة الإزاحة 123B.6 - ما هي حدود الفقرات في الذاكرة ؟
[/b][/b]


عدل سابقا من قبل zakagadir في الخميس سبتمبر 30, 2010 1:20 pm عدل 3 مرات
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://sonyericsson.forumpro.fr
 

لغة التجميع و المعالجات الدقيقة

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

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

-
» انواع فئات آخر المعالجات (( Core i3,i5,i7 ))

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
سوني اركسون SONY ERICSSON :: المساعدة والاقتراحات :: GSM PROGRAMMING-