A bootloader is a small program that runs when a computer is powered on or restarted. It’s responsible for loading the operating system into memory.
The bootloader must be less than 512 bytes, as it will be loaded into the first sector of the disk. The bootloader should be in the Master Boot Record (MBR), which is the first sector (sector 0) of the disk.
The MBR consists of:
The bootloader is written in assembly. A basic bootloader simply prints a message to the screen and then halts.
; bootloader.asm
section .text
global _start
_start:
; Set video mode to 0x03 (80x25 text mode)
mov ah, 0x00
mov al, 0x03
int 0x10
; Print message to screen
mov si, msg
print_char:
lodsb
cmp al, 0
je done
mov ah, 0x0E
int 0x10
jmp print_char
done:
; Halt the system
hlt
section .data
msg db 'Bootloader Initialized', 0
To create the bootloader, you need to assemble it and then add a boot signature at the end:
; Assemble the bootloader
nasm -f bin -o bootloader.bin bootloader.asm
; Add the boot signature (0x55, 0xAA) to the bootloader
dd if=bootloader.bin of=bootloader.img bs=512 seek=1
You can test the bootloader using a virtual machine (VM) or an emulator like QEMU:
qemu-system-x86_64 -drive file=bootloader.img,format=raw