想说说实模式的内存地址映射的问题

最近时间紧了,工作忙了,进度也降下来了……无奈 大学时期没有多做点事情真是遗憾

闲话不说,进入正题。

昨天用 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 (

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值