Bootlaoder

1. 使用汇编语言编写一个二进制程序,显示HelloWorld

1. 编写asm.asm

asm.asm

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
[BITS 16]
[ORG 0x7c00]


start:
cli ;Clear interrupts
mov ax, 0x00
mov ds, ax
mov es, ax
mov ss, ax
mov sp,0x7c00
sti ; Enable interrupts
mov si, msg


print :
lodsb ; Loads byte at ds:si to AL register and incremens SI
cmp al, 0
je done
mov ah, 0x0E
int 0x10
jmp print

done:
cli
hlt ; Stop further CPU execution

msg: db 'Hello World!',0


times 510 - ($ - $$) db 0


dw 0xAA55

2. 编写makfile文件

makefile

1
2
3
4
5
all:
nasm -f bin ./src/boot.asm -o ./bin/boot.bin

clean:
rm -f ./bin/boot.bin

3. 运行make命令编译

1
make all

4. 使用qemu虚拟机运行boot.bin

1
qemu-system-x86_64 -hda ./boot.bin

运行成功。

参考资料

OS development 101 - How to make a bootloader part 1 - Hello World

在Linux中将二进制文件boot.bin制作成img镜像并在虚拟机中启动

1. 在Linux中将二进制文件boot.bin制作成img镜像

  1. 切换到存放boot.bin文件的目录。

  2. 制作一个包含boot.bin的映像文件boot.img:

    1
    dd if=boot.bin of=boot.img bs=512 count=1
  3. boot.img制作成功

    此方法只能将img文件当成纯二进制文件运行

2. 在qemu中加载boot.img

1
qemu-system-x86_64 -hda ./boot.bin

3. 在vmware中启动boot.img

  1. 创建一个空的虚拟机
  2. 添加设备Floppy
  3. 在Floppy中选择bin.img文件。
  4. 断开CD/DVD连接,启动成功。