- PVSM.RU - https://www.pvsm.ru -
Всем привет! Сегодня мы напишем загрузчик, который будет выводить «Hello World» и запустим его на VirtualBox. Писать будем на ассемблере FASM. Скачать его можно отсюда [1]. Также нам понадобится собственно VirtualBox [2] и UltraISO [3]. Перед тем как писать код, разберемся как загружаются операционные системы.
Итак, когда мы нажимаем большую кнопку включения на нашем компьютере запускается система, которая есть на любом компьютере — BIOS (Basic Input/Output System или базовая система ввода/вывода). Задача BIOS это:
Теперь можно приступать к написанию кода. Запускаем файл FASMW.EXE, который находится в архиве с FASM-мом и вставляем туда следующий код:
org 7C00h
start:
cli ;Запрещаем прерывания (чтобы ничего не отвлекало)
xor ax, ax ;Обнуляем регистр ax
mov ds, ax ;Настраиваем dataSegment на нулевой адрес
mov es, ax ;Настраиваем сегмент es на нулевой адрес
mov ss, ax ;Настраиваем StackSegment на нулевой адрес
mov sp, 07C00h ;Указываем на текущую вершину стека
sti ;Запрещаем прерывания
;Очищаем экран
mov ax, 3
int 10h
mov ah, 2h
mov dh, 0
mov dl, 0
xor bh, bh
int 10h
;Печатаем строку
mov ax, 1301h
mov bp, message
mov cx, 12
mov bl, 02h
int 10h
jmp $
message db 'Hello World!',0
times 510 - ($ - $$) db 0 ;Заполнение оставшихся байт нулями до 510-го байта
db 0x55, 0xAA ;Загрузочная сигнатура
Этот код требует немного пояснений. Командой
org 7C00h
мы говорим, что код нужно загружать в ОЗУ по адресу 0x7C00. В строках
mov ax, 3
int 10h
мы устанавливаем видео режим 80х25 (80 символов в строке и 25 строк) и тем самым очищаем экран.
mov ah, 2h
mov dh, 0
mov dl, 0
xor bh, bh
int 10h
Здесь мы устанавливаем курсор. За это отвечает функция 2h прерывания 10h. В регистр dh мы помещаем координату курсора по Y, а в регистр dl — по X.
mov ax, 1301h
mov bp, message
mov cx, 12
mov bl, 02h
int 10h
Печатаем строку. За это отвечает функция 13h прерывания 10h. В регистр bp мы помещаем саму строку, в регистр cx — число символов в строке, в регистр bl — атрибут, в нашем случае цвет, он будет зеленым. На цвет фона влияют первые 4 бита, на цвет текста — вторые 4 бита. Ниже представлена таблица цветов
0 - черный, 1 - синий, 2 - зеленый, 3 - желтый, 4 - красный, 5 - фиолетовый, 6 - коричневый, 7 - светло-серый, 8 - темно-серый, 9 - светло-синий, A - светло-зеленый, B - светло-желтый, C - светло-красный, D- светло-фиолетовый, E - светло-коричневый, F – Белый.
В строке
jmp $
Программа зависает.
Откомпилируем код нажатием клавиш Ctrl + F9 и сохраним полученный файл как boot.bin.
Запускаем UltraISO и перетаскиваем наш бинарник в специальную область (отмечено красной стрелкой).
Далее кликаем правой кнопкой мыши по бинаринку и нажимаем кнопку примерно с такой надписью: «Установить загрузочным файлом». Далее сохраняем наш файл в формате ISO.
Открываем VIrtualBox и создаем новую виртуальную машину (если вы не знаете, как это делается, кликайте сюда [4]). Итак, после того, как вы создали виртуальную машину, нажимаем «Настроить, выбираем пункт „Носители“, нажимаем на „Пусто“, там где „Привод“ есть значок оптического диска. Нажимаем на него и выбираем „Выбрать образ оптического диска“, ищем наш ISO файл, нажимаем „Открыть“. Сохраняем все настройки и запускаем виртуальную машину. На экране появляется наш „Hello World!“.
На этом первый выпуск подходит к концу. В следующей части мы научим наш загрузчик читать сектора диска и загрузим свое первое ядро!
Автор: OSDeveloper
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/353526
Ссылки в тексте:
[1] отсюда: https://flatassembler.net/download.php
[2] VirtualBox: https://www.virtualbox.org/wiki/Downloads
[3] UltraISO: https://www.softportal.com/software-2464-ultraiso.html
[4] сюда: https://remontka.pro/virtualbox/
[5] Источник: https://habr.com/ru/post/504634/?utm_source=habrahabr&utm_medium=rss&utm_campaign=504634
Нажмите здесь для печати.