Ausgabe 1 — Änderungen 4266 → 4338

Zeile 60: Zeile 60:
  
 
{{Warnung|Text= Die meisten aktiven Forenmitglieder raten davon ab einen eigenen Bootloader zu schreiben, da es relativ sinnlos und extrem fehleranfällig ist. Vor allem Neulinge sollten stattdessen lieber zu [[GRUB]] (relevante Artikel: [[C-Kernel mit GRUB]], [[GRUB-Image erstellen]], [[Ausgabe_5#Programmierung_eines_GRUB-kompatiblen_Kernels | Ausgabe 5]], [[Multiboot]]) greifen.}}
 
{{Warnung|Text= Die meisten aktiven Forenmitglieder raten davon ab einen eigenen Bootloader zu schreiben, da es relativ sinnlos und extrem fehleranfällig ist. Vor allem Neulinge sollten stattdessen lieber zu [[GRUB]] (relevante Artikel: [[C-Kernel mit GRUB]], [[GRUB-Image erstellen]], [[Ausgabe_5#Programmierung_eines_GRUB-kompatiblen_Kernels | Ausgabe 5]], [[Multiboot]]) greifen.}}
 +
 +
 +
{{Warnung|Text= Teilweise scheint der Reset des Diskettenlaufwerks nicht zu funktionieren, siehe auch die [[Diskussion: Ausgabe 1 | Diskussionsseite]]}}
  
 
Zuerst einmal sucht das BIOS auf dem ersten Sektor von Diskette und Festplatte nach einer Binärdatei, die genau 512 Bytes (1 Sektor) lang ist und am Ende das Wort 0x0AA55 enthält. Jetzt lädt das BIOS unseren Bootloader, wenn es ihn denn gefunden hat, an die Adresse 0x7C00. Damit alles so läuft, wie wir es uns gedacht haben, enthält die erste Zeile unseres Assemblercodes also den Code:
 
Zuerst einmal sucht das BIOS auf dem ersten Sektor von Diskette und Festplatte nach einer Binärdatei, die genau 512 Bytes (1 Sektor) lang ist und am Ende das Wort 0x0AA55 enthält. Jetzt lädt das BIOS unseren Bootloader, wenn es ihn denn gefunden hat, an die Adresse 0x7C00. Damit alles so läuft, wie wir es uns gedacht haben, enthält die erste Zeile unseres Assemblercodes also den Code:
Zeile 97: Zeile 100:
 
     mov sp, 0      ; SP = 0x0000  (der Stackpointer)
 
     mov sp, 0      ; SP = 0x0000  (der Stackpointer)
 
     sti            ; Interrupts zulassen
 
     sti            ; Interrupts zulassen
 +
   
 +
    ; Segmentregister initialisieren (für Zugriff auf bootdrv notwendig)
 +
    mov ax, 0x0000
 +
    mov es, ax
 +
    mov ds, ax
 
      
 
      
 
     ; Bootlaufwerk aus DL speichern
 
     ; Bootlaufwerk aus DL speichern