保护模式(Protect Mode)(2)
3.1.1 保护模式的运行环境
前面我们编写的程序都是运行在软盘的0面0磁道第1扇区,只有512个字节,这点弹丸之地实在满足不了日益增长的程序代码的需要。
有两个办法可以解决这个矛盾:
一是在这个512字节里专门安排一个引导代码,让它可以读取我们写的程序,然后运行它; 二是用现成的DOS系统,把我们的程序编译成COM文件,让DOS来执行它。
我们不禁要问,不是我们自己写操作系统么?怎么把DOS操作系统搅和进来了?
作者推荐用第二种简单的但不怎么酷的方法:
1. 去Bochs的官方网站h t t p://bochs.sourceforge.net/diskimages.html 下载一个freedos-img.tar.gz ,复制我们的工作目录,解压后将其中的a.img 改名为freedos.img 。
ok,我已经下好了,你呢?
2. 用bximag生成一个软盘映像,起名为pm.img 。
3. 修改当前工作目录下的bochsrc(还记得不?第二章我们自己写的,把它拷到当前工作目录来),确保其中有以下三行:
floppya:1_44=freedos.img, status=inserted
floppyb:1_44=pm.img, status=inserted
boot:a
4.启动bochs ,待FreeDos启动完毕后格式化B盘,
5. 将上节的代码pmtest1.asm 中的org 07c00h 改为 org 100h ,并重新编译:
nasm pmtest1.asm -o pmtest1.com
6. 将pmtest1.com复制到pm.img上:
sudo mkdir /mnt/floppy
sudo mount -o loop pm.img /mnt/floppy
sudo cp pmtest1.com /mnt/floppy
sudo umount /mnt/floppy
7.重新运行bochs ,A:/>B: 切换到B盘,执行 pmtest1.com,OK! 我们看到什么了?
好的,有了DOS兄的帮忙,我们就可以大展身手了。开始我们的下一步,揭密GDT......