Алгоритм работы кода MBR от Microsoft
BIOS (до MBR)
* BIOS проводит начальную инициализацию оборудования («железа»)
* BIOS определяет, с какого устройства производить дальнейшую загрузку: дискета, флеш-накопитель, жёсткий диск и т. д... (выбор устройства зависит от версии и от настроек BIOS)
…. [в данном описании рассматривается только случай загрузки с жесткого диска..]
* BIOS считывает один сектор (512 байт), который находится по адресу: «цилиндр 0, головка 0, сектор 1», и помещает его в область памяти по адресу 0000:7c00
* BIOS проверяет, что этот сектор оканчивается сигнатурой 55ААh
…. [если это не так, то управление возвращается обратно в BIOS]
* BIOS передаёт управление по адресу 0000:7c00 (то есть сектору MBR)
MBR
Выбор загрузочного раздела и проверка целостности MBR:
* MBR копирует себя с адреса 0000:7c00 на адрес 0000:0600 (освобождая место для будущей загрузки уже собственно загрузчика ОС)
* MBR просматривает по очереди все записи о разделах и ищет первую запись об «активном» (== «загрузочном») разделе (то есть ищет раздел, отмеченный как 80h)
* В случае успеха (раздел, помеченный как 80h — найден) MBR запоминает номер этого раздела
…. [если просмотрены все 4 записи и не найден раздел, помеченный как 80h, то вызывается INT 18h. Это возвращает управление обратно в BIOS, что может приводить либо к загрузке BASIC, либо к повторной попытке загрузить систему с диска, либо к перезагрузке компьютера — в зависимости от версии и реализации BIOS]
* MBR просматривает все оставшиеся записи и проверяет, что это единственный активный раздел (что больше разделов, помеченных 80h, на данном физическом диске не существует)
…. [если находятся другие разделы, помеченные 80h, то MBR выводит сообщение об ошибке (обычно это что-то типа «Invalid partition table»), после чего система подвисает в бесконечном цикле, из которого можно выйти только перезагрузкой компьютера]
* MBR проверяет, что в данном поле для всех 4-х разделов нет иных значений кроме «00h» и «80h»
…. [если находятся разделы, помеченные иным значением, чем 00h или 80h, то MBR выводит сообщение об ошибке («Invalid partition table»), система подвисает, требуется перезагрузка компьютера]
На этом заканчивается проверка MBR и начинается подготовка к загрузке ОС:
* MBR считывает первый сектор логического диска, помеченного как «загрузочный» и помещает этот сектор по адресу 0000:7c00
* MBR проверяет, что данный сектор заканчивается сигнатурой 55ААh
…. [если этой сигнатуры в этом месте нет, то выводится сообщение «Missing operating system» и компьютер подвисает, требуется перезагрузка]
* MBR передает управление по адресу 0000:7c00 (то есть загрузочному сектору выбранного логического диска)
Загрузочный сектор логического диска (после MBR)
* Загрузочный сектор уже сам "знает" что ему дальше делать и производит загрузку уже собственно ОС