Ausgabe 1 — Änderungen 1996 → 2080

Zeile 64: Zeile 64:
 
</asm>
 
</asm>
  
−
Diese Zeile regelt, dass all unsere Adressierungen richtig sind usw. Jetzt basteln wir einen Stack. Er sitzt an Adresse 0x9000. Den Stackpointer setzen wir auf null. Während wir das alles tun, sind übrigens keine Interrupts zugelassen. Nun schreiben wir die Information über das Bootlaufwerk aus DL in eine Variable, rufen die Funktion "load" auf und springen zum geladenen Programm, unserem Kernel rüber (das seht ihr im vollst&auml;ndigen Code weiter unten).
+
Diese Zeile regelt, dass all unsere Adressierungen richtig sind usw. Jetzt basteln wir einen Stack. Er sitzt im Segment 0x9000. Den Stackpointer setzen wir auf null. Während wir das alles tun, sind übrigens keine Interrupts zugelassen. Nun schreiben wir die Information über das Bootlaufwerk aus DL in eine Variable, rufen die Funktion "load" auf und springen zum geladenen Programm, unserem Kernel rüber (das seht ihr im vollst&auml;ndigen Code weiter unten).
 
<br><br>
 
<br><br>
 
Zum Schluss des Codes seht ihr noch folgende Zeilen:
 
Zum Schluss des Codes seht ihr noch folgende Zeilen:
Zeile 86: Zeile 86:
 
     ; -----------------------------------------
 
     ; -----------------------------------------
 
      
 
      
 +
    jmp 0x0000:start
 
     start:
 
     start:
 
                     ; Erst brauchen wir einen Stack.
 
                     ; Erst brauchen wir einen Stack.
Zeile 107: Zeile 108:
 
     mov es, ax    ; Segmentregister updaten
 
     mov es, ax    ; Segmentregister updaten
 
     mov ds, ax
 
     mov ds, ax
−
     push ax
+
     jmp 0x1000:0x0000
−
    mov ax, 0
 
−
    push ax
 
−
    retf
 
 
      
 
      
 
     ; ----------------------------------------------
 
     ; ----------------------------------------------
Zeile 135: Zeile 133:
 
     load:
 
     load:
 
     ; Diskdrive reset (Interrupt 13h, 0)
 
     ; Diskdrive reset (Interrupt 13h, 0)
−
    push ds            ; Sichere DS
 
 
     mov ax, 0          ; Die gewünschte Funktion (reset)
 
     mov ax, 0          ; Die gewünschte Funktion (reset)
 
     mov dl, [bootdrv]  ; Dieses Laufwerk ist gewünscht
 
     mov dl, [bootdrv]  ; Dieses Laufwerk ist gewünscht
 
     int 13h            ; Den Interrupt ausführen
 
     int 13h            ; Den Interrupt ausführen
−
    pop ds            ; DS wiederherstellen
 
 
     jc load            ; Geht nicht? -> Noch mal!
 
     jc load            ; Geht nicht? -> Noch mal!
 
      
 
      
Zeile 209: Zeile 205:
 
     ret
 
     ret
 
      
 
      
−
     ; Rebooten (HEX Dump).
+
     ; Rebooten.
 
     reboot:
 
     reboot:
−
     db 0xEA
+
     jmp 0xffff:0x0000
−
    dw 0x0000
 
−
    dw 0xFFFF
 
 
</asm>
 
</asm>