2012-06-24 5 views
6

Я прочитал где-то в Интернете, что перед переходом на 0x7c00 BIOS загружает в% dl «номер диска» загруженного устройства. Но что это за «номер диска»? Каждому устройству, подключенному к компьютеру, присвоен номер BIOS? Если да, то как я могу узнать, для какого номера назначено данное устройство?PC boot: dl регистр и номер диска

Чтение исходного кода GRUB Я нашел, когда% dl имеет биты 0x80 и 0x70, он перезаписывает весь регистр 0x80. Почему это? Вот код:

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: 

Кстати. Есть ли какой-либо подробный ресурс в процессе загрузки ПК в Интернете? Специально о том, что делает BIOS, прежде чем давать контроль над загрузчиком, а также стандартные коды, используемые для связи с ним (например, этот «номер диска»). Я надеялся написать свой собственный загрузчик, и все, что я нашел, слишком расплывчато, но недостаточно технично, чтобы сообщить точное состояние компьютера, когда мой загрузчик начнет работать.

ответ

3

Функции BIOS int 13h принимают номер привода. Предполагается, что это номер диска в DL, тот самый BIOS понимает, потому что он сам использует int 13h для загрузки загрузочных секторов.

+0

Хорошо. Я знаю, что биос это понимает, но я тоже хочу понять. :) Я хочу знать, как назначаются эти коды. Например, если они статичны (0 для данного устройства, 1 для другого ... и т. Д.), И если да, то где я могу получить этот список; и если это не так, как их назначить биос. – Kei

+1

AFAIK, 0x80 является единственным допустимым номером накопителя для загрузочного жесткого диска, аналогично 0x00 для загрузочного флоппи-дисковода. В коде есть такой комментарий: «Это обходной путь для багги-BIOS, которые не правильно загружают загрузочный диск. Если GRUB установлен на жесткий диск, проверьте правильность маскировки DL. Если нет, предположим, что BIOS передал фиктивное значение и установил DL в 0x80, поскольку это единственный возможный загрузочный диск. Если GRUB установлен на дискету, это ничего не делает (только прыжок). Так было традиционно. Номера без загрузочного диска выше. –

+0

Я вижу. Будет ли это одинаковое число (0x80) для флеш-дисков и дисков cd-rom? – Kei