Pregunta

Ya he hecho una parte de mi sistema operativo en la Asamblea, pero ahora quiero construir un propio gestor de arranque para él también en lugar de utilizar GRUB. Cuando yo estaba desarrollando mi sistema operativo de prueba en Asamblea recuerdo que arranco de esta manera:

org 0x7c00
bits 16

; OS Kernel Here

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

Esto ya he sabe. Ahora quiero utilizar este sistema operativo y ejecutar el "real" que será un archivo * .bin escrito al segundo sector del disco. Entonces me gustaría saber algunas cosas

  • ¿Cómo puedo hacer un cargador de arranque en la Asamblea para ejecutar lo que va a empezar en el segundo sector del disco flexible?
  • necesito añadir nada a la fuente de montaje, que se coloca en el segundo sector del disco flexible?
¿Fue útil?

Solución

Se utiliza int 0x13 a la carga en el número requerido de sectores y salta a la ubicación en la que tiene lugar el nuevo código. No hay nada que tiene que hacer en la segunda etapa, pero tendrá que asegurarse de que se establece DS ser válido para cualquier lugar se carga el código.

Ejemplo de mi pequeño archivo SO:

  /* 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

Eso está en formato GAS manera que usted necesita para invertir el orden de operando, ya que parece que estás usando NASM de la instrucción times. Los nombres de las variables deben explicarse por sí mismo.

Si está desarrollando un sistema operativo manía entonces http://forum.osdev.org/ es un lugar bueno para conseguir el apoyo de otros que hacen lo mismo. Es un poco más especializado que stackoverflow y un montón de cosas OS puede ser bastante esotérico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top