Create OS part 1
Создание вашей первой операционной системы.

Внимание, в этой статье я подразумеваю, что основы знаний ассемблера и работы с
компьютером и fasm у вас имеются. Если нет, то читайте статью ASM в 12-ом номере
FreeTech, или любые другие источники.
FT можно взять на http://www.wisesoft.ru/ в разделе "уже не выпускающиеся"


Становление Силы.
Написание своей ОС является наилучшим способом изучить работу компьютера, и самого низкого
программного уровня.

Все программы использованные в данной статье вы найдете на http://ass3mbler.narod.ru
fasm можно взять на http://www.flatassembler.org

Процесс загрузки компьютера:
Основную работу BIOS-а мы пропускаем как не нужную на данный момент для нас. Возьмем как данность, что BIOS
загружает свои процедуры на int 0x10, 10-е прерывание.
Там имеются почти все необходимые нам процедуры, такие как чтение дисков, и т.п.
Кто хочет подробнее узнать о этих прерываниях ищите в нете tech help (v1 есть русская, остальные - англ.)
или любой другой справочник по прерываниям (можно у меня попросить, если надо, выложу).

Далее BIOS загружает первый сектор загрузочного диска (дискеты, CD-Rom) на адрес 07C0:0000
или 0000:07C00 что является одним адресом.

Здесь небольшая ремарка:
При компиляции часто используется директива org   операнд которой определяет адрес куда
код(программа) будет загружен в оперативку. Сделано это потому что вместо переменных в
команды подставляются их адреса от начала кода, и если не учесть
что программа будет загружена не в самое начало памяти (0000:0000) то вместо переменных
мы получим кашу.
К адресу переменой добавляется операнд директивы org. (например org 100h)

После этого на этот адрес передается управление.

Тут начинается выполнение нашего загрузчика.
Сей загрузчик должен вывести приветственное сообщение, загрузить и перезать
управление вторичному загрузчику.
Для первичного загрузчика размеры ограничены 512-ю байтами (таков размер одного сектора).

Давайте напишем простейший загрузчик, который выводит hello world.

Для компиляции данного примера вам потребуется fasm.


org 07C00h
main:
jmp far 00:entry1
; это необходимо для того, чтобы точно знать, что
; мы находимся на 0000:07C00h

entry1:
cli
; запрещаем прерывания

mov ax,cs
mov ds,ax
; устанавливаем сегмент данных

sti
; разрешаем прерывания

mov ah,14
; в ah - номер процедуры (вывод знаков в режиме
; телетайпа
xor bl,bl

mov bx,tex
; в bx, адрес выводимой строки
; 14-я функция требует чтобы адрес был в формате 0000:xxxx
; а у нас он в формате 07c0:xxxx
; по этому к адресу надо добавить 7C00h

strt:
mov al,[bx]

test al,al
jz exit_
; если al=0 (конец строки) то выход

inc bx
int 10h
jmp strt

exit_:
cli
jmp $
; завешиваем компьютер ($ заменяется на адрес текущей команды
; следовательно эта команда будет повторятся бесконечно).


tex db 'HARD Hello World',0Dh,0

times 510-($-main) db 0
; эта директива заставляет компилятор заполнить оставшееся (до 512-и байт) место нулями

db 0xAA, 0x55
; а эти два байта нужны чтобы биос определил что это действительно
; бут сектор


Компилируем получившийся файл, и с помощью программы rawrite записываем его на дискету,
перезагружаемся, и радуемся.

В дальнейшем рекомендую использовать виртуальную машину, чтобы каждый раз не перезагружаться (vmware, bosh,
Virtual PC или др.)

Если эта статья вам понравилась. и вы хотите продолжения, то напишите мне на mail, или просто оцените эту статью.
Все пожелания, отзывы, и т.п. на mail: skif_q гав mail.ru


Если что-то в данной статье непонятно, пишите на mail, или в форум, обязательно отвечу.


Категория: Coding | Добавил: Aules (02.08.2011) | Автор: Skif_Q
Просмотров: 302 | Комментарии: 1 | Теги: OS, Coding, ASM | Рейтинг: 0.0/0
Всего комментариев: 1
1 Aules  
0
Чтобы фишка сработала, надо отассемблить (FLAT) и с помощью UltraISO создать загрузочный образ, который впоследствии гонять в VirtualBox. wacko

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
close