Любой загрузчик загружается по адресу 0x7C00. Вот в чем вопрос: Как определить с какого устройства (floppy(A: B/HDD(0:0 0:1))? Нужно что бы знать откуда ядро грузить.
В регистре dl будет номер устройства загрузки. Поэтому его лучше не трогать или сохранить. Потом этот номер надо передавать в прерывание int 0x13 как номер устройства, с которого надо считать сектора. По поводу раздачи номеров устройств был спор (поиск по форуму), но у Ральфа Брауна написано так.
Можно загрузить вторичный загрузчик, опираясь исключительно на значение из регистра dl, а там уже использовать свое собственное соглашение об именовании загрузочных устройств, например, как это реализовано в ntldr. Хотя лично я определяю загрузочное устройство по значению регистра dl, при этом эмуляция флоппика/харда при загрузке с CD/DVD использоваться не должна.
Stamerlan Вместе с загрузчиком храним файл. В котором написанно откда грузимся. Так делает МС это более уневерсально чем через EDD пробовать определять.
Так я об этом же. В конфиг. файле загрузчика храним имя загрузочного устройства в каком-либо оригинальном формате, причем чем этот формат универсальнее, тем лучше. Здесь проблема может возниктуть только при загрузке со сменных носителей, но кто "серьезные" оси загружает со сменных носителей! Я загружаю, поэтому использую EDD и другие методы. EDD надежен, только проблема в том, что не все устройства поддерживают идентификацию через EDD. А вообще в связи с этим не мешало бы почитать BIOS Boot Spec.
Загрузочный флоппик - это практически всегда основной A (3F0h-3F7h, Drive Sel 0). Поддержку двух номеров флоппиков 0 и 1 считаю более чем достаточной. При использовании одного из этих номеров в BIOS полностью игнорирую это значение, заменяя его на Drive Sel из DOR.