الان واخيرا سنبدأ فى الدروس العملية
ودرس اليوم بعنوان Developing a simple Bootloader
او تطوير قرص اقلاع >>>>الترجمة العربية
وبدون مقدمة لانى شخصيا مليت من المقدمات ويا ريت احد من المصممين يعمل شعار للدورة وعليها
اسم الفريق علشان احطه ببداية المواضيع :) :)
الان استعد ها هى اللحظة التى انتظرناها كثيرا وهى بداية التطوير العملى
الاول ادعى لليبيا واليمن وكل البلاد العربية :wink: :cool:
دعنا نتذكر معلومات مهمة عن قرص الاقلاع (Bootloader) ملاحظة لا اعلم ان كانت ترجمتى للمصطلح صحيحة ام لا
1- يتم تخزينها بواسطة MBR
2- تاخذ الالقطاع الاول من الDisk
3- الحجم الاقصى والادنى ومهما فعلت فيجب ان تكون 512 Byte
4- يتم تحميلها بواسطة BIOS INT 0x19 فى العنوان 0x7C00
الان افتح اى محرر نصوص حتى notpad يمشى الحال
انا مثلا هستخدم محرر++ notepad مع انى كنت عاوزو استخدم Visual Studio 2010 بس بنت خالتى كانت سألتنى البرنامج ده بتاع ايه (++ notepad) قولتلها ليه
قالتلى اصله شكله حلو وعاجبنى :lol: :P :)
المهم اى محرر ان شاء الله بيمشى الغرض
هنعمل ملف جديد ونسميه (Boot1.asm)
طبعا asm لاننا هنكتبه بلغة الاسمبلى ولا حد معترض :excl:
;********************************************* ; Boot1.asm ; - A Simple Bootloader ; ; Operating Systems Development Tutorial ;********************************************* org 0x7c00 ; We are loaded by BIOS at 0x7C00 bits 16 ; We are still in 16 bit Real Mode Start: cli ; Clear all Interrupts hlt ; halt the system times 510 - ($-$$) db 0 ; We have to be 512 bytes. Clear the rest of the bytes with 0 dw 0xAA55 ; Boot Signiture
معظم الكود طبعا جاء ليكون مفاجاة للكثير منكم >>> وانا فى البداية اذ اننى قعدت ساعة على ما
كتبت كلمة Development صح وانا كنت حالف انى ما انقلها من جوجل حتى لو قعدت سنتين اجيبها صح :lol: :lol: عادى يا جماعة انا بحب بس نطلع من جو الكئابة فى الدورات
نرجع
الان انا هقوم بشرح كل سطر على حدا ان شاء الله ركز معاى
org 0x7c00 ; We are loaded by BIOS at 0x7C00
تذكر ان البيوس يتم تحميله فى العنوان 0x7C00 وهذا الكود سيجعل التعليمة الاولى تتجه الى 0x7C00
bits 16 ; We are still in 16 bit Real Mode
لماذا 16 وليس 32 ببساطة لان كل عائلة معالجات x86 على النظام القديم للانظمة (Dos )
لذا فهى تقلع فى الوضع 16 bit وليس 32
وهذا يعنى شيئين
1- ان اقصى مساحة للذاكرة هى 1mb
2- ونحن مقيدين هنا بالمسجلات من النوع 16 bit
وسنحتاج الى تحويل وضع الجهاز الى الوضع 32 لكننا سنقوم بذلك لاحقا
times 510 - ($-$$) db 0 ; We have to be 512 bytes. Clear the rest of the bytes with 0
انا اتمنى ان يكون هذا السطر سهل ففى Masm وNasm علامة الدولار $ تدل على عنوان السطر
وهى هنا من المفترض ان تدل على 0x7C00
اذا $-$$ تقوم باعادة كل الارقام من البايتات من السطر الحالى الى البداية
dw 0xAA55 ; Boot Signiture
هذا يحتاج بعض التوضيح
تذكر ان البيوس INT 0x19 يبحث عن قرص اقلاع يقلع منه لكن كيف يتعرف على ان هذا هو قرص او ملف يمكن الاقلاع منه ؟؟ :ohmy: :cool:
هذا ما يسمى boot signiture فهو يقوم بالقفز الى 511 byte فاذا كان 0xAA واكان byte 512 0x55
فان البيوس سيقوم بالتعرف عليه وسوف يقول بتحميله وتنفيذه سهلة اليس كذلك ؟ :wink:
ولان الboot signiture ينبغى ان يكون فى اخر سطرين فاننا نستخدم الTimes وهى كلمة تتبع لغة الasm وتستخدم لحساب اختلافات الاحجام من 510th byte ثم 512th byte
كده اظن الكود كاملا مفهوم وسهل جدا <>>>>> اى خدمات يا باشا
الان نأتى الى مرحلة الترجمة
Assembling with NASM
وطبعا المفترض منك ان تكون قد حملت NASM من درس الادوات المطلوبة
لكن ما هى طريقة الترجمة سنستخدم الامر التالى
nasm -f bin Boot1.asm -o Boot1.bin
الشرح
-f تخبر المترجم NASM ما هو امتداد ونوع الملف المخرج وهنا الملف BINARY
خيار -o يخبر المترجم NASM يستخدم للحصول على ملف بامتداد اخر وهنا سيكون Boot1.bin
بعد الترجمة ينبغى ان تحصل على ملف باسم
Boot1.bin
وهذا هو القرص الخاص بالاقلاع
الدرس القادم سنقوم بتجربته وشرح كيفية استخدام ادواتنا للتجربة من قرص وهمى وكمبيوتر وهى الخ ......
والى هذا الدرس القاكم على خير
تحياتى لكم
اخوكم محمد ابراهيم
