通过前几次实验,对于实模式与保护模式间的跳转已经有了充分认知。此次实验与接下来的实验主要集中在认识保护模式下的一些特性,
如多任务的基础(局部任务LDT)、分页机制、中断、异常、I/O等。为了尽可能将实验设计的简单,我尽量将以上实验压缩在引导扇区的
512字节内。为了节省空间,我将pm16.c精简了许多,它只负责跳转到保护模式(程序限制在80字节以内),在pm32.c里会重新加载新
的GDT(程序加载到内存0x7c50处)。
此次实验内容为:
(pm16.c部分)
1.清屏,并跳转到保护模式(pm32.c,内存地址0x7c50)
(pm32.c部分)
1.加载新的GDT
2.为GDT中局部任务描述符设置LDT的基地址
3.显示字符串This is protect model.
4.跳转到局部任务
5.显示字符串This is local model.
6.进入死循环
实验代码如下:
code:run.c(因为重新设置了pm32.c的内存分布,所以需要修改run.c中的几个数据,下面是修改好了的run.c代码)
code:pm.h
code:pm16.c
code:pm32.c
想要实验以上代码的朋友请注意:
1.到杨晓兵大大的博客上下载安装yc09编译器,安装只需一分钟左右。
2.将此次试验中的run.c、pm.h、pm16.c、pm32.c代码拷贝到某个实验用的文件夹内。
3.在安装yc09的目录YC09/example文件夹内找到bochs.exe、BIOS-bochs-latest、VGABIOS-elpin-2.40、x11-pc-us.map四个文件拷贝到试验用的文件夹内。
4.使用yc09编译运行run.c