aboutsummaryrefslogtreecommitdiffstats
path: root/boot/print.asm
blob: 97acd8b64e471aa0d9a9946b82571bb0d9d596b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
org 7C00h

jmp _start

hello: db 'Hello from the first stage!', 0x0A, 0x0D, 0x0

_start:

; print hello message

mov ah, 0x0E
xor esi, esi
xor edi, edi
mov si, hello
cld

.loop:
lodsb
cmp al, 0x00
je .out
int 0x10
jmp .loop
.out:

; load sectors from disk and jump there

mov ah, 0x02 ; load sectory from disk
mov al, 0x01 ; load one sector
xor ch, ch   ; cylinder number
mov cl, 0x02 ; start from sector 2
xor dh, dh   ; head number
xor dl, dl   ; drive number

mov bx, 0x0500 ; start address (see jmp)
               ; 0x00000500 to 0x00007BFF, from Overview at http://wiki.osdev.org/Memory_Map_%28x86%29
int 0x13

jmp 0x0500

jmp $

; stolen from: https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders
times 0200h - 2 - ($ - $$)  db 0    ;Zerofill up to 510 bytes
dw 0AA55h       ;Boot Sector signature