Frage

Ich habe schon einen Teil meiner OS in Versammlung getan, aber jetzt will ich es auch anstelle der Verwendung von GRUB einen eigenen Bootloader bauen. Als ich meinen Test O in Assembly mir die Entwicklung nicht vergessen, dass ich es so starten:

org 0x7c00
bits 16

; OS Kernel Here

times 510 - ($-$$) db 0
dw 0xAA55

Das habe ich schon wissen. Jetzt mag ich dies nutzen und das „echte“ O ausführen, die ein * .bin-Datei in dem zweiten Sektor der Diskette geschrieben werden. Dann möchte ich Somethings

wissen
  • Wie kann ich einen Bootloader in Assembly tun auszuführen, was auf dem zweiten Sektor der Diskette wird beginnen?
  • Muss ich etwas an die Versammlung Quelle hinzuzufügen, die auf dem zweiten Sektor der Diskette platziert werden?
War es hilfreich?

Lösung

Sie verwenden int 0x13 zu Last in der erforderlichen Anzahl von Sektoren und Sprung auf die Position, die Sie den neuen Code Platz haben. Es gibt nichts, was man in der zweiten Stufe tun müssen, aber Sie werden sicherstellen möchten, dass Sie DS Set für gültig zu sein, wo Sie den Code laden.

Beispiel von meinem kleinen O Archiv:

  /* BIOS loads the sectors into es:bx */
  pushw    $STAGE1_WORKSEG
  popw     %es
  movw     $STAGE1_OFFSET, %bx

read_stage1:

  /* Try to read in a few sectors */
  movb     $0x2, %cl      /* Sector */
  movb     $0x0, %ch      /* Cylinder */
  movb     $0x0, %dh      /* Head */
  movb     $0x0, %dl      /* Drive */
  movb     $0x2, %ah      /* BIOS read function */

  /* How many sectors to load */
  movb     $STAGE1_SIZE, %al 
  int      $0x13
  jnc      read_stage1_done

  /* Reset drive */
  xorw     %ax, %ax
  int      $0x13
  jmp      read_stage1


read_stage1_done:

  /* Perform a long jump into stage1 */
  ljmp     $STAGE1_WORKSEG, $STAGE1_OFFSET

  call     halt

halt:
    /*
    * Function: halt
    * Synopsis: Sends the processor into a permanent halted status
    * Notes:
    *    The only way out of this is to manually reboot
    */
    hlt                     /* Halt the processor */
    jmp      halt

Das ist in GAS-Format, so dass Sie die Operanden, um umkehren werden wollen, weil es sieht aus wie Sie NASM aus der times Anweisung verwenden. Die Variablennamen sollten selbsterklärend sein.

Wenn Sie ein Hobby OS entwickelst dann ist http://forum.osdev.org/ ein guter Ort, um Unterstützung von anderen das gleiche tun. Es ist ein bisschen mehr spezialisiert als Stackoverflow und viele OS Sachen kann ziemlich esoterisch sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top