Русская документация для фриланесеров
Главная arrow ОС arrow Создание собственного загрузчика  
08.01.2009 г.
Главное меню
Главная
Поиск
PHP
.NET
Java
Ruby
C++
Delphi
Другие языки
Базы данных
Безопасность
Сети
ОС
Мобильные
Теория дизайна
WEB
Разное
Админцентр



холодильник whirlpool

Создание собственного загрузчика Печать E-mail
Автор Westry   
01.02.2008 г.
Загрузка операционной системы начинается с того, что BIOS считывает программу начальной загрузки (ПНЗ) с первого сектора накопителя (первые 512 байт накопителя) в оперативную память по адресу 7c00h, записывает номер накопителя в регистр DL и передаёт управление на адрес 0:7c00h.

Это значит, что когда ПНЗ получит управление, состояние регистров будет следующее:

CS = 0,
IP = 7c00h,
DL - номер накопителя (в соответствии с правилами дискового
сервиса BIOS int 13h: 0-7fh - гибкие диски;
80h-0ffh - жёсткие диски и иные накопители).

Программа начальной загрузки пытается загрузить с накопителя операционную систему (ОС) или загрузчик ОС, используя стандартные дисковые сервисы (для всех накопителей) или расширенные дисковые сервисы (для всех накопителей кроме дискет). Если ей это удаётся, то она передаёт управление ОС или загрузчику ОС. Если нет, то возвращает управление в BIOS. Для этого ПНЗ дискет вызывают int 19h или int 18h (предпочтительней), а ПНЗ жёстких дисков и иных накопителей - int 18h.

Последние два байта ПНЗ должны содержать ключ 55h 0aah.

Для получения более полного представления смотрите

BIOS Boot Specification 1.01
Enhanced Disk Drive Specification 1.1, 3.0
Phoenix BIOS User's Manual, Chapter 4: Programmer's Guide

;
; примерная программа начальной загрузки на FASM
;

use16

org 7c00h

; регистры
; cs:ip - 0:7c00h
; dl - номер накопителя
; память
; 00000-005FF используется BIOS ( 1536 )
; 00600-07BFF свободно ( 30208 )
; 07C00-07DFF программа начальной загрузки ( 512 )
; 07E00-9FFFF свободно ( 623104 )
; A0000-FFFFF используется BIOS ( 393216 )

<настраиваем данные (DS, ES ...)>
<настраиваем стёк (SS:SP) на свободную память>
<загружаем ОС (или загрузчик ОС) в свободную память (int 13h, EDD)>
<передаём управление ОС (или загрузчику ОС) jmp, jxx или call>

; ошибка - передаём управление BIOS
error:
int 18h

; свободное пространство
rb 512-($-7c00h)-2

; ключ программы начальной загрузки
db 55h, 0aah

ant-str, 06.04.2006
 
 

Автор: Антон
 
« Пред.   След. »
Webdesign by Webmedie.dk Webdesign by Webmedie.dk