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
|