سؤال

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

ويمكن لأحد أن يفسر هذا؟

ومثال على ذلك السلوك هو v0.01 الأصلي نواة لينكس محمل حيث لديه تعليق التالية فيه:

<اقتباس فقرة>   يتم تحميل

وboot.s في 0x7c00 من روتين بدء التشغيل والسير، ويتحرك نفسها للخروج من الطريق لمعالجة 0x90000، ويقفز هناك.

هل كانت مفيدة؟

المحلول

ومن المادة المرتبط:

<اقتباس فقرة>   

في الممارسة العملية، وMBR يحتوي عادة على محمل التمهيد الذي يهدف إلى تحميل محمل التمهيد آخر - التي يمكن العثور عليها في بداية احدة من الأقسام. هذا غالبا ما يكون برنامج بسيط جدا والذي يجد القسم الأول وضع علامة نشط، يحمل الأول قطاعها في ذاكرة الوصول العشوائي، ويبدأ تنفيذه. منذ ذلك الحين اتفاقية يتم تحميل محمل الإقلاع الجديد أيضا إلى عنوان 7C00h، قد تحتاج محمل القديمة لنقل جميع أو جزء من نفسه إلى موقع آخر قبل القيام بذلك. أيضا، ES: من المتوقع أن تحتوي على عنوان في RAM من جدول الأقسام، وDL عدد محرك أقراص التمهيد SI. كسر هذه الاتفاقيات قد تجعل محمل يتعارض مع bootloaders آخرين.

نصائح أخرى

وCookieOfFortune هو الصحيح أساسا (لأنه كان يريد المضي شيء في المكان الذي كان محمل الأولي)، ولكن لم يكن لمحمل الثاني، بل نواة نفسها.

ومن تعليقاته:

<اقتباس فقرة>   

وثم يحمل نظام في 0x10000،   باستخدام المقاطعات BIOS. بعد ذلك أنه   تعطيل كافة المقاطعات، يحرك   النظام باستمرار إلى 0x0000، يتغير ل   الوضع المحمي، ويدعو بداية   النظام. ثم يجب أن نظام   RE-تهيئة الوضع المحمي في   انها الجداول الخاصة، وتمكين   يقطع حسب الحاجة.

ويريد نواة ليكون موجودا في 0x0000 ... 0xKERNEL_SIZE-1، ولكن الإقلاع الأولي هو حاليا في 0x7C00، حتى إذا كانت نواة أكثر ~ 32 KB فإنه الكتابة فوق محمل الإقلاع لأنه كان يتحرك فيه. والحقيقة أن النواة يقع في 0x0000 يفسر أيضا هذا التعليق:

<اقتباس فقرة>   

و"ملاحظة! حاليا النظام على الأكثر   8 * 65536 بايت ".

إذا كان أي أطول من 512 KB ابتداء من الساعة 0 سيكون عرضة لخطر ضرب المنطقة المحجوزة من مساحة العنوان إلى x86.

وأعتقد أن يحتوي على مقطع التعليمات البرمجية هذه القفزة الفعلي في نواة

mov ax,#0x0001  | protected mode (PE) bit
lmsw    ax      | This is it!
jmpi    0,8     | jmp offset 0 of segment 8 (cs)

وأحيانا محمل الإقلاع في ROM، ويحتاج ليتم نسخها إلى ذاكرة الوصول العشوائي في مرحلة ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top