; bootloader.s [BITS 16] ; Emit 16bit code [ORG 0x7C00] ; The BIOS loads the boatloader at offset 0x7C00 xor bl, bl ; Segment selector, not used here (zero) call clear_screen call print_string cli ; Disable interrupts hlt ; Halt the processor print_string: mov al, 1 mov bh, 0 mov bl, 07h mov cx, hello_end - hello mov dl, 0 mov dh, 0 mov bp, hello mov ah, 13h int 10h ret clear_screen: xor al, al mov bh, 07h xor ch, ch xor cl, cl mov dh, 25 mov dl, 80 mov ah, 07h int 10h xor dh, dh xor dl, dl xor bh, bh mov ah, 2 int 10h ret hello db "Hello World!" hello_end: times 510-($-$$) db 0 ; Fill the remaining 510 bytes with 0 dw 0xAA55 ; End with AA55 otherwise the BIOS won't recognise this as a bootsector