
Мне известно следующее:
При запуске BIOS выполняет следующую последовательность:
1. Самотестирование при включении питания (POST)
2. Определение BIOS видеокарты (чипа) и выполнение его кода для инициализации видеооборудования.
3. Определение BIOS других устройств и вызов их функций инициализации .
4. Отображение экрана запуска BIOS.
5. Выполнение краткого теста памяти (определение объема памяти в системе).
6. Установка параметров памяти и накопителя
. 7. Настройка устройств Plug & Play (традиционно устройств шины PCI).
8. Назначение ресурсов (каналы DMA и IRQ).
9. Определение загрузочного устройства.
Когда BIOS идентифицирует загрузочное устройство (обычно это один из нескольких дисков, помеченных как загрузочный), он считывает блок 0 с этого устройства в ячейку памяти 0x7c00 и переходит туда.
Но что происходит после этого, т.е. как BIOS передает управление загрузчику на этом этапе??
решение1
Как упоминалось в посте выше, BIOS просто передает управление загрузчику, выполняя инструкцию перехода на адрес 0x7C00.
Незагрузочное устройство может иметь инструкцию INT 18 (0xCD 0x18) в первых двух байтах (и 55aa в байтах 511, 512), что затем просто заставит BIOS перейти к следующему устройству в порядке загрузки.
решение2
Поскольку вы упомянули 0x7C00, я сосредоточусь на загрузке MBR (GPT — это другое дело).
Как вы сказали, как только BIOS определяет, что устройство является загрузочным (т.е. имеет 0x55AA в качестве последних двух байтов первого сектора), он считывает этот первый сектор с диска и загружает его в память, начиная с 0x7C00. Как только он выдает инструкцию перехода, процессор начинает выполнять любой код, который там находится.
Затем загрузчик должен выяснить, что загрузить и выполнить следующим. Код, который выполняет загрузку и переход на следующий этап, должен уместиться в 510 байт, оставшихся в этом первом секторе, на самом деле меньше, поскольку жесткие диски также имеют там таблицу разделов.
Дальнейшее чтение:Последовательность загрузки,Создание собственного загрузчика