Я прочитал где-то в Интернете, что перед переходом на 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, прежде чем давать контроль над загрузчиком, а также стандартные коды, используемые для связи с ним (например, этот «номер диска»). Я надеялся написать свой собственный загрузчик, и все, что я нашел, слишком расплывчато, но недостаточно технично, чтобы сообщить точное состояние компьютера, когда мой загрузчик начнет работать.
Хорошо. Я знаю, что биос это понимает, но я тоже хочу понять. :) Я хочу знать, как назначаются эти коды. Например, если они статичны (0 для данного устройства, 1 для другого ... и т. Д.), И если да, то где я могу получить этот список; и если это не так, как их назначить биос. – Kei
AFAIK, 0x80 является единственным допустимым номером накопителя для загрузочного жесткого диска, аналогично 0x00 для загрузочного флоппи-дисковода. В коде есть такой комментарий: «Это обходной путь для багги-BIOS, которые не правильно загружают загрузочный диск. Если GRUB установлен на жесткий диск, проверьте правильность маскировки DL. Если нет, предположим, что BIOS передал фиктивное значение и установил DL в 0x80, поскольку это единственный возможный загрузочный диск. Если GRUB установлен на дискету, это ничего не делает (только прыжок). Так было традиционно. Номера без загрузочного диска выше. –
Я вижу. Будет ли это одинаковое число (0x80) для флеш-дисков и дисков cd-rom? – Kei