在上一篇文章中,老李已经教大家将控制权从汇编语言
转移到C 语言
,但是我们的活动范围依然受限于512
字节的引导扇区。今天老李就带领大家突破这512
字节的限制,真正的解放生产力。
前置知识
如果你一路跟着老李走过来,那么这些前置知识你应该已经掌握了。忘记也没关系,回过头再去看看就 ok 了。
大约 9 分钟
在上一篇文章中,老李已经教大家将控制权从汇编语言
转移到C 语言
,但是我们的活动范围依然受限于512
字节的引导扇区。今天老李就带领大家突破这512
字节的限制,真正的解放生产力。
如果你一路跟着老李走过来,那么这些前置知识你应该已经掌握了。忘记也没关系,回过头再去看看就 ok 了。
汇编语言的基础已经讲了很多,也带领大家进入了保护模式。想必大家在学习进入保护模式这一章时就发现我们已经涉及了很多数据结构
,全局描述符表
、段描述符
、GDTR
等。如果可以使用C 语言
,将他们和struct
对应起来那将会减少很多的工作量。今天老李就教大家如何从汇编语言
过渡到C 语言
。
保护模式实际上很简单,只是概念比较多。今天老李就带领大家进入保护模式,然后在实操中逐一攻克每个概念。
进入保护模式总共分三步。
A20
地址线。GDT
。保护模式
。下面我们就来详细讲解一下这三个步骤。
众所周知,8086
处理器有20
根地址线,可访问的最大内存地址是0xfffff
,即1MB
。32
位处理器具有32
根地址线,可访问的最大内存地址是0xffffffff
,即4GB
。在32
位处理器刚面世的时候并没有太多针对32
位处理器开发的软件,更多的是为8086
开发的软件,计算机制造商为了能够兼容这些软件,便想出了一个办法,在计算机启动后将第21
根地址线,即A20
,置为0
。这样,当地址超过0xfffff
后,由于第21
根地址线为0
,所以地址又会绕回到0x00000
开始。从外表上看就好像是一个16
位的处理器。