2013-02-23 -一个简单的实模式跳转到保护模式程序(无loader功能)

写一个最简单的从实模式跳转到保护模式的程序。顺便学习温故下各个基本寄存的设置。


总的来说,实模式跳转到保护模式的基本思路和流程是:


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位代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值