Rambler's
Top100

Загрузчик с дискеты

Автор: lonesome TSH/Digital Daemons
Дата: .01.2003
Раздел: Разработка ОС

Сейчас мы рассмотрим один из способов, применяемых при загрузке ОС - загрузка с дискеты. Действия, предпринимаемые БИОС при загрузке с дискеты, таковы:

Поскольку один сектор - это всего лишь 512 байт, то возможности первичного загрузчика ограничены. Обычно его задача - загрузка вторичного загрузчика (например в ОС Linux, второй загрузчик именуется Setup), который уже выполняет загрузку ядра, переход в защищенный режим и пр.

При выполнении первичного загрузчика процессор находится в реальном режиме.

Ниже приведен исходник простого загрузчика, который считывает 17 секторов (8704 байт) по адресу 7E00 и передает им управление (все ассемблерные примеры, которые я буду приводить, предназначены для компиляции с помощью свободно распространяемого мультиплатформенного ассемблера NASM (nasm.sourceforge.net)):

BITS 16 

;Вторичный загрузчик будет загружен по этому адресу: 
%define SECOND 0x7e00 
 
org 0x7C00 
section .text  
start: 

xor ax, ax 

cli ;перед установкой стека отключим прерывания
mov ss, ax 
mov sp, start 
sti ;нам понадобятся прерывания БИОС

mov ds, ax	;загрузим необходимые сегментные регистры нулем
mov es, ax	;

mov ch, 0 	;Цилиндр
mov bx,SECOND	;Адрес по которому будут записаны данные
	   
mov ah, 02h 	;Функция диского сервиса 02 - чтение секторов
mov al,17	;Число секторов 
mov cl,2	;Сектор, с которого начать
mov dl,0	;Диск (дисковод А - 0)
mov dh,0	;Головка 
	 
int 0x13 	;Прерывание 0x13 - дисковый сервис БИОС

jmp SECOND	;Переход на вторичный загрузчик

Для упрощения программы мы не выполняли проверку правильности считывания. Загрузчик предполагает, что код вторичного загрузчика находится на дискете сразу за первым сектором - т.е. начиная с 512 байт.

Rambler's Top100