نكتب نظام تشغيل. الجزء 1. اللودر

تحية للجميع! اليوم سنكتب محمل إقلاع يقوم بإخراج "Hello World" وتشغيله على VirtualBox. سنكتب في FASM المجمع. يمكنك تنزيله من هنا . سنحتاج أيضًا إلى VirtualBox و UltraISO . قبل كتابة التعليمات البرمجية ، سوف نفهم كيف يتم تحميل أنظمة التشغيل.

لذلك ، عندما نضغط على زر الطاقة الكبير على جهاز الكمبيوتر لدينا ، يبدأ النظام ، والذي يكون على أي جهاز كمبيوتر - BIOS (نظام الإدخال / الإخراج الأساسي أو نظام الإدخال / الإخراج الأساسي). مهمة BIOS هي:


  1. اكتشف جميع الأجهزة المتصلة وتحقق من قابليتها للتشغيل. برنامج POST (Power On Self Test ، power-on self-test) مسؤول عن ذلك. إذا لم يتم اكتشاف مكواة حيوية ، فإن مكبر الصوت (إن وجد) سيصرخ شيئًا غير مفهوم ولن يذهب التنزيل إلى أبعد من ذلك.
  2. تزويد نظام التشغيل بوظائف للعمل مع الأجهزة.
  3. اقرأ الجزء الأول من جهاز التمهيد في الجزء صفر من ذاكرة الوصول العشوائي عند الإزاحة 0x7C00h والتحكم في النقل هناك. 1 قطاع على القرص 512 بايت. لذلك ، يجب ألا يتجاوز محمل الإقلاع 512 بايت. يحدد BIOS أن القطاع قابل للتشغيل من خلال وجود 0x55 و 0xAA في وحدتي بايت الأخيرة.

الآن يمكنك البدء في كتابة التعليمات البرمجية. قم بتشغيل الملف FASMW.EXE ، الموجود في الأرشيف مع FASM ، وأدخل الكود التالي هناك:

org 7C00h

 start:
    cli              ;  (   )
    xor ax, ax       ;  ax
    mov ds, ax       ; dataSegment   
    mov es, ax       ;  es   
    mov ss, ax       ; StackSegment   
    mov sp, 07C00h   ;    
    sti              ; 

  ; 
  mov ax, 3
  int 10h

  mov ah, 2h
  mov dh, 0
  mov dl, 0
  xor bh, bh
  int 10h

  ; 
  mov ax, 1301h
  mov bp, message
  mov cx, 12
  mov bl, 02h
  int 10h

  jmp $

message db 'Hello World!',0

times 510 - ($ - $$) db 0 ;     510- 
db 0x55, 0xAA ;   

يتطلب هذا الرمز القليل من الشرح. الفريق

org 7C00h

نقول أن الرمز يحتاج إلى تحميله في ذاكرة الوصول العشوائي عند 0x7C00. ضمن الصفوف

  mov ax, 3
  int 10h

قمنا بضبط وضع الفيديو على 80x25 (80 حرفًا لكل سطر و 25 سطرًا) وبالتالي مسح الشاشة.

  mov ah, 2h
  mov dh, 0
  mov dl, 0
  xor bh, bh
  int 10h

هنا نضع المؤشر. الدالة 2h المقاطعة 10h مسؤولة عن ذلك. في التسجيل dh نضع إحداثيات المؤشر في Y ، وفي التسجيل dl في X.

  mov ax, 1301h
  mov bp, message
  mov cx, 12
  mov bl, 02h
  int 10h

نطبع خط. وظيفة 13h مقاطعة 10h مسؤولة عن ذلك. في تسجيل bp ، نضع السلسلة نفسها ، في cx تسجيل عدد الأحرف في السلسلة ، في bl تسجيل السمة ، في حالتنا اللون ، سيكون أخضر. تؤثر البتات الأربعة الأولى على لون الخلفية ، وتؤثر البتات الأربعة الثانية على لون النص. أدناه هو مخطط الألوان

0 - , 1 - , 2 - , 3 - , 4 - , 5 - , 6 - , 7 - -, 8 - -, 9 - -, A - -, B - -, C - -, D- -, E - -, F – .

في النسق

jmp $

يتجمد البرنامج.

نقوم بتجميع الكود بالضغط على Ctrl + F9 وحفظ الملف الناتج كملف boot.bin.

إطلاق


قم بتشغيل UltraISO واسحب ثنائينا إلى منطقة خاصة (مميزة بسهم أحمر).



بعد ذلك ، انقر بزر الماوس الأيمن على binarink واضغط على الزر مع النقش التالي: "تثبيت كملف تمهيد". بعد ذلك ، احفظ ملفنا بتنسيق ISO.
افتح VIrtualBox وأنشئ جهازًا افتراضيًا جديدًا (إذا كنت لا تعرف كيفية القيام بذلك ، فانقر هنا ). لذلك ، بعد إنشاء الجهاز الظاهري ، انقر فوق "تكوين ، حدد عنصر" الوسائط "، انقر فوق" إفراغ "، حيث" Drive "هو رمز القرص الضوئي. نضغط عليها ونختار "تحديد صورة القرص الضوئي" ، ونبحث عن ملف ISO الخاص بنا ، وانقر فوق "فتح". نحفظ جميع الإعدادات ونبدأ الجهاز الظاهري. يظهر "Hello World!" على الشاشة.



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


All Articles