+ -
当前位置:首页 → 问答吧 → 10分钟写一个“操作系统”(《自己动手写操作系统》笔记)

10分钟写一个“操作系统”(《自己动手写操作系统》笔记)

时间:2006-06-27

来源:互联网

《自己动手写操作系统》一书开篇介绍了一个“引导扇区”代码,实现了启动后在屏幕上显示红色“Hello OS world!”的功能。遗憾的是,作者使用的工作平台是Windows,创建软盘镜像等过程太过繁复。我这篇笔记是想说明一下在LINUX平台下做这个实验的步骤。

你需要准备些什么:
1、nasm汇编器,我用的gentoo已经默认就有了
2、vmware workstation,原谅我使用盗版软件。我的qemu没有编译成功,而且vmware工作得也很好,也就没有折腾着一定要装一个开源软件了。

下面编辑一个boot.asm文件如下:
代码:
 org       07c00h
 mov    ax,     cs
 mov    ds,     ax
 mov    es,     ax
 call   DispStr
 jmp    $
DispStr:
 mov    ax,     BootMessage
 mov    bp,     ax ;es:bp = 串地址
 mov    cx,     16 ;cx = 串长度
 mov    ax, 01301h
 mov    bx,     000ch
 mov    dl,     0
 int    10h
 ret
BootMessage:    db      "Hello, OS world!"
 times  510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码恰好为512字节
 dw     0xaa55
用nasm编译:
$ nasm boot.asm -o boot.bin
这样就得到了一个512字节的boot.bin文件了,这个就是软盘启动扇区里面应该放的代码。你可以用下面这个命令生成软盘镜像文件:
$ dd conv=sync if=boot.bin of=boot.img bs=1440k count=1
这样我们就得到软盘镜像boot.img了。注意命令中的conv=sync,使用这个选项后可以使得在把每个输入块填充到ibs个字节时,不足部分用空(NULL)字符补齐。在这个例子里由于输入文件只有512个字节,输出文件却需要1.44MB所以我用了这个选项。

下面,用vmware新建一个虚拟机,把软驱设置为刚才生成的镜像,启动系统,就可以得到预期的效果了。怎么样,是不是很简单呢?

作者: ifree   发布时间: 2006-06-27

我先赞一个!

作者: MAGPINE   发布时间: 2006-06-27

呵呵,好玩。
从这个贴子里学到了一点dd的用法。。
dd
du
df
都很有用

作者: huyongzs   发布时间: 2006-06-27

只能说是个bootloader!

作者: gotop2004   发布时间: 2006-06-27

是的,所以我打了个引号。

4年前学的汇编都忘光光了,而且是16位汇编。对于保护模式及保护模式下的汇编很不熟悉,有什么好的资料吗?

作者: ifree   发布时间: 2006-06-27

引用:
作者: ifree
是的,所以我打了个引号。

4年前学的汇编都忘光光了,而且是16位汇编。对于保护模式及保护模式下的汇编很不熟悉,有什么好的资料吗?
Intel IA-32 architecture manuals From Volume A to Volume C

作者: hendric   发布时间: 2006-06-28

这个东西.......

不过用vm多麻烦啊,用boch好了,用bximg(好象这个工具,bochs自带的,制作img工具的)工具和dd命令就可以制作软盘和硬盘img文件,我就是用那个,很方便,而且bochs小,速度快!

作者: Heefan   发布时间: 2006-07-12

顶一个~~~~~~~~

作者: hanzixing   发布时间: 2006-07-12

我也有这本书。边上还有一个UNIX代码分析,刚刚做了一个文件系统的课设。嘿嘿,这个暑假就要开始做系统了。

作者: lycaon   发布时间: 2006-07-13

《自己动手写操作系统》看过,但这个程序连bootloader都算不上。

作者: fiag   发布时间: 2006-07-16

呵呵,这个小东东

作者: gradetwo   发布时间: 2006-07-17

热门下载

更多