写一个最简单的从实模式跳转到保护模式的程序。顺便学习温故下各个基本寄存的设置。
总的来说,实模式跳转到保护模式的基本思路和流程是:
1、准备好保护模式下的代码段以及数据段(通俗的说就是从实模式跳转到保护模式后,你到底要cpu做些啥。当然了,只是单纯的跳转一下玩玩也无妨,不过好歹跳转了下,总要留下点“在此一游”之类的豪情壮志吧~)
这里具体要做的第一件事情其实就是分配好内存吧。现在先不考虑实模式跳转保护模式后,又作为装载器(这个后面再实现了)。所以,所有的让你实现的代码空间只有一个扇区(512bytes),当然了,还需要分配gdt空间初步分配如下:
GDT表基址位于物理地址0x08000
2、在实模式下,为GDT添加对应的格式的表项(程序总所有段的描述符)
3、开辟一个小的内存空间(大小为6个字节),分成2部分,低地址2个字节为表的长度,高4个字节为32位的GDT表首地址,这个动作主要是为了后续装载gdt表使用。
4、处理第21条地址线,A20这个遗留问题(傻瓜式代码,一劳永逸式)
5、使用lgdt命令初始化gdtr寄存器
6、对CR0寄存器进行操作,将PE位打开 = 1。
7.来一个华丽的jmp,进行实模式到保护模式的跳转。
8、执行32位代码