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