02引导区块:主干

02引导区块:主干
你可能需要提前通过Google搜索了解一下汇编,BIOS。
目标:创建一个被BIOS视作启动磁盘的文件。
这是一件激动人心的事情,我们将要创建一个自己的引导区块。
理论:
在计算机启动的时候,BIOS并不知道如何加载操作系统,于是把这个任务交给引导区块。这样一来,引导区块必须是一个明确的、标准化的位置。事实上,引导区块是磁盘上的第一个扇区(0扇面,0磁道,0扇区),有512字节大小。
BIOS会通过检查511和512字节是不是`0xAA55`来确认一个磁盘是否可以启动。
下边是一个最简单的引导区块:

```
e9 fd ff 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 29 more lines with sixteen zero-bytes each ]
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
```
它里边的数据几乎全是0,最后以16位的`0xAA55`结束 (注意大小端问题,x86架构使用小端设计). 前三个字节不是0,而是一个无限循环。
-------------------------
你可以使用二进制编辑器编写一个上边这样的512字节的内容,也可以直接使用汇编语言:

```nasm
; 无限循环(e9 fd ff)
loop:
jmp loop

; 填写510个0
times 510-($-$$) db 0
; 可引导标志
dw 0xaa55
```

使用下边这样的指令来编译:
`nasm -f bin boot_sect_simple.asm -o boot_sect_simple.bin`

> OSX 可能出现的问题: 如果出现错误,请看01设置开发环境。

我知道你肯定想动手操干起来(I am!), 来吧:

`qemu boot_sect_simple.bin`

> 在某些系统上,你要这样运行`qemu-system-x86_64 boot_sect_simple.bin` 如果出现SDL 错误,尝试加上 --nographic --curses 这两个参数其中的一个或者两个。

你会看到窗口里显示"Booting from Hard Disk..." 然后什么都不会发生. 上一次为了一个死循环而这么激动是什么时候的事?;-)

posted @ 2019-07-08 20:27  sebastia  阅读(130)  评论(0编辑  收藏  举报