Шаг 26 - Master Boot Record

Каждый жесткий диск содержит по адресу:

head 0 
cylinder 0 
sector 1

Основную Запись Загрузки (Master Boot Record - MBR). В момент старта системы эта запись грузиться по адресу память по адресу 0:7c00. И самое интересное что эту область на первый байт передается управление (устанавливается регистр IP). Обычно там есть команда JMP и адрес перехода. Вы можете легко в этом убедиться, достаточно записать этот файл на диск. Дать ему расширение COM и загрузить в отладчик.

26_1.gif (3007 b)

За командой JMP идут параметры жесткого диска. JMP переводит на код загрузки и этот код загрузки читает таблицу разделов диска, определяет текущий раздел и запускает первую программу загрузки OC. Итак, давайте посмотрим что в этом загрузочном секторе после команды JMP и какие там параметры.

BS_jmpBoot +0 3 Команда JMP xxxx - переход типа NEAR на программу начальной загрузки. Код начальной загрузки естественно занимает остальную часть объема сектора 0 следующего за BPB. Любая из этих форм приемлема. JmpBoot[0] = 0xEB - более часто использованный формат.

26_2.gif (2367 b)

BS_OEMName +3(3) 8 Название фирмы-производителя операционной системы и версия, например: "IBM 5.0" . Но здесь есть некоторые проблемы. Для совместимости с Windows лучше что бы здесь находилось MSWIN4.1. Установка другой надписи может привести к тому что некоторые драйвера FAT не смогут распознать объем.

BPB_BytsPerSec +0Bh(11) 2 Байт на сектор. Это значение может принимать только 512, 1024, 2048 или 4096. Для максимальной совместимости желательно использовать здесь величину 512. Системы Microsoft правильно поддержат 1024, 2048, и 4096, но эти величины не рекомендуются.

BPB_SecPerClus +0Dh(13) 1 Секторов на кластер. Значение тут быть следующие - 1, 2, 4, 8, 16, 32, 64, или 128.

BPB_RsvdSecCnt +0Eh(14) 2 Количество зарезервированных секторов. Для FAT12 и объемов FAT16, эта величина не должна никогда быть чем-нибудь кроме 1. Для объемов FAT32, эта величина - естественно 32. Операционные Системы Microsoft правильно поддержат любую не равным нулю величину в этой области.

BPB_NumFATs +10h(16) 1 Количество таблиц FAT. Здесь всегда должно быть 2. Все Microsoft файловые системные драйверы поддержат величину кроме 2, но это все таки рекомендуется, что никакая величина кроме 2 не используется в этой области.

BPB_RootEntCnt +11h(17) 2 Максимальное количество дескрипторов файлов, содержащихся в корневом каталоге диска. Это количество файлов в центральном каталоге читай "Шаг 61 - Windows FAT 16 и центральный каталог" и центральный каталог.

BPB_TotSec16 +13h (19) 2 Общее количество секторов на носителе данных (в разделе DOS). Это значение уже устарело и может быть ноль, но тогда по смещению 20h BPB_TotSec32 должно быть не ноль

BPB_Media +15h(21) 1 Байт-описатель среды носителя данных. 0xF8 - стандартная величина для не сменного носителя. Для сменного носителя, 0xF0 часто используется. Могут быть следующие величины для этой области - 0xF0, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, и 0xFF.

BPB_FATSz16 +16h(22) 1 Количество секторов, занимаемых одной копией FAT. Для FAT16 здесь реальное значение для FAT32 0

BPB_SecPerTrk +18h(24) 2 Количество секторов на дорожке для прерывании 0x13.

BPB_NumHeads +1Ah(26) 2 Количество головок для прерывания 0x13

BPB_HiddSec +1CH(28) 4 Количество скрытых секторов для раздела, превышающего по размеру 32 мегабайта.

BPB_TotSec32 +20h(32) 4 Общее количество секторов на логическом диске для раздела, превышающего по размеру 32 мегабайта.

Дальше есть отличия для FAT 16 и FAT32.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.