最近时间紧了,工作忙了,进度也降下来了……无奈 大学时期没有多做点事情真是遗憾
闲话不说,进入正题。
昨天用 nasm重写linux0.11的bootsect.s,又有了一些新的体会。
看过赵博的书的人都知道,bootsect.s在BIOS加电后被载入0x07c00这个地方,然后它把自
己复制到0x90000,把setup.s复制到0x90200(紧挨着0x90000的bootsect.s),同时设栈
顶指针为0x9FF00,最后把system模块从磁盘读到0x10000处。
最初看这段代码的时候没什么体会,当时心想linus你也太小气了,分这么点内存。但当我
重写这段代码准备大显身手的时候发现我错了,错得太离谱。思考再三,对于下面这三个数
字0x90000、0x90200、0x10000我几乎不打算改变,这几个数字选得太好了,好的几乎很难
再有更好的方案去替代!
让我们看看linus是怎么选出这些数字来的吧。首先我在网上查到以下资料(出处不明,并
且原文有乱码,我做了适当修改):
***********************************************************
80386内存的寻址
这篇文章将会着重介绍内存寻址的不同方法。首先,我将从范围为00000000-000FFFFF的
1M内存的地址使用分配方式的描述开始。然后我将试图探讨1MB-4GB范围内存寻址的问题。
1M内存
当我们说到1M内存时,我们将谈到实模式,一种分段式内存模式,不具有32位寻址和内
存分页的功能。
低端内存的特定区域都保留做特殊用途并必须进行正确处理。为了说明这一点,我将列
出1M内存的映射的实例。
00000 003FF IVT Interrupt Vector Table (中断向量表)
00400 004FF BDA BIOS Data Area (BIOS数据区)
00500 00501 PRTSCR 1st byte is Print Screen Status Byte (第一字节是打印屏幕状
态字节)
00501 9xxxx OS OS specific (