因为操作系统实验而接触到的书,大略翻了一下,这本书讲的是从细节方面来实现一个操作系统的编写,区别与一些操作系统概念性质的教材,看起来还是不错的。

第一章

这里有一个简单的引导程序boot.asm,大概是最简单的”操作系统”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0
dw 0xaa55
上一段程序有几个需要注意的地方:

(1)

1
times   510-($-$$)  db  0


中的$与$$ : $表示当前行汇编后的地址,而$$表示一个结开始处被汇编的地址,故$ - $$可以来表示本行距程序开始处的距离。

(2)

1
org 07c00h


是因为操作系统若发现引导扇区,则会跳到地址0000:07c00处,然后讲控制权全部交给这段引导代码。

(3)

可以用预编译宏讲程序编译成com,便于在win上调试。

编译boot.asm

1
nasm boot.asm -o boot.bin

因为我是用virtualbox来运行操作系统的,所以创造软盘镜像文件boot.img

1
dd if = boot.bin of = test.img bs = 512 count = 1

用虚拟软驱引导就可以看见喜闻乐见的红字“Hello, OS world!”。

这本书上用的虚拟机软件是bochs,感觉和virtualbox比起来,调试汇编程序会更方便一下,所以最后还是两个都安装了下。

第二章

基本是在讲环境的配置,程序的调试和虚拟机的选择。

看了两章,感觉汇编语言还是真心重要的,这学期的汇编看来还是要多下点功夫了_(:з」。