此次实验,是在 操作系统实验二:从实模式跳转到保护模式 基础上的进一步实验。实验实现的内容很简单,一开始进入实模式,然后跳转到保护模式,然后再跳转回实模式,然后再跳转到保护模式,如此不断循环。
从实模式调转到保护模式步骤:
1.准备好GDT
2.使用lgdt指令加载gdtr
3.打开地址线A20
4.设置cr0的PE位为1
5.使用cli指令关闭中断
6.根据GDT选择子跳转到32位代码段,此时进入保护模式
从保护模式转到实模式调步骤:
1.跳转到16位代码段
2.加载适合的GDT选择子到有关段寄存器
3.设置cr0的PE位为0
4.跳转到16位代码段,此时进入实模式
5.关闭地址线A20
6.使用sti指令打开中断
实验流程简要说明:
(pm16.c部分)
1.清屏
2.跳到第9步
3.加载适合的描述符选择子到有关段寄存器
4.设置cr0的PE位为0
5.一个跳转,真正回到实模式
6.关闭 A20 地址线
7.开中断
8.调用延时函数
9.显示字符串This is real model!
10.设置下一次显示字符串的位置
11.加载 GDTR
12.关中断
13.打开地址线A20
14.置cr0的PE位为1
15.跳转到32位代码段,进入保护模式
(pm32.c部分)
16.调用延时函数
17.显示字符串I am now in protect model^_^
18.保存最后的光标位置
19.跳转到(pm16.c)第3步
实验代码如下:
code: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/example文件夹内找到bochs.exe、BIOS-bochs-latest、VGABIOS-elpin-2.40、x11-pc-us.map四个文件拷贝到试验用的文件夹内。
4.使用yc09编译运行run.c