2012-06-24 21 views
6

Leí en algún lugar de internet que, antes de saltar a 0x7c00, el BIOS carga en% dl el "número de unidad" del dispositivo arrancado. Pero, ¿qué es este "número de unidad"? ¿A cada dispositivo conectado a la computadora se le asigna un número por parte del BIOS? Si es así, ¿cómo puedo saber a qué número está asignado un dispositivo determinado?PC de arranque: registro dl y número de unidad

Lectura del código fuente de GRUB Encontré cuando% dl tiene los bits 0x80 y 0x70 configurados, sobrescribe todo el registro con 0x80. ¿Porqué es eso? Aquí está el código:

jmp 3f  /* grub-setup may overwrite this jump */ 
testb $0x80, %dl 
jz 2f 
3: 
/* Ignore %dl different from 0-0x0f and 0x80-0x8f. */ 
testb $0x70, %dl 
jz 1f 
2:  
movb $0x80, %dl 
1: 

Por cierto. ¿Hay algún recurso detallado sobre el proceso de arranque de las PC en la web? Especialmente sobre lo que hace el BIOS antes de dar el control al gestor de arranque y también los códigos estándar utilizados para comunicarse con él (como ese "drive numer"). Tenía la esperanza de escribir mi propio gestor de arranque y todo lo que encontré es demasiado vago, no lo suficientemente técnico como para informarme del estado exacto de la computadora cuando mi gestor de arranque comienza a ejecutarse.

Respuesta

3

Las funciones de BIOS int 13h aceptan un número de unidad. Se supone que es ese tipo de número de unidad en DL, el único BIOS entiende, porque, bueno, él mismo usa int 13h para cargar sectores de arranque.

+0

Ok. Sé que la BIOS lo entiende, pero también quiero entenderlo. :) Lo que quiero saber es cómo se asignan estos códigos. Por ejemplo, si son estáticos (0 para un dispositivo determinado, 1 para otro ... etc.) y, de ser así, ¿dónde puedo obtener esta lista? y si no lo son, ¿cómo los asignan las biografías? – Kei

+1

AFAIK, 0x80 es el único número de unidad válida para el disco duro de arranque, similarmente 0x00 para la unidad de disquete de arranque. Hay un comentario en el código: 'Esta es una solución para las BIOS defectuosas que no pasan la unidad de arranque correctamente. Si GRUB está instalado en una HDD, verifique si DL está enmascarado correctamente. De lo contrario, suponga que el BIOS pasó un valor falso y configura DL a 0x80, ya que esta es la única unidad de arranque posible. Si GRUB está instalado en un disquete, no hace nada (solo salta). Así es tradicionalmente. Los números de unidades que no son de arranque son más altos. –

+0

Ya veo. ¿Será el mismo número (0x80) para las unidades flash y cd-rom? – Kei

Cuestiones relacionadas