十分钟完成的操作系统编写 你信吗?

20行代码实现引导盘
本文介绍如何使用不到20行的汇编语言代码创建一个可以引导的简易操作系统。通过具体的代码示例,读者可以了解如何编写一个简单的引导程序,并将其烧录到软盘上进行测试。

十分钟完成的操作系统


你相不相信,一个“操作系统”的代码可以只有不到20行?
Example 1. chapter1/a/boot.asm
1 org 07c00h ; 告诉编译器程序加载到7c00处
2 mov ax, cs
3 mov ds, ax
4 mov es, ax
5 call DispStr ; 调用显示字符串例程
6 jmp $ ; 无限循环
7 DispStr:
8 mov ax, BootMessage
9 mov bp, ax ; ES:BP = 串地址
10 mov cx, 16 ; CX = 串长度
11 mov ax, 01301h ; AH = 13, AL = 01h
12 mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
13 mov dl, 0
14 int 10h ; 10h 号中断
15 ret
16 BootMessage: db ”Hello,␣OS␣world!”
17 times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
1 8 dw 0xaa55 ; 结束标志
把这段代码用NASM 编译一下:
$ nasm boot.asm –o boot.bin
我们就得到了一个512 字节的boot.bin,让我们使用软盘绝对扇区读写工具将这个文件写到一张空白软盘的第一个扇区。在Linux 下可以这样做:
$ dd if=boot.bin of=/dev/fd0 bs=512 count=1
在Windows 下可以这样做:
$ rawrite2.exe -f boot.bin -d A
好了,你的第一个“操作系统”就已经完成了。这张软盘已经是一张引导盘了。
把它放到你的软驱中重新启动计算机,从软盘引导,你看到了什么?
计算机显示出你的字符串了!红色的“Hello, OS world!”,多么奇妙啊,你的“操作系统”在运行了!
如果使用虚拟机比如Bochs 的话(下文中将会有关于Bochs 的详细介绍),具体结果可以翻阅本书
这真的是太棒了,虽然你知道它有多么简陋,但是,毕竟你已经制作了一个可以引导的软盘了,而且所有工作都是你亲手独立完成的!

本文摘自于渊编写的《orange's:一个操作系统的实现》一书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值