早就想抽时间系统的学习一下于渊写的《自己动手写操作系统》,但始终没空,现在忙活一年,年底终于有点空闲,今天终于把书里的第一个例子在windows下搞成功.这里把实验步骤记录一下.
实验全部在win7环境下进行,用到软件版本和下载地址为:
Win64位Bochs 下载地址:
http://dl-sh-ctc-2.pchome.net/0f/1a/Bochs-2.6.8.rar?key=fd0adc6b93959ada8d14dde2e9eeb81c&tmp=1482108920149
nasm64位下载地址:
http://www.nasm.us/pub/nasm/releasebuilds/2.12.03rc1/win64/nasm-2.12.03rc1-installer-x64.exe
dd for windows下载地址:
http://o1.acbfds.cn/v1/dd-0.6beta3.rar
实验步骤
1、编写boot.asm文件
首先仿照书上写一个boot.asm,代码如下
org 07c00h ;告诉编译器程序加载到7c00处
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 ;AH = 13, AL = 01h
mov bx, 000ch ;页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ;10h 号中断
ret
BootMessage: db "Hello,OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
然后在命令行下进行编译(编译之前记得把nasm.exe和dd.exe的安装路径加入path系统变量中)
nasm boot.asm -o boot.bin
成功的话在本目录下生成一个boot.bin文件
编译过程如下图所示
2. 生成.img文件
具体编译命令为
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
运行效果如下图
3. 编写bochs配置文件
编写一个bochs.bxrc文件内容为
#bochs 2.6.8的语法发生了变化,导致书中的文件无法使用
#现在的本配置文件方案来自http://blog.csdn.net/furzoom/article/details/52484413
# how much memory the emulated machine willhave
megs: 32
# filename of ROM images
# BIOS已经修改,地址可以不加,可以根据文件大小进行推断,如里加地址要与文件大小相匹配
romimage:file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
# what disk images will be used
# 配置镜像名
floppya: 1_44=a.IMG, status=inserted
# choose the boot disk.
boot: a
# where do we send log messages?
log: bochsout.txt
# disable the mouse, since Finix is textonly
mouse: enabled=0
# enable key mapping, using US layout asdefault.
# 键盘的映射方式也改变了
keyboard:keymap=$BXSHARE/keymaps/x11-pc-us.map4.启动bochs ,画面如下所示
然后单击load按钮,选中刚才的bochs.bxrc文件,再单击start 按钮,就可以出现一个模拟器窗口,看到运行效果,
如下图绿色画圈出所示。注意这个模拟器窗口无法关闭,想退出的话只能关闭原始的bochs窗口,则两个窗口一起关掉.至此实验结束