Загрузка в верхнюю часть памяти - часть 11
по адресу 0:7C00H. Затем POST передает управление по первому
адресу этой записи. Таким образом система фирмы IBM загружает в
память DOS или любую другую операционную систему. А мы как раз и
собираемся, загружать свою собственную простую операционную
систему.
Сегмент NEW_DISK определяет адрес подпрограммы-драйвера
устройства, также представленной на втором листинге (см. Фиг.
10.2). Поскольку наши подпрограммы ассемблируются отдельно, этот
сегмент для связи процедуры загрузки и драйвера устройства во время
выполнения. Сегмент ABS0 локализует векторы прерываний, заменяемые
в процедуре загрузки. В сегменте CODE, содержатся команды,
загружаемые с дискеты. Сегмент CODE - единственная часть
приведенной программы, находящаяся на загрузочной дискете.
Первое, что делает программа инициализации - пересылает себя по
адресу 0:7A00H. Затем, в процессе инициализации, процедура
перезагружает систему, чтобы загрузить настоящую операционную
систему. Эта загрузка производится по адресу 0:7C00H. Если бы
процедура инициализации не переносила себя на другое место, она бы
считывала следующую запись загрузки в ту область памяти, где
находится сама.
С адреса NEXT_LOCATION процедура инициализации инсталирует
драйвер устройства. Она изменяют флаги оборудования для указания на
наличие дополнительного дисковода по сравнению с установкой внешних
переключателей. Это "убеждает" операционную систему, что диск в
оперативной памяти является частью технического обеспечения. При
инициализации значение MEMORY_SIZE уменьшается на 160 кбайт,
которые резервируются для моделирования диска. Это предотвращает
использование предназначенной для него памяти. Кроме того,
программа подсчитывает значение сегмента для этой области в 160
кбайт, чтобы знать, куда загружать драйвер устройства. Когда это
выполнено, подпрограмма инициализации загружает в зарезервиро-
Содержание Назад Вперед