跳至主要內容
汇编语言一发入魂 0x0C - 解放生产力

在上一篇文章中,老李已经教大家将控制权从汇编语言转移到C 语言,但是我们的活动范围依然受限于512字节的引导扇区。今天老李就带领大家突破这512字节的限制,真正的解放生产力

前置知识

如果你一路跟着老李走过来,那么这些前置知识你应该已经掌握了。忘记也没关系,回过头再去看看就 ok 了。


未央大约 9 分钟汇编语言C 语言32位保护模式C 语言内联汇编
汇编语言一发入魂 0x0B - 拥抱 C 语言

汇编语言的基础已经讲了很多,也带领大家进入了保护模式。想必大家在学习进入保护模式这一章时就发现我们已经涉及了很多数据结构全局描述符表段描述符GDTR等。如果可以使用C 语言,将他们和struct对应起来那将会减少很多的工作量。今天老李就教大家如何从汇编语言过渡到C 语言


未央大约 7 分钟汇编语言C 语言32位保护模式C 语言
汇编语言一发入魂 0x0A - 进入保护模式

保护模式实际上很简单,只是概念比较多。今天老李就带领大家进入保护模式,然后在实操中逐一攻克每个概念。

进入保护模式

进入保护模式总共分三步。

  • 第一步,打开A20地址线。
  • 第二步,加载GDT
  • 第三步,将处理器切换到保护模式

下面我们就来详细讲解一下这三个步骤。

A20 地址线

众所周知,8086处理器有20根地址线,可访问的最大内存地址是0xfffff,即1MB32位处理器具有32根地址线,可访问的最大内存地址是0xffffffff,即4GB。在32位处理器刚面世的时候并没有太多针对32位处理器开发的软件,更多的是为8086开发的软件,计算机制造商为了能够兼容这些软件,便想出了一个办法,在计算机启动后将第21根地址线,即A20,置为0。这样,当地址超过0xfffff后,由于第21根地址线为0,所以地址又会绕回到0x00000开始。从外表上看就好像是一个16位的处理器。


未央大约 12 分钟汇编语言32位保护模式