2015-04-19 2 views
0

im писать загрузчик, который ищет stage2 в FAT32. У меня есть почти весь код работает, но для одной вещи - найти правильный раздел или, вернее, сектор смещения моего разделаBootloader - как найти правильный раздел?

в BIOS достаточно любезен, чтобы предоставить нам номер диска мы были загружены из:

mov [_BOOTDRIVE], dl 

однако есть ли какой-либо способ получить сектор раздела, который мы загрузили, или он должен быть жестко определен каким-то образом?

+2

Не думайте, что это предусмотрено. Вы можете прочитать MBR и проверить, какой раздел отмечен как активный. Или, как вы говорите, hardcode раздел, когда загрузочный сектор установлен. – Jester

ответ

1

Когда загрузочный бот MBR загружает и выполняет загрузочный сектор раздела, он загружает DL с номером диска и DS: SI с указателем на запись в таблице разделов для выбранного раздела. Ваш загрузчик может прочитать эту запись, чтобы определить местоположение ее раздела.

+0

Так же, как я кодировал разбор MBR :) Ах, ну, в любом случае, это похоже на разные BIOS, и id должен зависеть от загрузчика MBR, не изменяя эти регистры. – n00b

+0

@ n00b BIOS ничего не знает о разделе MBR таблицы, поэтому он не загружает DS: SI, он просто устанавливает DL. Это код в самом MBR, который интерпретирует таблицу разделов, загружает ваш загрузчик, устанавливает DS: SI, а затем переходит к вашему коду. Обратите внимание, что «мультизагрузочные» MBR, те, которые позволяют вам выбрать, какой из разделов загружаться, также могут позволить загружать другие диски, поэтому значение DL, переданное вашему коду, может отличаться от того, которое было передано BIOS в BIOS. Вам не нужно беспокоиться о DL и DS: SI, ссылаясь на что-то другое, кроме диска, и загружен из загрузочного загрузчика. –