السلام عليكم ورحمه الله وبركاته
قد سبق وشرحنا كيفية تطوير bootloader فى الدروس السابقة
والان سنقوم بتوسيع تطوير boot loader على مدى عدد من الدروس من 5 ال 6 دروس
وبعدها سننتقل ان شاء الله الى Protected Mode
فى مرحلة التطوير الحالية سنقوم بما يلى
1- BIOS Paramater Block وMBR
2- انماط المعالج
3- المقاطعات >>> طباعة النصوص واكثر
4- Segment
ملاحظة : من هنا فاعلى سوف يقوم boot loader بالتحكم الكامل فى نظامنا لحين تطوير اشياء اخرى سوف يتم ذكرها لاحقا اى يعنى ان هناك الكثير من الاكواد سأكتبها
مما يعنى المزيد من التركيز منكم وكوب قهوة لا يضرنا ابدا بل هيكون ضرورى :lol: :lol:
ومن هنا سوف تكون الاشياء تبدأ فى الاكتمال ولا تخاف سوف اوضح كل شئ ان شاء الله
هل انت جاهز ؟
سنبدأ ب
انماط المعالج (Processor Modes)
حسنا .... هل سمعنا واين ومتى سمعنا هذه الكلمة ؟ :)
سوف نرى وساوضح ما هى انماط المعالج فى درس سابق تكلمنا عن لماذا عائلة معالجات x86
تقلع فى الوضع 16bit رغم اننا نريد وسنقوم بعمل نظام تشغيل على 32bit
لذا سنحتاج الى تغيير من 16 bit الى 32bit
وهناك اكثر من هذين النمطين مثل
Real Mode
كما تعرف فان معالج x86 يقوم بالاقلاع فى وضع 16bit لكن ما هو هذا الوضع ؟
انه الوضع الحقيقى (Real Mode)
ما هو الحقيقى فى هذا الوضع :lol: :lol: :lol: :lol: ؟
1- يستخدم القطاعات الاصلية
2- الوصول للذاكرة محدود ل 1MB
3- محدود بالتعامل مع مسجلات 16bit
4- ليس هناك Virtual Memory او Memory Protection
هيا بنا ناخذ نظرة اكثر تفصيلا كلا على حدا
القطاعات
القطاع هو جزء من الكل وفى اعتبارنا هى قسم من الذاكرة
تخيل تقيم الذاكرة الى اقسام فهذه الاقسام تمثل القطاعات
فعائلة معالجات x86 تستخدم 4 مسجلات تخزن بداية مواقع القطاعات وهو يشبه base address
( عنوان القاعدة ) وهو يوفر بداية القطاع والقطاع يمكن ان يكون حجمه 64 KB ويتحرك بحرية
المسجلات CS, DS, ES, SS تقوم بتخزين عناوين القطاعات وسوف ناخذة نظرة تفصيلية عليهم بعد النظر على العنونة فى هذا الوضع ان شاء الله
Offsets (الازاحات)
الازاحة هو الرقم الذى يضاف الى رقم القاعدة فمثلا اذا كان رقم القاعدة هو 3 اذا
الازاحة= رقم القاعدة (3) + رقم الازاحة
Offset 2 is 3+2 = 5
Offset 4 is 3+4 = 7
اظن الامر مفهوم الان ساقوم بشرح
Segment:Offset Addressing قطاع عنوان الازاحة
فى هذا القطاع الذى سخص عنوان الازاحة ببساطة نقوم باضافة عنوان الازاحة بالرغم من ان القطاع السابق كنت قد ذكرت ان كل عنوان قطاع فى الوضع الحقيقى هو من النوع 16bit
هذا يعنى ايضا اننا يجب علينا ضرب الجزء + الازاحة ب16
اى ان الجزء +الازاحة ضرب العدد 16
انظر الكود
Absolute (Exact) Memory Address = (Segment Address * 16(decimal)) + Offset
هذا كل شئ فى هذا الجزء
Offset Conventions
الجزء + وعناوين الازاحة عادة تفصل ب (:) على سبيل المثال
07C0:0000 < 07C0 is the segment, and 0 is the offset
نستطيع تحويل الكود اعلاه الى العنوان المطلق 0x7C00 باستخدام صيغتنا التالية
base address = base address * segment size (16) + offset
07C0:0000 = 07C0 * 16 (decimal) + 0
= 07C00 + 0 = 0x7C00Segment:Offset Problems (مشاكل الازاحات)
جزء الاواحة فريد من نوعه :cool: بتغيير قيم الجزء والازاحة يمكنك الحصول على segment:offset pairs مختلفة
وسوف تقوم باخذ نفس العنوان ,, لماذا ؟
لان كلا منهما يدل على نفس مكان الذاكرة فعلى سبيل المثال كل العناوين التالية تدل على على الbootloader h الخاص بنا فى 0x7C00
0007:7B90 0008:7B80 0009:7B70 000A:7B60 000B:7B50 000C:7B40 0047:7790 0048:7780 0049:7770 004A:7760 004B:7750 004C:7740 0077:7490 0078:7480 0079:7470 007A:7460 007B:7450 007C:7440 01FF:5C10 0200:5C00 0201:5BF0 0202:5BE0 0203:5BD0 0204:5BC0 07BB:0050 07BC:0040 07BD:0030 07BE:0020 07BF:0010 07C0:0000
تقنيا ,,, هذا قليل جدا ,,, بس كفاية كده :P :P :) :) :lol: :lol: :lol: :lol:
فيوجد تقريبا 4,096 تركيبة من تراكيب الsegment:offset التى تدل على نفس الbyte فى الذاكرة :huh: :huh: :huh: :huh:
ماذا سوف يحدث لو كان لدينا 2 عناوين segment حجمهم 64 KB ؟
وتذكر جيدا ان الحجم للsegment هى 16bit
وتذكر ايضا ان عناوين segment تدل على قاعدة الsegment وهذا ما يسمى القطع المتراكبة
,هذه الصورة للتوضيح اكثر
تخيل ولاحظ الطبقات العليا من هذه الطبقات توضع اكثر من القطع الاخرى وهذا قد يسبب مشاكل :wub: :wub: وقول لا اله الا الله محمد رسول الله
حسبى الله ونعم الوكيل فى اللى اخترع الحاسب :lol: :lol: :lol:
هذا يعنى ان فى الوضع الحقيقى تستطيع الولوج الى كل byte فى الذاكرة بطرق بسيطة يمكن ذكرها فى 13 مجلد بس :lol: :lol: :lol: تقريبا 4,000 طريقة مختلفة
القدرة على الولوج الى القطع المتداخلة والتى يمكنها الوجود فى اى مكان من الذاكرة وانت لا تعرف :P
وهذا ما يعنى بان الوضع الحقيقى لا يوجد به حماية للذاكرة ( Memory Protection )
المسجلات التى يستخدمها معالج x86 لاستخدام segment refrencing هى الاتية
1- CS >>> تخزين قاعدة العنوان للكود
2- DS >> تخزين قاعدة العنوان للبيانات
3- ES >>>> تخزين قاعدة العنوان لكل شئ
4- SS >>>> تخزين قاعدة العنوان للمكدسات
طبعا كما لاحظنا فالوضع الحقيقى يوجد به الكثير من المشاكل وسوف نستعرض فى الدرس القادم ان شاء الله كيفية حل هذه المعضلة
اتمنى يكون الدرس سهل
تحياتى لكم

