Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 ah, 11h
- int 10h
- 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 020h, 0DBh, 0DBh, 0DBh, 020h, 020h, 020h, 0DBh, 0DBh, 0DBh, 020h, 1
- db 0DBh, 020h, 020h, 020h, 0DBh, 020h, 0DBh, 020h, 020h, 020h, 0DBh, 1
- db 0DBh, 020h, 020h, 020h, 0DBh, 020h, 0DBh, 020h, 020h, 020h, 020h, 1
- db 0DBh, 020h, 020h, 020h, 0DBh, 020h, 020h, 0DBh, 0DBh, 0DBh, 020h, 1
- db 0DBh, 020h, 020h, 020h, 0DBh, 020h, 020h, 020h, 020h, 020h, 0DBh, 1
- db 0DBh, 020h, 020h, 020h, 0DBh, 020h, 0DBh, 020h, 020h, 020h, 0DBh, 1
- db 020h, 0DBh, 0DBh, 0DBh, 020h, 020h, 020h, 0DBh, 0DBh, 0DBh, 020h, 1
- db "Press ENTER to start.", 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
- cmp al, 1
- je .next_line
- int 10h ; Otherwise, print it
- jmp .repeat
- .done:
- ret
- .next_line:
- push ax
- push bx
- push cx
- push dx
- mov ah, 03h
- int 10h
- mov dl, 00h
- add dh, 01h
- mov ah, 02h
- int 10h
- pop dx
- pop cx
- pop bx
- pop ax
- jmp .repeat
- times 510-($-$$) db 0 ; Pad remainder of boot sector with 0s
- dw 0xAA55 ; The standard PC boot signature
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement