ما هو الوضع المحمي وما الذي يأكله. ما هو الوضع المحمي والذي يأكل الانتقال إلى تجميع الوضع الآمن

جميع المعالجات شركة انتلبدءا من I80286 وإلى آخر شاملة، على الطاقة على مزود الطاقة (بعد "إعادة الضبط" الأولي) تعمل في وضع الوقت الحقيقي (الوضع الحقيقي). عادة ما يتم استخدام الوضع الحقيقي إما كوسيط للذهاب إلى الوضع المحمي بعد تهيئة نظام المعالج الدقيق، أو لتقديم أسرع للبرامج المكتوبة للمعالجات الدقيقة. 8086 , 80186 ولكن، مقارنة 8086 , 80186 ، المعالجات الدقيقة الحديثة في الوضع الحقيقي لها مجموعة أوسع من الأوامر التي أجريت والقدرة على معالجة المعاملات 32 بت.
يتم تحميل تحويل المعالج إلى الوضع المحمي من REAL إلى CR0.(الشكل 1) الكلمات ذات قيمة واحدة ل Reen بت ( حماية تمكين). للحصول على التوافق مع 80286 بت، يمكن أيضا تثبيت LMSW. قبل التبديل في الذاكرة، يجب تهيئة جداول الواصفات اللازمة. IDT.و GDT.وبعد مباشرة بعد التبديل على الوضع المحمي، يحتوي المعالج cpl \u003d 0..

تين. واحد

لجميع المعالجات 32 بت، يوصى بإجراء تسلسل الإجراءات التالية للتبديل إلى الوضع الآمن:
1. لحظر انقطاعات ملثمين لإعادة تعيين العلم إذا كان يجب أن يضمن حدوث مقاطعات غير فادرة لحظر رمز برنامج المنطق الخارجي أثناء "الفترة الانتقالية" عدم وجود استثناءات وعدم استخدام مقاطعات البرنامج. سبب هذا الشرط عن طريق تغيير الآلية لاستدعاء معالجات المقاطعة.
2. تنزيل ب. gdtr.العنوان الأساسي GDT.(تعليمات LGDT).
3. التعليمات MOV CRO.قم بتثبيت علامة RA، وإذا كانت الصفحة مطلوبة، فإن علامة PG مطلوبة.
4. بعد ذلك مباشرة، ينبغي تنفيذ قيادة الانتقال الصغير ( JMP بعيدا.) أو أتصل ( استدعاء بعيدا.) لمسح قائمة الانتظار من التعليمات فكفي في الوضع الحقيقي، وإجراء تسلسل المعالج. إذا تم تشغيل تحويل الصفحة، رموز التعليمات MOV CRO. و JMP.أو يتصل يجب أن يكون في الصفحة التي يتزامن العنوان الفعلي مع المنطقي (للرمز الذي يتم إرسال عنصر التحكم إليه).
5. إذا كنت تخطط لاستخدام الوصف المحلي للرسماتات، التعليمات LLDT.تحميل شريحة محدد ل LDTفي التسجيل ldtr.
6. التعليمات لتر.تحميل إلى سجل محدد المهام TSS.للمهمة الأولية للوضع المحمي.
7. أعد تشغيل سجلات القطاع (باستثناء CS)، التي لا تزال محتوياتها التي لا تزال تشير إلى الوضع الحقيقي، أو إجراء الانتقال أو استدعاء مهمة أخرى (أثناء حدوث إعادة تحميل التسجيل تلقائيا). في سجلات القطاع غير المستخدمة، يتم تحميل قيمة محدد الصفر.
8. التعليمات لضوحتحميل للتسجيل idtr.العنوان والحد IDT.- جداول واصفات المقاطعات الوضع الآمن.
9. السماح بمقاطعات الأجهزة الملثمين وغير المشحونة

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

وسائط العمل معالج Intel. 80386

مع ظهور المعالج إنتل 80386. علم الهندسة المعمارية IA32.وبعد افترضت ظهور طريقة جديدة من تشغيل المعالج - المحمي (" وضع حماية."). التوافق مع معالجات المسطرة السابقة إنتل 80x86. وحدة المعالجة المركزية 80386 لم تبدأ على الفور في الوضع المحمي، ولكن عملت في الوضع الحقيقي المزعوم (" الوضع الحقيقي."). بالإضافة إلى ذلك، يحتوي كل وضع لوائح واحدة أو أكثر. سنقوم بتحليلها.

الوضع الحقيقي

في هذا الوضع، يعد المعالج مباشرة بعد الضغط على الزر " قوة"الكمبيوتر. يتم الوصول إلى الذاكرة في الوضع الحقيقي بواسطة التصميم" الجزء: الإزاحة"، الذي يصف عنوانا منطقي. قيمة القطعة، وكذلك الإزاحة، تكمن في الداخل 0 قبل 0FFFFH..

نظرا لأنه من الممكن إضافة فقط إلى حدود شريحة واحدة، فإن الحد الأقصى لحجم القطاع متساوي 64 kilobyte. يتم النظر في العنوان الفعلي الذي يتعرض على حافلة العناوين من المعالج:

العنوان الخطي \u003d الجزء * 16 + إزاحة

في وضع المعالج الحقيقي 80186 و 8086 تم تشغيل قيمة القطاع بعيدا عن 0 قبل 0f000h.وبعد وبالتالي، فإن الحد الأقصى لعنوان عرض إلى حافلة العناوين متساوية 0FFFFH.ما يتوافق مع (2^20)-1 وبعد 1 ميغابايت.

بالطبع، في البداية، يبدو أن حجم هذه الذاكرة هادسانيا، ولكن بمرور الوقت كان ميغابايت واحد مفقود. مع ظهور المعالج 80286 أصبح كتلة ما يسمى بالذاكرة متاحا. UMB.قادمة من العنوان 0FFFFH: 0010H. وتنتهي مع العنوان 0FFFFH: 0FFFFH. (65520 بايت تتجاوز ميغابايت واحد). الآن يمكنك إعادة تكوين نظام التشغيل MS-DOS. بحيث احتلت هذه الكتلة، تحرير ذاكرة الوصول العشوائي 64 كيلو بايت.

وضع حماية

هذا الوضع لديه تصميم معقد مقارنة مع حقيقي. يتم تمثيل العنوان المنطقي بالتصميم " محدد: الإزاحة". المحدد في حدود 0 قبل 0FFFFH. (في الواقع، توجد محددات 4 مرات أقل - حول هذا بمزيد من التفصيل في المقالات التالية). تعلق الإزاحة، على النقيض من الوضع الفعلي، هو 32 بت، مما يتيح لك معالجة قطاعات من 4 غيغابايت. يتم تحويل العنوان المنطقي إلى الخطي وفقا للمخطط التالي:

العنوان الخطي \u003d قاعدة القطاع + إزاحة

يتم تعيين العنوان الخطي حاليا على حافلة العناوين إذا لم يتم تمكين وضع معالجة الصفحة. خلاف ذلك، يتم تحويل العنوان الخطي إلى مادي، وفقط بعد تعيينه على حافلة العناوين. بالإضافة إلى ذلك، يسمح لك الوضع المحمي بتنظيم الذاكرة الظاهرية، حيث وصلت إلى 64 Terabytes وتعتمد فقط من وحدة التخزين القرص الصلب (على سبيل المثال، نفس ملف الترحيل في شبابيك تنفذ الذاكرة الظاهرية). في الوضع المحمي، تعمل جميع أنظمة التشغيل الحديثة تقريبا.

السلوك متعدد المتعدد الوضع المحمي

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

وضع 8086 الظاهري

كما أنها وضع محمي حسب الطلب يسمح لك بإنشاء جهاز افتراضي يعمل كما لو كان في الوضع الحقيقي، ولكن في الواقع، يعمل في الوضع المحمي.

نظام غير واقعي

هذا هو نظام مستهلك خاص. المعالج في الوضع الحقيقي، ولكن موجه إلى الذاكرة من خلال التصميم " محدد: الإزاحة"وبالتالي، فإن الذاكرة متوفرة فوق 1 ميغابايت. في المستقبل، سيتم النظر في الوضع المحمي لوائحها.

البرنامج الأول: نقل إلى الوضع المحمي

ينفذ الانتقال إلى الوضع المحمي عن طريق تحديد الشيء 0 يسجل CR0.وبعد يتم الانتقال إلى الوضع الفعلي عن طريق إعادة تعيين نفس قليلا صفر. النظر في برنامج ينفذ هذه العملية (اللغة - مجمع مسطح.):

use16. ؛ يتم استخدام أوامر 16 بت

org. 100 ساعة.

بداية:

؛ نحن في الوضع الحقيقي

مخرطة EAX، CR0. ؛ قراءة قيمة تسجيل CR0
أو. al، 1. ؛ تثبيت قليلا الصفر
مخرطة CR0، EAX. ؛ اكتب قيمة جديدة CR0

؛ نحن في وضع آمن

مخرطة EAX، CR0. ؛ قراءة قيمة CR0
و. al، 0feh. ؛ النوم قليلا قليلا في 0
مخرطة CR0، EAX. ؛ انتقل إلى الوضع الحقيقي

؛ نحن وضع حقيقي

ret. ؛ نترك من البرنامج

ومع ذلك، فإن هذا البرنامج هو "الخام" تماما، لأنه لا يمكن تنفيذها فيه. إذا كتبت فرق مثل hLT. أو jMP $سوف تقوم بإعادة تشغيل الكمبيوتر للرد على المقاطعة الأولى.

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

1. تحقق مما إذا كان من الممكن التبديل إلى الوضع المحمي؛

2. تهيئة جداول الواصفات؛

3. حظر المقاطعات (كلاهما متنكر وغير ملثم)؛

4. افتح خط A20؛

5. تنزيل سجلات إدارة الذاكرة؛

7. قم بتشغيل الانتقال إلى شريحة رمز 32 بت، تجاوز تسجيل CS.

لكن البرنامج الأول يكفي لأداء الإجراءات 3، 4، 5. ثم لن يؤدي حلقاتها إلى إعادة تشغيل الكمبيوتر. دعونا التمييز في كل عمل.

حظر المقاطعات يحمينا من إعادة التشغيل. يتم تقسيم المقاطعات إلى كلا متنكرين وغير مقنعين. لحظر المقاطعات المقنعة، تحتاج إلى فقدان العلم إذا يسجل eflags. فريق كلييتم إجراء قرار المقاطعة من قبل القيادة sTI.وبعد يتم حظر المقاطعات غير الموعودة بشكل مختلف إلى حد ما. لهذا هناك طريقتان: برمجة سجلات تحكم المقاطعة (ستعتبر هذه الطريقة لاحقا إلى حد ما) أو تغيير في المنفذ السابع من المنفذ 70 ساعة.: إذا تم تثبيت البت، فإن المقاطعات محظورة إذا كان يمكن إجراء القليل من التفريغ.

الآن دعونا نسأل نفسك ما هي وظيفة الخط A20.، وما هذا. خط A20. - واحدة من 32 خطوط مستهدفة. عند تحميل خط الكمبيوتر A20. مغلق. يؤدي هذا إلى جيل عناوين 20 بت (أي، يتم الحصول على جميع مساحة العنوان على قدم المساواة (2^20)=1 ميغا بايت). تم تقديمه للحصول على التوافق مع المعالج. 8086 : وبالتالي، تحاول كتابة العنوان الخطي 12345678 ساعة، نحن في الواقع اكتب في 00045678H.ما يمكن أن يؤدي إلى نتيجة غير متوقعة تماما. لذلك، للعمل الكامل لخط التطبيق 32 بت A20. تأكد من أن تكون مفتوحة. هذا هو تثبيت الشيء 1 ميناء 92 ساعة.، الخط الفاصل A20. - إعادة تعيين هذا الشيء.

مع أحدث إجراء، يكون القارئ مألوفا بالفعل، وينبغي لم يعد يطلق على الأسئلة.

لذلك، فكر في قائمة برنامجنا الجديد الأول، الذي يتم فيه بالفعل تنفيذ الدورة الصغيرة بالفعل. الصفوف التي تضاف إلى القائمة السابقة تتميز بنجمة ابنة (*).

org. 100 ساعة.

بداية:

؛ نحن في الوضع الحقيقي

كلي ;*

في. al، 70h؛ *
أو. al، 80h؛ *
خارج. 70h، al؛ *

؛ افتح خط A20

في. al، 92h؛ *
أو. al، 2؛ *
خارج. 92h، al؛ *

مخرطة EAX، CR0.
أو. al، 1.
مخرطة CR0، EAX.


؛ دورة مزدوجة صغيرة

مخرطة CX، 20؛ *

دورة:؛ *
مخرطة الفأس، cx؛ *
مخرطة CX، 0FFFFH؛ *
حلقه. $ ;*
مخرطة CX، الفأس؛ *
حلقه. دورة؛ *

مخرطة EAX، CR0.
و. al، 0feh.
مخرطة CR0، EAX.

؛ أغلق خط A20

في. al، 92h؛ *
و. al، 0fdh؛ *
خارج. 92h، al؛ *

في. al، 70h؛ *
و. al، 7fh؛ *
خارج. 70h، al؛ *

sTI. ;*

ret. ؛ أكمل البرنامج

تأكد من أن البرنامج يعمل، يمكنك، تشغيل ملف تنفيذي. من نظافة MS-DOS.وبعد إذا تم إكمال البرنامج بشكل صحيح، فكل شيء في النظام.

ومع ذلك، قد تحدث المشاكل التالية:

1. يتجمد الكمبيوتر "؛

2. إعادة تشغيل الكمبيوتر.

قد ينشأ هذا بسبب الأسباب التالية:

1. البرنامج يعمل في الوضع V86. (الوضع الافتراضي 8086 );

2. البرنامج يعمل في الوضع المحمي أو تحت نظام تشغيل معين.

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

التحقق من احتمال الانتقال إلى الوضع المحمي

في الفصل السابق، كان لدينا المشكلة التالية: البرنامج لا يتعرف على حقيقة أنه في وضع آمن أو وضع V86.ما الذي يؤدي إلى تعليق النظام أو إعادة التشغيل. إذا حاولنا تشغيل البرنامج الذي يعمل بنظام التشغيل شبابيكT. شبابيك استدعاء محاولة للمتابعة إلى الوضع المحمي وعرض إعادة التشغيل في وضع المضاهاة MS-DOS. (لمنصة 9X.)، إما يكمل عمل البرنامج بالقوة (منصة NT.).

لذلك، للتحقق من ما نحن في الوضع الحقيقي حقا، يجب إجراء العمليات التالية:

1. تحقق من البتات الصفر CR0.;

2. تأكد من عدم تحميل نظام التشغيل Windows.

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

يتم إجراء الإجراء الثاني عن طريق استدعاء الوظيفة 1600 ساعة المقاطعات 2fh.وبعد تتيح لك هذه الميزة الحصول على الإصدار الحالي من نظام التشغيل. شبابيكوبعد إذا بعد استدعاء الوظيفة في السجل آمنة يحتوي على صفر، لا يتم تحميل نظام التشغيل. خلاف ذلك، مرة أخرى، برنامجنا بلا معنى لمواصلة أي إجراء آخر.

النظر في مثال على البرنامج التالي. إنه تعديل البرنامج السابق، يتم تمييز جميع التعليمات الجديدة مع علامة النجمة (*).

ORG 100H.

بداية:

؛ إعداد سجلات القطاع

مخرطة الفأس، CS؛ *
مخرطة DS، الفأس؛ *

؛ تحقق ما نحن حقا في الوضع الحقيقي

مخرطة EAX، CR0. ؛ * التحقق من الصفر قليلا
اختبار al، 1؛ * سجل CR0
jZ. no_pm؛ *

مخرطة آه، 09 ساعة؛ وظيفة DOS DOS 09H
مخرطة DX، PM_MSG؛ إخراج الصف
int. 21 ساعة؛
ret. ؛ * والخروج

no_pm:
؛ تحقق: هل البرنامج تحت Windows لا يعمل

مخرطة الفأس، 1600 ساعة ؛ * وظيفة 1600h مضاعفة
int. 2fh. ؛ * المقاطعات - احصل على إصدار Windows
اختبار al، al ؛ * إن لم يكن 0 - خطأ
jZ. no_windows.

؛ عرض رسالة خطأ

مخرطة آه، 09 ساعة؛ *
مخرطة DX، WIN_MSG؛ *
int. 21 ساعة؛
ret. ;*

no_windows:
؛ نحن بالضبط في الوضع الحقيقي
؛ تعطيل المقاطعات المقنعة

؛ حظر المقاطعات غير الموعودة (NMI)

في. al، 70h.
أو. al، 80h.
خارج. 70 ساعة

؛ افتح خط A20

في. al، 92h.
أو. آل، 2.
خارج. 92 ه

؛ التبديل إلى الوضع المحمي

مخرطة EAX، CR0.
أو. al، 1.
مخرطة CR0، EAX.

؛ الآن نحن في الوضع المحمي
؛ دورة مزدوجة صغيرة

مخرطة cx، 20.

دورة:
مخرطة الفأس، cx.
مخرطة CX، 0FFFFH.
حلقه. $
مخرطة CX، الفأس.
حلقه. دورة

؛ التبديل إلى الوضع الحقيقي

مخرطة EAX، CR0.
و. al، 0feh.
مخرطة CR0، EAX.

؛ أغلق خط A20

في. al، 92h؛ *
و. al، 0fdh؛ *
خارج. 92h، al؛ *

؛ السماح للمقاطعات غير الموعودة (NMI)

في. al، 70h؛ *
و. al، 7fh؛ *
خارج. 70h، al؛ *

؛ السماح للمقاطعات الملثمين

sTI. ;*

؛ نحن في وضع حقيقي مرة أخرى

ret. ؛ أكمل البرنامج

؛ رسائل خاطئة

PM_MSG :؛ *
dB. "خطأ: بالفعل قيد التشغيل في الوضع المحمي! $" ;*
Win_MSG :؛ *
dB. "خطأ: كشف Microsoft Windows! $" ;*
لا يظهر هذا المثال أيضا تنفيذ أوامر 32 بت. للقيام بذلك، يجب عليك معرفة مواد الفصل اللاحقة. بالإضافة إلى ذلك، يحتوي المثال على العيب التالي: وظائف تسمى دوس. (int 21h.) يبدأ بالفعل في المتناقض مع استقلال برنامجنا من نظام التشغيل MS-DOS.وبعد في المستقبل، سيتعين عليك التخلص من استخدام وظائف نظام التشغيل والمضي قدما في استخدام الوظائف BIOS.وبعد ولكن يكفي تقييد أنفسنا بمثل هذا الرمز.

rPUME UADETSHOPP RetetStsticb Chopch NPZH PVTBDPCHBFSHF CBU الضروري Chchchulph UBS Tpuushmly.

yfbl، LLB ChiSt Ronyofe، H Tebmshopn Terchine Tbvpfshret Rtpguustb onn dpufhreo chuzp mysh 1 nebvbkf bdteuopp rtputboufchb (ya lpfpppppptch pvshuopk rbnsfshsfsi scmsefus chuzp mysh 640 limpvbkf). FBL LFP LSHP PE TSTOB Retsisheski Rtpgeustpch CCTPE 8086، OP RPUFEREOPAPP PREPASHOPK RBNSFY UFBMP OE ICHBFBF. H FP TSTA COVEN FTEVPCHBMPUSH UPITBOFSH RPMKHA PVTBFOKH UPGENPUFFS، UFPVSCH 16-TBTPTP PARTGROSE UYUFENSHCHKT DOS UPNBMSHOP TBVPFBFSH. rpppnh vschsin csedјo collap tbvpfsh rtpgeustb - bayeeэoshk tzin. Rpume RetePDB H OESP DMS BDTEYBGY Yurpmshefus OE 16، B 32 YMY DBCE 64 VIFB، B Utzneofshch H UFBTPN RPOKUNKY YUEJEBAF. FBBBCHMSAFUS FBBEIFOSTE (YNOOP RPPPNH Obayeјososek. Thesign)، SDTP SDTP بو LSSP YPMYTPCHBOP PF RTYMPSOOKS NPZMP Inty Uchokvdop Khtbchmsfsh. OPP OPPVIPDINP MAVPK RPMOPGEOPK NOPZPBDBÜPK Uyufen.

oBYuOЈN ديك FPZP، YUFP DPVBCHMSEFUS B TEBMSHOPN TETSYNE ON RTPGEUUPTBI، LPFPTSCHE RPDDETTSYCHBAF 32 VYFOSCHK BDTEU (I386 J CHSCHYE) - DPVBCHMSAFUS OPCHSCHE TEZYUFTSCH، Cheto TBUYYTSAFUS UFBTSCHE: EAX، EBX، ECX، EDX، ESP، EBP، EIP، ESI، EDI، EFLAGS وبعد LLB NPCOP DPZBDBFSHUS، BPP 32-Visifure Chetuy Pvshukhuets Tezyuftpch Tabmshoppzp Tsezinb (L Jnoe Tezyufbchlb "E"). Chuu إذا 32-Visieufts Ltpne EIP DPUFHROSKH TJET TEBMSHOPN Techine، OP H FBLPN Umkhyuby Vkhdkhf BBBNBF حوالي 1 VPVBchmsephus Uzreybmoshoshk uzegil). حول rtpguuupt npmpse 286 bpf lfbodshch vkhdhf oelpttelf. NWN NPTPZVEN، OPPET، OBROBFSH MOV EAX، 0X12345678 Y RPUM PPPP H AX VKDEF 0x5678، RPFPH YUFP في LLB VSS SCMSEFUS "PLOPN" H NMBDC SHUBUFSHUFS TEZYUFBDE EAX (Bobmisyuop، آل Mmbdes Yubufsh AX). tEZYUFTB-PFPVTBTSEOYS UFBTYEK YUBUFY 32 VYFOSCHI TEZYUFTPCH OE UHEEUFCHHEF - NPTSOP EЈ YCHMEYUSH FPMSHLP ديك RPNPESHA BTYZHNEFYLY (OBRTYNET، UDCHYOHFSH EAX ON 16 VYF CHRTBCHP عندك RPNPESHA SHR EAX، 16، FPZDB W AX VHDEF UFBTYBS RPMPCHYOB، OP UPDETTSYNPE NMBDYYI VYF VHDEF HFETSOP). yuFP IBTBLFETOP، B BEYEЈOOPN TETSYNE OBPVPTPF، LPNBODSCH TBVPFSCH دينا 16 VYFOSCHNY TEZYUFTBNY (OD OE 8 VYFOSCHNY) FTEVHAF RTEZHYLU، RPFPNH OEUNPFTS ON AF YUFP TBTSDOPUFSH B DCHB TBB VPMSHYE، B BEYEЈOOPN TETSYNE VSCHUFTEE CHSCHRPMOSAFUS J BOYNBAF نيوشو NEUFB YNEOOP LPNBODSCH 32 Vyfopk Bthnefile.

fblets، feretsh x tezyyuftb vsmez-gs fs. tbvpfb في أوي rpmopufus bobmpsyjuob ds es es npsfe yi uchikovpdop yurpmshpchbfschbmshopn tesyne. pFMYYuYE FPMSHLP H FPN، YUFP OYLBLYE LPNBODSCH YEE SCHOP OE RPDTBHNECHBAF (DS YURPMSHHEFUS RP HNPMYUBOYA RTBLFYYUEULY تشين LPNBODBNY J OELPFPTSCHNY UFTPLPCHSCHNY PRETBGYSNY، ES OELPFPTSCHNY UFTPLPCHSCHNY PRETBGYSNY) Q ECPAT SCHOP HLBSCHCHBFSH، YUFP BL IPFYFE PVTBEBFSHUS YUETE أويي. أوتايت، موفوف الفأس،.

rpnppa tezyuftpch، dpvbchmsafus netherchchchashee tezieufts (tbchmsm tebysm tbvfftb rtpguupuptb fpmslp fpmslp) - cr0، cr2، cr3 cr4. Eufsh Dthzye (أوتينيه، Pfamba Tesiyufshch)، OP UP Singuyubu OE Yoftuhaf. Ynoop في Rpnpesha Ophy Tezihuftprk Rtpyhpdyfus Rtelmayueyee Rtpgeustb H Opaeeјoshk Ttsin Khftplb طريقة لسقالة Zhokhlg Chtda Uphilbuyop Bdteubyji. الغناء dpufhrochkk h tebmshopn tesyne.

h opaeeјopn تسيرين rppopfye uzeneofhib j yaneosifus. Ferretsh LFP OE RTPUPP WBCCHK BDTEU، B سيفتح BNNEOFB (Dountyerfptb Uzeneofhib) ح Urogebmshopk FBVMIG. FBVMIGB DOUTHTYRFTPTP Uzezneofspch Pretbgjpopk Uyufenpk ذ Npcef Upeszbfsh Opepvipdinpe LPMYUYUUFCHP PRYUBYAK UZENOFTPCH BEEEјOPSP TECHINB. Lbzdschk ІNEOFF FBVMYGSHSHKBBNBEF 8 VBKF Y UZHYBMSHOPN ZhPTNBF SPUCHCHBEF VEKCHCHK BDTEU UZNEOFB، TBNE، RTBCHB DPUFHRB Y F. D.

obneophysh BEEEјOPSP Thezinb Demesfus حول DCH FIRB - Oznevoofshchy LPDB SEEZNOFOFSHOBS (UBNPN DEME EUFSH EEј Chuslya TSS LDT، القسم OP RPLB الغناء يا عمر الفاروق Chkem). H CS NPCP NPSLP OPNEB DEVTYRFTPCH، PRESSOURSES LLB UPDIOPOFTPE، H PUFBMSCHOBER OUMNOFIC TEZYUYUFTCH NPSOP OBBZTHTSBFS MAVSP OUZNOTOFSKY - LBDB LPDB. ChBCOBS TBYUGB H FPN، YuFP UFP UPDOPOPOPF NPDB FPMSLP YUFBFSH YURPOSFSFS، B UTINOPHOPHOPHTE FPMSHLP UUFBFSH RYUBFSH. L WuBufsha، Utyneophysh NPZKHF RETELTICHBFSHUS H RBNSFY، RPPPNH NPCOP UPHABFSH DCHB DCEMTYRFPTB، WUSCHMBAEUS حول PDYA FPF TEZYPO RBNSFY، OP PDYY YEY ODMBFSH YURPOSMENCHN، B DHZPK DPUFHROCHN DMS OBBRYUYU.

oeunpfts على Rapdablch Utynevoofbgiy، كول Uuifbefus Hufbtech. يا النوافذ، يا لينكس OE Yurpmshaf eu H RPMOPK NETE، B على PFMYYUKTIA PF X86 Bthyfelfcht (Ortynet، Arm) Pokchuy Pughfuchchf. DMS Tbztbyeyas dpufhrb l rbnsfy yurpmshefus sptbdp nwwe zivlyk nibogya skfftbyukuku bdteybgy، lpftsk nwby ttuunpftin dbmee. Yufpvschy Yavbchyfshus PF UZEYOFBGY PU RTPUPP Schuchchubf FBVMIGH YE DCHCHBEFPTPHTPH، X LBCDPZP YE LPFPTSKI VBPCHCHK BDTEU 0، B TBnet 4 Szles (NBLUINBMSFY TBNTNA BDTEHENPK RBNSFY H 32 Wypopn tesyne). H FBLPN UMHYUBY SPCHPTSF، YUFP NSHS CHLMAYYMY TERSIN MIOEEEKS BDTEUPCH - UNEEYEYE UPPUKHUFUFCHFHEF ZHYYUEULPNH BDTTeuh. LFP Pugeos HDPVOP مع RPKDH RP FPNH ZE RHFI. عمر الفاروق UMEDHEF RSCHFBFSHUS YURPMSHPCHBFSH UEZNEOFBGYA B UCHPEK PRETBGYPOOPK UYUFENE - FP UYMSHOP HUMPTSOSEF LPD SDTB، SSCHLY CHSCHUPLPZP HTPCHOS (OBRTYNET ديك YMY في ++) OE RPDDETTSYCHBAF UEZNEOFBGYA (AF EUFSH BL UNPTSEFE RPMOPGEOOP RTPZTBNNYTPCHBFSH FPMSHLP ON مجمع) J، OBLPOEG، BL OE UNPTSEFE RETEOEUFY UYUFENH ON DTHZHA BTIYFELFHTH، RPFPNH YUFP إلى x86 EDYOUFCHEOOBS، LPFPTBS HNEEF NEIBOYN FPF (Q AF، H-64 VYFOPN TETSYNE RPMS VBPCHPZP BDTEUB J TBNETB UEZNEOFB YZOPTYTHAFUS، B YURPMSHHEFUS MYYSH YOZHPTNBGYS RTBCHBI DPUFHRB P).

ل bbm lbm، fbvmigb devtyrftpch uptnefus upnpk pretthephopk uyufenpk. Yufpvysch HLBBFSH RTpgeuuputh، Zeji Obihydymphus Yurpmshhefus Uzreybmshobs LPNBodb - LGDT (تحميل العالمية واصف الجدول). CC RTYYOINBEF 6-BCFFFR Reseteookh H Rbnsfy. rETChSchE EЈ 16 VYF UPDETTSBF TBNET FBVMYGSCH H VBKFBI (FBLYN PVTBPN، NBLUYNBMSHOPE LPMYYUEUFCHP DEULTYRFPTPCH - 65536/8 \u003d 8192)، 32 RPUMEDHAEYE VYFB - VBPCHSCHK MYOEKOSCHK BDTEU H RBNSFY UBNPK FBVMYGSCH (FP EUFSH VE HYUЈFB CHUEI UEZNEOFPCH). Ynef Unschum Chistbchosfsh Obusubmp FBVMigshchshk حوالي 16 VPKF، RPFPH YuFP LFP HMHYUBF ULPTPUFS DPUFHRB LE ENEFBN. Retchshchki BNEEOPF FBVMYGSHCH Chutub Dpmtso VSSFS TBCHO OKHHU MAVPY YURPMSHAPCHEY Ohmychpzp umelfptb. (Chlbfemsh على BBBFEFTFTPCH SEZNEOFOPN TEZYYUFTHCHCHBEFUS FBL) RTichpdife L Poyvl. Yobyuif NEME-NEE TBVPFPURPUPVOBS FBVMIGB DEWTYRFTPTP DPMTSOB UPTAKSBFS التي اعتمدها الفريق الحكومي VSP FTY DEWTYRFPTB - RHUFPK، DOUTITYRFPT LPDB، Duttlefpt.

أوه، UFP EEј UFPEF TPUULBFSH، RTECDE، يوين NSHS RPRTPVKHEN Retekfi ح Bayeeјoshk Tzin؟ RPSBMHK، EEј UFPEF HRPNSOKHFS RTP HHTHKHA DPUFHRB. LPD RTTB UYUFENSKY YEP DTHZ PF DTHZB في FPK GEMSHA، IFPVSCHA SDTP NPMP RTPMPUFSHA HTTPSFSFS RTPGEUPTPN، B RTYMPSOOS OE NPZMY CHNEYBFSHUS H TBVFFH SDTB (CEDSH PUT NPSPBDBYUBS PU). LPD Yurosphus في الإجراء htpchoen rtychymesyk.وبعد ح إلى x86 يي gemchi 4 ФХЛЕ - PF 0 موانئ دبي 3. Okhtchpk CHTPCHOCK UBBCHK RTYCHRPOSFSFSFSBSEK (NPCSF CHRACPOSFSFS MAVCH LPNBодSH NOSFSHSFSHT TBVFFSH RTPGUUUPTB)، FTEFYK UBNCHK "Veurtbchchek". ليسانس الحقوق I Umkhyubyu Uznevoofbgjek، TBTBVPFYLY X86 Retheyevptayimi في Zhholgypobumpn في Chuu بو Yurpmshaf Misy Dchbs Khthchos يو Yuftshchychi ChPNPT، B Dhzyu Bthyfelf Chtstski RTPGEUPTB Rapdabychbaf FPMSLP يي. x lbcdpzp uznevoofb h ezp deletyrfpt chlbbo DPL (مستوى امتياز واصف) - Chtpchrs dpufhrb opvipdinstk dms dmd dboppp usesseneofhib. Orthichymesezitekboboshk LPD OE NPCCF RPMHYUFSH DPUFHR L Utyneopheofs في Htpchoen DPUFHRB 0، B RTychymesezitecite LPD NPCCF RPMKHYFSH DPUFHR LP تشين Uznevneofbn.

uEMELFPT UEZNEOFB، LPFPTSCHK UPDETTSYFUS UEZNEOFOPN TEZYUFTE CH، DE SCHMSEFUS RTPUFP OPNETPN MENEOFB FBVMYGE H، J OP HLBBFEMEN HTPCHOS DPUFHRB - NMBDYYE 2 VYFB UPDETTSBF HTPCHEOSH RTYCHYMEZYK (PF 0 BF 3)، B HTSE UFBTYYE OPNET UBNPK FBVMYGSCH. flendine pvtbypn umelfpt \u003d (yoedel_delltyrfptb shl 2) + rpl. rpl. - مستوى Priveleg المطلوب - Bbrtbychbensk Chtpchemezyezyk. rty lfpn rpl dpmtseo vssfs nbluinbmsshopn yy dpl cpl (مستوى الامتياز الحالي). CPL TBCHO RPL UmelfptB H CS. Flendine Pvtbypn LPD OE NPCSF RPMHYUFSHD DPUFHRB L UVEZNEOFBN، X LPFPTCHI CHTPCHRS DPUFHRB H YUYUUPCHPN Chede Ozsej، يوين س Ozep Ubnpzp. ج، chetpsfop، prufm dpufbfpup opbrkhfbopu، المرجع chrpl npcp pvpkfyus rpl \u003d dpl، LLB Numb Rpufhry.

rPLB NWN Ryyen FPMSLP SDTP، Nwby Vekden TBVPFBFSH ochechpn LPMShGe Obbaphsh (بنك فيصل المحدود EEј RTHCHBBF HTKHYEZYEMEZYK)، Yufpvshchi Ynefs Rpmoshk Dpufhr L Brrbtbfchte.

uznevoofbgis أون OE OKHKOV، RPIFPH مع OE VHDH PUFBOBCHMYCHBFSHUS RPLB YUFP حول Zhpstnbfe Deutshrfptb، zpfppuccheshcheua DBN. Eumy jofteuop، NPSFF RPUYFBFSH IFH UFBFSHA. TPUUUUPFTIN RTPUFEKYK LPD RETAIPDB H Bayeeјoshk Tzin.

؛ TBRKHUL 32-TBTBTSDPSP SDTB.START32:؛ CHISCHPDIN HCHEDPNMEY P OBRUKHUL 32 WYFOPSP SDTB MOV SI، START32_MSG CALL WRITE_STR. obbzthein lgdt h h gdtr؛ obrtfin rtttschbcbbl؛ Retekdјn H Baye-Vegetable Thesign MOV EAX، CR0 أو EAX، 1 MOV CR0، EAX؛ retekdјn حوالي 32- Vecfered LPD JMP 8: Start32؛ FBVMIGB DEVTYRFTPTP Uzeneofph DMS 32 Vypoppzp SDTB محاذاة 16 GDT32: DQ 0؛ NULL - 0 DQ 0x00CF9A00000000FFFF؛ رمز - 8 DQ 0x00CF92000000FFFF؛ البيانات - 16 GDTR32: DW $ - GDT32 - 1 DD GDT32؛ 32-Vyphotk LPD استخدام 32 Start32:؛ FaftWine Ufel وسائل التحقق EAX، 16 DS MOV، MOV AX GS، AX MOV SS، AX MOVZX ESP، SS، AX MOVZX ESP، SS. ChurchPdin Uingchpm حول LTBO MOV BYTE، "!" ؛ الإغلاق JMP $

lFPF LPD Umvedhef Dfrüdubfs Loor Obusubshophop Bbzthyulh.

rETED RETEIPDPN H BEYEЈOOSCHK TETSYN OEPVIPDYNP BRTEFYFSH RTYЈN BRRBTBFOSCHI RTETSCHCHBOYK (LMBCHYBFHTB، NSCHYSH، J FBKNET DTHZYE HUFTPKUFCHB) RPFPNH YUFP BIOS RPUME RETEIPDB PUFBЈFUS OE DEM X، B UCHPY PVTBVPFYUYLY NShch EEЈ OE OBRYUBMY، RPFPNH RETCHPE CE RTETSCHCHBOYE PVTHYYF UYUFENH.

ocherptudofeopeopope Retaipd H Obbeeјoshk Tezin Pooheeufchmsef Hufbochlb Ohmchpzp VIFB H CR0. YNOOPA LFPD DEMBEN (RTSNPK DPUFHR L CR0،2،3،4 Ohopnpeco بنك فيصل المحدود Tsezihftbn، Rippnh Yurpmshhen EAX). OeUUNPFTS على FP، YuFP NSHS HTCHET RETERY H BEBEIEјOSTKUK TERSIN، LPD RTPDPMCBEF YURPOSFSHUS RP-RTCYENTх 16 Vyphoshk. DMS PlpupubfemshopPP Retaipdb أون Okhtsop Pvopchyfs Upesinpe Uzeneofoshki Tezihuftpr. Dytelfuck Buuenvmeter USE32 SPCHPTYF EHKH، YUFP DBMSHOEKYK LPD CHRCHPOSMOPUS CHBAIEEјOPN تيشينيه OPVIPDINP RETELMAYUFSHUS H TERSIN ZEETBGY LPNBOD DMSESP، B OE 16 WYFOPZP (على Yurpmshhefus RP HNPMYUBA).

lpnbodb movzx tdbuytfef chftpk btzhneof dp retchpzp. h zhuvuchum، yufp yu 16 wypoppzp ъobuyuyuyu sp rpmkhyubefus 32-wyppe. ufbyt vyphshch pavrhmsafus (nbmm me، sufm fbn lushpt dp cp). Rterpumedoss lpnbodb denpowfufefef onn cpnpcofufy obeieјopsp techinb - nsh pvtbebenus rp bvupmaffoph 32-vypopnh bdteuh l chedep-rbnsfi felufpchpzp tszinb، تشريخات uingchpm "! H RTBChchk Obsoyk HZPM Ltbob (Felufpcchchkkykkkki Ynef TBTEYAYA 80 × 25 Uinchpumpch، Lbzdschk Uingchpm ScabnBef ح RBNSFI DCHB VBKFB - LPD UINCHPMB YEZP BFF BFEVHFSH CHEFB).

nM VSUMY OE NPZPEN PVTBEBFSUS L Uteschjubn السير، Ferretsh RTYYMP KATSETS أون UFBFSFEM RPMOPUFSHA UBNPUFPSFEMSFSFS تشين Pvpthdpchobyen. Retebztkhsbfsus Y TsDBFSh Obcbfis على LMSHY NSHs RPLB OE Hneyen، RPPPNH RTPUPP BCHYEUBEN في RPNPSHA LPNBodshch أحزاب اللقاء المشترك $ (RetaipD حول FC تسا Ubnha Lfbodh - Vellpoejob GYLM).

h عادة boot.cfg lfbodh s64 rplb бебнойно عن s32. feretsh، emuy chist chistbchymshop odmbmy، carbsthyul vkhdaf bchtbfshpshpshpftchphbfdpn cpulmygbfemspdkhblbb hzpm ltbob teginb. LFP FPMSLP Obubmp. Nwby Lzheg-FP Rtlebfyueli Khimy Yebmshopzp Tezinb (حوالي UBNPN DEME FBN EEј PUFBMPUSP OEENOPSP DE) H OBBEIEјOPOSK. RPulpmshlh إنشاء Bazthüil Czhatposphus H Ohmychpn Utznofofa Tebmshopzp Tezinb، Chue Uneeois Upphefufchhaf Zhyyuyolen BDTEYUBNY RTY RTEYPDE H Obayeјoshk Tzin، أبوء RTyympush Oyuzp Rtejymipshchebfs.

whchbuchuyuyu Khsphchulb، RPTSBMK، DPVBChma RPUMEDOYK Oftiy - RT Ppetchelch، YuFP RTPGEUPT Rapdabychbef Obayeјoshk Tzin. UKFFS من حسابات RTP H FPN، Yufp OE Chu Lyphshch أعلام NPCOP Yaneyofs Rtpztbnip. FP Eufsh Tezyufo OE هو جيد 16 Winsposhk. على ptpgeuupuptbi dpufhrop dms yyneyueyus vyft yfp npcp pvobthtsyfsh. TBWEF PDD OTSA UBNI، ULBCH FPMSLP، UFP LPNBODB Pushf Rpneebef Tezyuft Zhmbzph H UFEL، B Popf Chistbmlishef Upteensign Ufelb Flags PE. Flblne Pvtbnn ESP NPCOP NOSFSH GEMILPN، B OE PFDEMSHOKNY LPNBodbny. CHPF RPMOSHK LPD Swithalls bbzthylb:

ORG 0x7C00 JMP التمهيد؛ listfs محاذاة 4 fs_magic dd؟ fs_version dd؟ fs_flags dd؟ FS_BASE DQ؟ fs_size dq؟ FS_MAP_BASE DQ؟ fs_map_size dq؟ fs_first_file dq؟ FS_UID DQ؟ fs_block_size dd؟ ؛ bbzpmpcpl zbkkmb الظاهري في 0x800 f_info: f_name rb 256 f_next dq؟ f_prev dq؟ f_parent dq؟ f_flags dq؟ f_data dq؟ f_size dq؟ f_ctime dq؟ f_mtime dq؟ F_ATIME DQ؟ نهاية الظاهري؛ Bosset Obuschopzp К Боблхюююльбльб Lable Sector_Per_Track Word at $$ LABE HEAD_COUNT BYTE في $ + 2 Label Disk_id byte في $ + 3 Reboot_MSG DB "اضغط على أي مفتاح ..."، 13،10،0 BOOT_FILE_NAME DB "BOOT.BIN"، 0؛ chisppd wfply ds: si عن lttbbo write_str: ادفع si mov ah، 0x0e @: lodsb test al، al jz @ it it 0x10 jmp @ @: pop si ret؛ خطأ Ltifyewulbs Pyivlb: Pop Si Call Write_str؛ إعادة التشغيل Reboot: MOV SI، Reboot_MSG Call Write_str Xor Ah، Ah Int 0x16 JMP 0xFFFF: 0؛ bbzthylb welfptb dx: Axh h كيف es: di load_sector: دفع dx إضافة الفأس، كلمة adc dx، word cmp byte، 0xff je .use_edd دفع bx cx si div mov cl، dl inc cl div mov dh، ah mov ch، al mov mov DL، MOV BX، DI MOV AL، 1 MOV AL، 3 @: MOV AH، 2 Int 0x13 JNCF XOR AH، آه Int 0x13 ديسمبر Si Jnz @ B.Error: Call Error DB "خطأ القرص"، 13.10 0 @ : pop si cx bx dx ret .use_edd: ادفع si mov byte، 0x10 mov byte، 0 mov word، 1 mov، di push es كلمة pop word mov، ax mov، dx mov word، 0 mov word، 0 mov ah 0x42 mov dl ، MOV SI، 0x600 Int 0x13 JC .error pop si dx ret؛ Ripule Zhbkmb Ukneen DS: SI H LBFBOX DX: AX Find_File: Push CX DX DI .Find: CMP AX، -1 JNE @ F CMP DX، -1 JNE @ F.Found: خطأ في الاتصال DB "غير موجود"، 13، 10.0 @: mov di، f_info call load_sector دفع دي mov cx، 0xFFFFFF xor al، al repne scasb neg cx cec dec cx pop di push si repe cmpsb pop si je. vound mov ax، word mov dx، word jmp. وجدت: pop دي DX CX RET؛ Бобзльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльбльб. lpmyueuufchp кбтчтбэтцески кбтчтбэтцески пелфпчччтбэбэбэфуск х load_data: push bx cx dx si di mov ax، word mov dx، word. تحميل الفأس: -1 jnef cmp dx، -1 jne @ f .file_end: pop di si dx cx mov ax ، BX POP BX Sub Sub Ax، BX SHR AX، 9 - 4 Ret @: MOV DI، 0x8000 / 16 Call Load_Sector MOV SI، DI MOV CX، 512/8 - 1 .Load_Sector: Lodsw MOV DX، إضافة SI، 6 CMP AX ، -1 jne @ f cmp dx، -1 je .file_end @: دفع es mov es، bx xor di، di call load_sector أضف bx، 0x200 / 16 pop es loop. تحميل_sector lodsw mov dx، jmp .load_list؛ FPPULB Chipdb H Obubel Boot:؛ favenine utynophostePacker JMP 0: f @: MOV AX، CS MOV DS، AX MOV ES، AX؛ Linffin Ufel Mov SS، AX MOV SP، $؛ tbteyn rtttschbobs sti؛ سوف Obbropnown فتح Ombrzthpyopp D: DYLB MOV، DL؛ prodemnein rbtbnestech кнбзthapyoppp dyulb mov ah، 0x41 mov bx، 0x55aa int 0x13 jc @ f mov mov، 0xff jmp .disk_detected @: MOV AH، 0x08 XOR DI، DI PUSH ES INT 0x13 POP ES JC Load_Error Inc Mov، DH و DH و DH CX، 111111B MOV، CX .disk_detected:؛ Obforthene rtpdpmceye obubmshopzp кбот_file_name mov ax، boot_file_name mov ax، word mov dx، word call find_file mov bx، 0x7e00/16 اتصل load_file_data؛ Reteportine على RTPDPMCEA JMP BOOT2؛ Rhufpe Rtpuftboufchp Th Ubfchtb RB 510 - ($ - $$) DB 0x55.0xaa؛ DPRMFEMFEMCHBE LOAD_MSG_PREFFIX DB "تحميل" "، 0 load_msg_suffix db" ". .. "، 0 OK_MSG DB" OK "، 13،10،0 CONFIG_FILE_NAME DB" BOOT.CFG "، 0 Start16_MSG DB" ابتداء من Kernel 16 بت ... "، 13،10،0 Start32_msg DB" بدء نواة 32 بت. .. "، 13،10،0؛ tbbeyeyey wftply ds: si rp uunchpmx skryab split_file_name: push si @: lodsb cmp al،" / "je @ test al، @ @ jmp @ @: MOV AX، SI POP SI Ret؛ bzthlb zhbkmb لها yneoen ds :. si b vhzhet bx: 0 tbnet zhbkmb b uelfptbi chpchtbebefus w oux load_file: push si mov si، load_msg_preffix call write_str pop si call write_str push si mov si، load_msg_suffix الاتصال Pop Si Push Si BP MOV MOV DX، Word Mov Ax، Word @: دفع AX Call MOVE_FILE_NAME MOV BP، AXP POP AX Call Find_File اختبار بايت، 1 JZ Mov Si، BP MOV DX، Word MOV AX، Word JMP : Call Load_File_Data MOV SI، OK_MSG Call Write_str Pop BP Si Ret؛ Rtpdpmtseoye obyubmshopzp bzthyuylb boot2:؛ bzthyn lpozhyzhtbgypooschk zhbkm bzthyuylb mov si، config_file_name mov bx، 0x1000 / 16 call load_file؛ chschrpmoyn bzthpyuuschk ultyrf MOV BX، 0x9000 / 16 MOV BP، 0x6000 MOV DX، 0x1000 .parse_line: MOV SI، DX .Parse_Char: Lodsb Test Al، Al Jz .config_end CMP Al، 10 JE .RUN_COMMAND CMP AL، 13 JE .RUN_COMMAND JMP .PARSE_CHAR. Run_Command: MOV BYTE، 0 XCHG DX، SI CMP BYTE، 0 JE .parse_line؛ rhufbs sftplb cmp byte، "#" je .parse_line؛ lpndefbtyk cmp byte، "l" je .load_file؛ kbbzthlb zbbkmb cmp byte، "s" je .start؛ BBRHUL SDTB؛ omeachufobs lpnbodb mov al، mov [.cmd]، al call rror db "أمر script boot غير معروف" ".cmd db؟ db" "!"، 13،10،0 .config_end:؛ rty rtbchimshopn lpbyzchtbgypopn zbkme nshn oe dpmcsezh odb rprbufsh؛ إعادة تمهيد JMP Reboot؛ Load_File: Push DX Inc Si Call Load_file دفع AX MOV CX، 512 Mul CX MOV Word، AX MOV Word، DX MOV Word، 0 MOV Word، 0 MOV AX، BX MOV CX، 16 MUL CX MOV Word، AX MOV Word، DX MOV Word، 0 MOV Word، 0 POP AX AX SHR AX، 9 - 4 إضافة BX، AX ADD BP، 16 POP DX JMP .Parse_line؛ obrkul sdtb.start:؛ RT PPCT، YUFP КБ-БРСТчЕНО IPFS VSP PDYA ZBKM CMP BX، 0x9000 / 16 JA @ F Call Error DB "لا Kernel Loaded"، 13،10،0 @:؛ Obrpossen Rpumedyadok Bneeop Urins، AX MOV CX، 16 MOV DI، BP REP Stosw؛ Weigibmybggy SDTB DMS OKHTSOPK TBTBTSDOPUFY Inc Si CMP Word، "16" JE .start16 CMP Word، "32" JE .start32؛ كلمة CMP، "64"؛ JE Start64؛ omechufobs tstbsdopufs ndtb call rror db "وسيطة start start start"، 13،10،0؛ Scaberhul 16-tbtsdppsp sdtb.start16: mov si، start16_msg mov bx، 0x6000 mov dl، jmp 0x9000؛ TBRKHUL 32-TBTBTSDPSP SDTB.START32:؛ Chischpdin Hchedpnmey P Obrukhul 32-Wyfopsp SDTB MOV SI، Start32_msg Call Write_str؛ Rtpchein، Yufp Rtpgeupt OE ICE I386 MOV AX، 0x7202 دفع الفأس POPF Pushf POP BX CMP AX، BX JE @ Call Error DB "مطلوب i386 أو أفضل"، 13،10،0 @ @:؛ obbzthein lgdt h h gdtr؛ obrtfin rtttschbcbbl؛ Retekdјn H Baye-Vegetable Thesign MOV EAX، CR0 أو EAX، 1 MOV CR0، EAX؛ retekdјn حوالي 32- Vecfered LPD JMP 8: Start32؛ FBVMIGB devtyrftptp uzeneofph dms 32-vypoppzp sdtb محاذاة 16 GDT32: DQ 0؛ NULL - 0 DQ 0x00CF9A00000000FFFF؛ رمز - 8 DQ 0x00CF92000000FFFF؛ البيانات - 16 GDTR32: DW $ - GDT32 - 1 DD GDT32؛ 32-Vyphotk LPD استخدام 32 Start32:؛ FaveWine UFEL MOV EX، 16 MOV DS، AX MOV GS، AX MOV SS، AX Movzx ESP، SS، AX Movzx ESP، SS؛ ChurchPdine Uingchpm حول LTBO MOV BYTE، "! "؛ هيل JMP $

حاليا، ألعب مع Assember X86 لتحسين مهارات البرمجة المنخفضة المستوى. حاليا، لدي مشكلة صغيرة في مخطط التعامل في وضع محمي 32 بت.

الوضع هو كما يلي:

لدي برنامج محمل في 0x7e0، والذي يتحول وحدة المعالجة المركزية إلى الوضع المحمي والعائدات إلى العلامة المقابلة في التعليمات البرمجية:

[...] رمز إلى تبديل وحدة المعالجة المركزية في الوضع المحمي [...] أحزاب اللقاء المشترك ProtectedMode [...] بت 32 ProtectedMode: .Halt: HLT أحزاب اللقاء المشترك .Halt

بينما كل شيء يعمل بشكل جيد. أحزاب اللقاء المشترك ProtectedMode يعمل دون انتقال بعيد صريح لمسح قائمة انتظار قبل العينة، حيث يتم تحميل هذا البرنامج مع تعويض 0 (0 ORG في البداية)، مما اضطر قطعة رمز لتحديد المكان الذي ترغب به.

مشكلتي الحالية هي أنه في تسمية "ProteTateModeMode"، أريد أن أذهب إلى برنامج آخر تم تنزيله من 0x8000 (قمت بفحصه باستخدام تفريغ ذاكرة، تعمل وظيفة التنزيل بشكل صحيح وتم تحميل البرنامج بشكل صحيح إلى 0x8000)،

نظرا لأن وحدة المعالجة المركزية موجودة الآن في ProteTateDmode، وليس في RealMode، فإن مخطط العنوان مختلف. يستخدم ProteTeTeSitMode واصفات للبحث عن عنوان أساسي وحد أقصى جدول واصف لإضافة هذه الإزاحة والحصول على العنوان الفعلي (كما فهمت). لذلك، قبل proteatedmode المدخلات، كان من الضروري تثبيت GDT.

مظهري مثل هذا:

٪ ifndef __gdt_inc_included __٪ تحديد __gdt_inc_included__؛ ********************************************؛ * جدول واصف عالمي (GDT) *؛ ********************************* Null_desc: DD 0؛ ولاية واصف 0 رمز_DESC: DW 0XFFFF؛ الحد منخفض DW 0؛ قاعدة منخفضة DB 0؛ قاعدة منتصف DB 10011010B؛ الوصول DB 11001111B؛ الحبيبية DB 0؛ قاعدة عالية data_desc: DW 0xFFFF؛ واصف البيانات DW 0؛ الحد منخفض DB 0؛ قاعدة منخفضة DB 10010010B؛ الوصول DB 11001111B؛ الحبيبية DB 0؛ قاعدة عالية GDTR: الحد DW 24؛ طول قاعدة GDT DD Null_desc؛ قاعدة GDT٪ endif؛ __ gdt_inc_included__

وتحميلها في تسجيل GDT من خلال

lgdt.

حقيقة أنني ما زلت لا أفهم كيف أذهب الآن إلى العنوان الفعلي الخاص ب 0x8000 في proteatedmode باستخدام GDT؟

الأولى كانت أفكاري لتحديد واصف مدونة (code_desc)، والتي ينبغي أن تبين 0x7E00 (تم تحميلها البرامج الحالية) واستخدام الإزاحة المطلوبة للحصول على 0x8000 (512 بايت)، مما أدى إلى قيادة المرحلة الانتقالية:

JMP Code_Desc: 0x200

لكنها لم تعمل.

JMP 0x7E0: 0x200

أيضا لا يعمل ...

هل تتخيل من أي وقت مضى ما أفتقده هنا؟ ربما لم أفهم شيئا كبيرا في مخطط التعامل المحيطي 32 بت، واستخدام GDT.

رمز كامل:

BITS 16 ORG 0؛ تحميلها مع أوفست 0000 (Phys Addr: 0x7e00) بدء تشغيل JMP: XOR AX، AX MOV AX، CS MOV DS، الفأس؛ تحديث جزء البيانات CLI؛ مسح المقاطعات LGDT؛ تحميل GDT من GDTR (انظر GDT_32.INK) اتصل Opena20gate؛ افتح مكالمة بوابة A20 EnablePmode؛ يقفز إلى ProtectedMode. ******************؛ * يفتتح A20 بوابة *؛ ****************** OpenA20Gate: في al، 0x93؛ قم بتبديل بوابة A20 عبر منفذ A20 سريع 92 أو Al، 2؛ تعيين A20 بوابة بت 1 و al، ~ 1؛ واضح Init_Now بت خارج 0x92، آل متقاعد، **************************؛ * تمكين الوضع المحمي *؛ ******** ****************** Enablepmode: MOV EAX، CR0 أو EAX، 1 MOV CR0، EAX JMP Protectectmode؛ هذا يعمل (القفز إلى التسمية والتوقف)؛ JMP (Code_Desc-null_desc): proteatedModeMode؛ \u003d\u003e لا يعمل، أحزاب اللقاء المشترك 08H: ProtectedMode، \u003d\u003e لا يعمل. ***************؛ * حقول البيانات *؛ * & يشمل *؛ ******* * ******* تشمل٪ "GDT_32.INC". ******************؛ * الوضع المحمي *؛ ********** * ******* BITS 32 PROTECTEDMODE:؛ HERE I WANT TO JUMP TO البدنية ADDR 0X8000 (ELF64 ASM برنامج) .Halt: HLT أحزاب اللقاء المشترك .Halt

11

من أجل كتابة عملية، تحتاج إلى فهم العديد من التفاصيل. هنا دعنا نيرك قليلا، (ولكن دعونا نتفق على أن مانا سوف تقرأ نفسك للتحدث عن شيء ما).
بصراحة، هناك سحابة من بعد الظهر، وتحدث Iley وPehat، وIley، وPehats عن هذا الوضع، ولكن طلب مني أن أصف ذلك إلى حد ما في الإطار العام. الآن منح النظرية لفترة وجيزة (بشكل عام، وخاصة بالنسبة لهذا Intel Mana كتب)، فلنبدأ في كتابة التعليمات البرمجية.

مقدمة في الوضع المحمي.
لذلك، يختلف PM بشكل كبير عن كل شيء على دراية بوقت dos'a من الوضع الفعلي (RM). الآن عليك أن تعتاد على: لا توجد شرائح ثابتة، 64 كيلو بايت، طاولات المقاطعة في كيلوبيت 1D، عناوين قواعد القطاعات في سجلات القطاع، بشكل عام، عالم جديد تماما.
يتم وصف الأقسام الآن جدول واصف عالمي (GDT)وبعد يمكن أن يكون هذا الجدول فقط في حالة واحدة. إنه هيكل في الذاكرة. ليس قطعة! يمكن وضعها في الذاكرة في أي مكان، ولكن يتم تسجيل عنوانه وحدها في سجل GDTR. هنا هيكلها:

يتكون الجدول نفسه من مداخل الهيكل التالي (بالمناسبة، تسجيل الصفر فارغ. هذا مهم. عند الاتصال بالذاكرة، "الموصوفة" بواسطة واصف صفر، احصل على خطأ #GP - حماية عامة):
دعونا نفكر في هذا الهيكل عن كثب.

1. الحد القطاعي:
الغرض من هذا المجال أمر مفهوم بالاسم، ولكن هناك دقة. دفن الكلب في Bate G (الحبيبية).
إذا تم إلغاء تثبيتها، فسيتم احتساب الذاكرة في بايت. في هذه الحالة، قد تختلف حجم القطاع من 1 بايت إلى 1 ميغابايت لكل حجم في 1 بايت.
إذا قمت بتعيينه في 1، فسيتم إدخال عنوان صفحة الذاكرة. ثم سنكون قادرين على معالجة ما بين 4 كيلو بايت إلى 4 غيغابايت مع تغيير في الحجم لمدة 4 كيلو بايت (حجم الصفحة). بشكل عام، مفضل معالجة الصفحة (مقارنة (1 ميجابايت + 64KB-16B) و 4 جيجابايت). دعونا نتحدث في هذا المنشور فقط حول معالجة القطاع. الترحيل يستحق محادثة منفصلة.

2. العنوان الأساسي:
هنا تحدد العنوان الفعلي للقاعدة.

3. نوع الحقل:
تحدد مجموعات البت نوع القطاع:

4. S (نوع واصف):
تقول وثائق Intel أنه إذا لم يتم تعيين هذا البت، فإن هذا الواصف من خلال شريحة النظام، وإلا - رمز أو البيانات. تحت النظام يعني LDT، TSS، غيتس المقاطعة وغيرها مثلهم (عنها لاحقا).

5. DPL (مستوى امتياز واصف):
امتيازات القطاع الموصوف. كل حلقات مألوفة.

6. ص (قطاع الحاضر):
إذا تم تثبيت هذا البت، فإن المعالج "يعرف"، أن القطاع هو بالفعل في الذاكرة (على الرغم من أنه من الأفضل أن نقول صالح). إذا قمت بتنزيل محدد واصف إلى تسجيل القطاع مع Pit Pit Pit، فسوف يحدث #np (غير موجود). بشكل عام، سيشرح معنى هذه العبارة التهاب المشرة في وقت لاحق قليلا.

7. د / ب:
للحصول على شرائح من أنواع مختلفة، يتم تفسيرها بشكل مختلف.
1. للحصول على شرائح التعليمات البرمجية:
32 أو 16 بت من العنوان الفعال وعدو المعاملات.
(1-32; 0-16);
2. للحصول على كومة:
مؤشر المكدس 32 أو 16 بت. (1-32؛ 0-16)؛

8. G:
إنه يؤثر على الوحدات (بايت أو صفحات) الحد الأقصى للجزء. بشكل عام، يمكن تضمين الترحيل عند التحول إلى PM من خلال إعداد 31 بت CR0.

بعض مزيد من المعلومات:
أعتقد أن كلمة العالم لم تكن عبثا. لذلك لا يزال هناك نوع من اللوحة. صحيح، هناك أيضا جدول واصف محليوبعد يمكن أن تكون مجموعة رائعة. على سبيل المثال، يمكن استخدامها في تنفيذ مهام I.T.D. و هنا LDT تمثل بالفعل شريحة! حتى تعتاد على عبارات نوع "شريحة واصف واصف من الواصفات".

بعد وصفنا الجدول، تحتاج إلى تحميل إلى السجل gdtr.وبعد يتم ذلك بعيدا عن MOV. gdtr. شغلها الفريق lgdt fword.وبعد هذا هو، من الضروري تشكيل هذا الهيكل بنفسك وتحميل السجل المذكور أعلاه. هناك أيضا فرق العمل مع هذا السجل، لكننا نحمل الفراق في أوروبا.

نقطة اخرى. لم يتم تخزين مساء PM في سجلات القطاع وليس العناوين الأساسية للقطاعات (كما هو الحال في RM) وأشياء مدربة خصيصا محدداتوبعد هيكلهم كما يلي:

المؤشر هنا هو رقم التسلسل للواصف في الجدول.
تي يظهر مكان البحث عن واصف (في GDT. أو LDT).

الآن، من الواضح بالفعل كيفية بناء جدول، دعنا نتحدث عن كيفية الذهاب إلى PM (لاحظت أنه يمكن القيام بذلك فقط من RM). بشكل عام ... تحتاج إلى تثبيت BIT 0 سجل التحكم CR0. على الرغم من الكذب. أولا تحتاج إلى حظر جميع المقاطعات ( NMI (المقاطعات غير ممكن.) بما في ذلك)، افتح خط العنوان A20. (عنوان 32 بت متاح)، تنزيل gdtr.والقفز على الملصق - البدء.

دعونا نستخدم Bootloader (يمكنك أن تأخذ Kolibri)، والذي سيقوم بشحن التعليمات البرمجية الخاصة بنا في 1000h: 0 (rm'ovsky، Note، العنوان).
لن يكون ناعما هنا كما هو الحال في هؤلاء مانه عندما يذهب رئيس الوزراء مباشرة من محمل الإقلاع. كل شيء أكثر تعقيدا. ولكن أولا، دعونا نلقي نظرة على الرمز الذي سيقوم بتنزيله Bootloader (اكتب كل شيء على Fash "E). هذا هو نوع من HelloWorld. تحميل، تتحرك في PM وطباعة تحية. كل شيء.

تنسيق ثنائي.
XOR AX، الفأس
CLI؛ إعادة تهيئة سجلات القطاع
MOV SS، الفأس
XOR Sp، Sp
STI.
MOV AX، 3
INT 10H.

JMP 1000H: R_START

MOV AX، 1000H؛ Reconfigure السجلات
MOV DS، الفأس
MOV ES، الفأس

في Al، 0x92؛ بدوره على A20
أو، 2
خارج 0x92، آل

lgdt fword؛ قم بتنزيل سجل GDTR
MOV EAX، CR0
أو، 1؛ تثبيت بت 0
MOV CR0، EAX؛ بدوره مساء

JMP fword 08h: startup32؛ القفز في مساء.

محاذاة 8؛ المعالج أسرع من علامة المحاذاة
GDT:
DQ 0؛ فارغة
DB 0FFH، 0،0،0،0،9AH، 0CFH، 0؛ كود
DB 0FFH، 0FHH، 0،0،0،92H، 0CFH، 0؛ البيانات
DB 0FFH، 0FHH، 0،80H، 0BH، 92H، 40H، 0؛ جيل الفيديو
تسمية gdt_size في $ -GDT
GDTR:
DW GDT_SIZE-1
DD GDT + 10000H
؛ تحتاج إلى تسجيل عنوان 32 بت. الآن نحن في الجزء 1000h، قاعدة ما هي 1000h * 10h (بواسطة؛ العنوان الفعلي) \u003d\u003e العنوان الفيزيائي GDTR (العلامات!) \u003d 10000h (العنوان الفعلي لقاعدة الجزء) + إزاحة

افتراضي؛ الآن، في الواقع، تسد الفضاء حتى نهاية القطاع
RB 10000H- $؛
نهاية الظاهري
؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛ ؛؛؛؛
use32.
المؤسسة $ + 10000H، وهذا هو ما: في PM، ونحن نعمل مع قطاعات شقة، وإذا ما تركنا رمز، لPM قبل ORG، ثم، عنوان الوريد لن يتطابق مع عنوان شقة. حتى هنا.

startup32:؛ نقطة الدخول في PM
MOV AX، 10H؛ هنا أنت محددات صامتة. في كثير من الأحيان (! لا تنسى رقم التسلسل في
MOV ES، AX؛ الجدول) شريحة رمز محدد - 08H. البيانات - 10 ساعة، شرائح الفيديو - 18 ساعة
MOV DS، الفأس
MOV FS، الفأس
MOV SS، الفأس
MOV ESP، 10000H؛ كومة
MOV AX، 18H
MOV GS، الفأس

MOV ESI، HI_STRING؛ سنظهر أننا عبرنا بنجاح
طباعة مكالمة.
JMP $

؛ ESI - عنوان الخط
مطبعة:
بوشاد.
XOR EBX، EBX
MOV AH، 07H؛ سمة
يضع:
موف آل،
MOV، الفأس.
Inc Ebx.
اختبار Al، Al Al
يضع JNZ.
بوباد.
ret.
hi_string db 'مرحبا بك في PM، المتأنق'، 0

ماذا فعلنا؟ حمل بوغلودا لتحميله بنجاح إلى 1000h: 0، من حيث واصلنا. وشملت الأولى A20.، حظر جميع المقاطعات، التي تم تنزيلها في gdtr. القيمة المناسبة، قفزت على تسمية تسجيل الدخول. أذكر أننا قفزنا
JMP fword 08h: startup32
هذا هو، 08H هو محدد واصف التعليمات البرمجية. تعتاد على.

الآن كيف تبدأ هذه المعجزة. شخصيا، يمكنني استخدام WinImage و VirtualBox. قم بتنقية محمل الإقلاع إلى قرص BUCKET ووضع ملف .bin إلى الجذر. نحن نقوم بحفظ V.VFD، ونصمع المسار إلى صورة القرص المرن في الخصائص آلة افتراضية، تشغيل ونرى النتيجة.

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

مصدر المعلومات.
1) على الفور أريد أن أعرب عن امتناني ل Phantom_84 AKA EGOS للإشارة إلى المسار الصحيح وساعدني في البداية. بدونه، سأكون أكثر صعوبة في معرفة ذلك.