Это два разных шаблона. Для MBR и загрузочного раздела соответственно.
Код MBR начинается с самого начала сектора, данные можно разместить после, а под BSS и стек использовать любой свободный участок памяти, например, ниже адреса 0x7C00. И заканчивать не дальше, чем за 66 байт до конца сектора, т.к. начиная с этой позиции располагается таблица разделов. Хотя разработчики Windows плевали на это общепринятое правило и в позиции, находящейся за 72 байта до конца сектора сохраняют идентификатор диска размером в двойное слово плюс еще два байта обычно остаются обнуленными.
Код загрузочного сектора раздела тоже начинается с самого начала, но там должна быть какая-нибудь инструкция перехода (обычно короткий переход плюс ноп или просто длинный - не дальний! - переход, ну по крайне мере этого требует Microsoft в своих спецификациях, хотя я встречал и cli+shortjmp), потому что начиная со смещения +3 должна следовать обязательная для файловой системы структура (ее размер и отчасти содержимое зависит от типа файловой системы), а уже после твой код.
В последних двух байтах любого загрузочного сектора должна находиться сигнатура 0x55, 0xAA.
|