2012-06-24 23 views
6

Ho letto da qualche parte in Internet che, prima di saltare a 0x7c00, il BIOS carica in% dl il "numero di unità" del dispositivo avviato. Ma cos'è questo "numero di guida"? A ciascun dispositivo collegato al computer viene assegnato un numero dal BIOS? In tal caso, come posso sapere a quale numero è assegnato un dato dispositivo?Boot PC: registro dl e numero di unità

Lettura del codice sorgente di GRUB Ho trovato quando% dl ha bit 0x80 e 0x70 impostati, sovrascrive l'intero registro con 0x80. Perché? Ecco il codice:

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: 

proposito. Esiste una risorsa dettagliata sul processo di avvio dei PC nel web? Specialmente su cosa fa il BIOS prima di dare il controllo al bootloader e anche i codici standard usati per comunicare con esso (come "numero di unità"). Speravo di scrivere il mio bootloader e tutto quello che ho trovato è un po 'troppo vago, non abbastanza tecnico al punto di informare dello stato esatto del computer quando il mio bootloader inizia a funzionare.

risposta

3

Le funzioni int 13h del BIOS accettano un numero di unità. Dovrebbe essere quel tipo di numero di unità in DL, quello che un BIOS comprende, perché, beh, utilizza esso stesso int 13h per caricare i settori di avvio.

+0

Ok. So che il bios lo capisce, ma voglio capire anche io. :) Quello che voglio sapere è come sono assegnati questi codici. Ad esempio, se sono statici (0 per un determinato dispositivo, 1 per un altro ... ecc.) E in tal caso, dove posso ottenere questo elenco; e se non lo sono, come li assegna il bios. – Kei

+1

AFAIK, 0x80 è l'unico numero di unità valido per il disco rigido di avvio, analogamente 0x00 per l'unità disco floppy di avvio. C'è questo commento nel codice: 'Questa è una soluzione alternativa per i BIOS buggy che non passano correttamente l'unità di avvio. Se GRUB è installato su un HDD, verificare se DL è mascherato correttamente. In caso contrario, si supponga che il BIOS abbia passato un valore fasullo e impostato DL a 0x80, poiché questa è l'unica unità di avvio possibile. Se GRUB è installato in un floppy, questo non fa nulla (salta solo). È così che è stato tradizionalmente. I numeri delle unità non di avvio sono più alti. –

+0

Vedo. Sarà lo stesso numero (0x80) per le unità flash e cd-rom? – Kei