الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الدرس الثانى

بدأه MohamedIBrahim في 18 مارس 2011 · 7 رد · 2,410 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اهلا شباب ارجع اليكم اليوم بالدرس الثانى فى دورتنا لتصميم انظمة التشغيل

هذه الدورة هى دورة المستوى الاول فى تصميم انظمة التشغيل وهى ان شاء الله ستكون جزء من

3 دورات حتى الاحتراف فى مجال تصميم انظمة التشغيل

كنا قد وصلنا الى طباعة جملة فى درسنا السابق

وسنتابع اليوم

(BOOT.S)

سبق وقد امتلكنا الLoader الخاص بنا سوف ننتقل الان الى الوضع المحمى ( protected mode )

والبرنامج المخرج سنكتبه باذن الله بلغة السى

النواة ستكون نواة 32 bit

وسوف تبدا الاقلاع من bootsector وسنبنيها ب Gcc

اولا سنحتاج من المعالج ان يقوم بقراءة النواة لذا فمجددا سنستخدم

الفنكشن 0x2 المعدة من القطاع 0x13

recalibrate:

 mov ah, #0

 mov dl, #FLOPPY_ID

 int 0x13 ; drive reinitialisation

 jc recalibrate

 call read_track ; calling kernel reading function

 jnc next_work ; if nothing bad happens, continue working

 bad_read ; if reding is not successful, output error

 mov bp,#error_read_msg

 mov cx, 7

 call write_message

 inf1: jmp inf1 ; going to endless loop, so that we can be saved by "hand" rebooting only.

'طبعا القراءة الذاتية للكود سهلة للغاية :)

ينبغى علينا الان حفظ البارميترات وقراءة النواة دفعة واحدة

الصعوبة تبدأ عندما لا تتمكن النواة من ان تتناسب فى 17 sector

(i.e. 8.5 Kb)

لكن هذا سيكون فى المستقبل >>> الدروس المقبلة

لذا فليس علينا القلق من هذا الان

read_track:

 pusha

 push es

 push ds

 mov di, #sysseg

 mov es, di ; the data buffer address

 xor bx,bx

 mov ch, #START_TRACK ; track 0

 mov c1, #START_SECTOR ; start from sector 2

 mov dl, FLOPPY_ID

 mov dh, #START_HEAD

 mov ah, #2

 mov al, #SYSSIZE ; read 10 sectors

 int 0x13

 pop ds

 pop es

 popa

 ret

الان هذه هى النواة وتقرا بنجاح والان يمكننا اخراج رسائل اكثر

 next_work:

 call kill_motor ; stop floppy drive

 mov bp,#load_msg ; output message

 mov cx,#4

 call write_message

 this is the message, you want to output

 load_msg:

 .ascii "DONE"

 .byte 0

 And here how you stop floppy:

 kill_motor:

 push dx

 push ax

 mov dx,#0x3f2

 xor al,al

 out dx,al

 pop ax

 pop dx

 ret

الان من المفترض عند التنفيذ ان ترى الجملة المطبوعة

"Booting Arabic Dream of An Opreating System..."

والضوء من الفلوبى ان يغلق

الان المهم هو القفز الى الوضع او النمط المحمى

اولا علينا التحول الى سطر العنوان A20 وهذا يعنى انك ستستخدم 32 bit data addressing.

mov al, #0x01 ; the recording command for 8042

 out #0x64, al

 mov al, #0xDF

 out #0x60, al

كما هو واضح للجميع فهذا يقفز بنا الى الوضع المحمى

protected_mode:

 mov bp,#load_msg

 mov cx, #25

 call write_message

 the message

 load_msg:

 .byte 13,10

 .ascii "Going to protected mode..."

 .byte 0

بينما البيوس ما يزا على قيد الحياة :lol: :lol: :) :)

علينا حفظ مؤشر التوقف الى وحفظه الى العنوان 0000:0x8000 والنواة سوف تستخدم هذه البيانات فيما بعد

save_cursor:

 mov ah,#0x03 ; read cursor position

 xor bh, bh

 int 0x10

 seg cs

 mov [0x8000], dx ; save into special hidden place

انتباه يا مجند منك له :lol: :lol:

cli

igdt GDT_DESCRIPTOR ; load descriptors table description

The descriptors table consists of 3 describers: zero ( should present always), code segment and data segment.

.align 4

.word 0

GDT_DESCRIPTORS: .word 3*8-1 ; descriptors table size

.long 0x600 + GDT ; location of descriptors table

.align 2

GDT:

.long 0,0 ; e.g. 0 : empty descriptor

.word 0xFFFF, 0 ; number 8: code descriptor

.byte 0, CODE_ARB, 0xC0, 0

.word 0xFFFF, 0 ; number 0x10 : data descriptor

.byte 0, DATA_ARB, 0xCF, 0

عملية الانتقال الى الوضع المحمى قد تنفذ بطريقتين فسوف نستخدم سطر الاوامر مثل Linux :wub:

mov ax, #1

lmsw ax ; later real mode

الان نحن بداخل الوضع المحمى وتمت عملية الانتقال اليه بنجاح

jmpi 0x1000, 8 ; Long jump onto 32 bit kernel

فى نهاية ملف الاسمبلى يمكنك ايضا اضافة

.org 511
.end_boot: .byte 0

والنتيجة ستكون ان حجم ملفك سيكون بالظبط 512 byte وهذا هو المطلوب

صح الدرس سهل وبسيط لكن ينبقى عليك التركيز والى اللقاء فى الدرس القادم

سنتكلم فيه عن التحرك داخل النواة واشياء تخصها

والى اللقاء

تحياتى لكم

1

GoodBye

#2

ملاحظة رقم 3 فى الدورة >>>> لا تجازف وتجرب وتطبق على جهازك بل طبق على الكمبيوتر الوهمى

virtual PC

GoodBye

#3

محمد ... هذه السلسله هامه جدا ...

هل ممكن أن تعمل فهرس لها و من ثم نطلب من الإخوه المشرفين في هذا القسم تثبيت الفهرس؟

#4
هويدي كتب:

محمد ... هذه السلسله هامه جدا ...

هل ممكن أن تعمل فهرس لها و من ثم نطلب من الإخوه المشرفين في هذا القسم تثبيت الفهرس؟

بالطبع اخى هويدى لكن انا شخصيا بدات اصاب بالاحباط من قلة الاهتمام وندرة الردود وحتى التشجيع مفيش :) :)

GoodBye

#5

يجب أن يتم تثبيت الدورة ووضع رابط لها في أعلى الصفحة الرئيسية حتى يكون هناك زوار أكثر

الله أكبر الله أكبر الله أكبر لآ إله إلا الله الله أكبر الله أكبر ولله الحمد

#6
KV2010 كتب:

يجب أن يتم تثبيت الدورة ووضع رابط لها في أعلى الصفحة الرئيسية حتى يكون هناك زوار أكثر

والله هذا بيد الادارة مو بيدى

GoodBye

#7

افادك الله كما افدتنا

#8

الله يعطيك الصحة والعافية

مواضيع مشابهة