| ␉BITS 16␊ |
| ␊ |
| start:␊ |
| ␉mov ax, 07C0h␉␉; Set up 4K stack space after this bootloader␊ |
| ␉add ax, 288␉␉; (4096 + 512) / 16 bytes per paragraph␊ |
| ␉mov ss, ax␊ |
| ␉mov sp, 4096␊ |
| ␊ |
| ␉mov ax, 07C0h␉␉; Set data segment to where we're loaded␊ |
| ␉mov ds, ax␊ |
| ␊ |
| ␊ |
| ␉mov si, text_string␉; Put string position into SI␊ |
| ␉call print_string␉; Call our string-printing routine␊ |
| ␊ |
| ␉jmp $␉␉␉; Jump here - infinite loop!␊ |
| ␊ |
| ␊ |
| ␉␊ |
| text_string db 'This is my cool new Operating System!', 0␊ |
| ␊ |
| print_string:␉␉␉; Routine: output string in SI to screen␊ |
| ␉mov ah, 0Eh␉␉; int 10h 'print char' function␊ |
| ␊ |
| .repeat:␊ |
| ␉lodsb␉␉␉; Get character from string␊ |
| ␉cmp al, 0␊ |
| ␉je .done␉␉; If char is zero, end of string␊ |
| ␉int 10h␉␉␉; Otherwise, print it␊ |
| ␉jmp .repeat␊ |
| ␊ |
| .done:␊ |
| ␉ret␊ |
| ␊ |
| ␊ |
| ␉times 510-($-$$) db 0␉; Pad remainder of boot sector with 0s␊ |
| ␉dw 0xAA55␉␉; The standard PC boot signature |