在dos下访问超过1MB的内存?

Toogo 2002-08-21 12:33:53

按照书上所说

1MB内存的底限是F000:FFFF

那么干吗我还是可以访问FFFF:FFFF的内存

到底是怎样分的
...全文
131 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
giantzz 2002-08-28
  • 打赏
  • 举报
回复
对于现在的FLASH EPROM来说,如果它是最普通的,如2M,那么它的物理内存地址是FFE00000H-FFFFFFFFH,映射到1M内的内存地址是000C0000H-000FFFFFH(C0000H-FFFFFH)系统BIOS是0F0OOOH-0FFFFFH,不是完全映射
djygrdzh 2002-08-27
  • 打赏
  • 举报
回复
至于映射,可以这样理解,比如你的内存有1024M也就是0-7fffffffh,你要读取一个逻辑内存地址时,CPU不管三七二十一把这个地址转换成物理地址,假设是6fffffffh,然后发给GMCH(类似于北桥),GMCH然后根据自己的寄存器的内容一看,在实际内存范围以内,那么就发往实际内存;如果超出,则不管三七二十一发给ICH(类似南桥),南桥一看,就往它的PCI设备总线那儿一送,说:谁拥有这个地址,给我发个信。然后各个设备就查自己的PCI配置空间的被指定的地址(参看http://www.csdn.net/Expert/TopicView1.asp?id=683837),然后就汇报。
这样就实现了映射。
我说的可能不是完全对,但是大致应该差不多
djygrdzh 2002-08-27
  • 打赏
  • 举报
回复
如果要资料的话可以到http://www.sst.com/products/49lf00xA.html上下载一个编号为49lf00xA的闪存的文档,该型号闪存用做bios芯片的比较多见。
里面会告诉你怎样对闪存进行擦除和写操作。
我看了一下基本是这样的:首先把ffbf0002等控制读写权限的内存映射的寄存器置0,然后要保证把#tbl和#WP两个信号置高。在一般主板中,前者为低,后者为高,这都被硬件固定无法改变。也就是说,我以前提到的引导区是无法擦除的,然后其他区域可以被擦除。
接下来,必须使用这个文档所定义的擦除,写和等待操作用软件的方法来进行bios除了引导区以外的区域写,其中的5555h和2aaah的基址是ffff0000,合成以后也就是0ffff5555h和0ffff2aaah,这是可写的,然后它所定义的#data0-7的pin脚对应的地址是0ffff0000h,也就是数据输入输出口。
真麻烦啊
giantzz 2002-08-25
  • 打赏
  • 举报
回复
哪不明的,说说说说说说说说说说
Toogo 2002-08-25
  • 打赏
  • 举报
回复
有些地方还是不太明白
giantzz 2002-08-24
  • 打赏
  • 举报
回复
你还要什么?
Toogo 2002-08-24
  • 打赏
  • 举报
回复
还有没有多一点资料的
xxxzzz 2002-08-22
  • 打赏
  • 举报
回复
to djygrdzh():
0FFFF0H+0FFFFH=10FFFFH
你是怎么算的?
giantzz 2002-08-22
  • 打赏
  • 举报
回复
to djygrdzh():
你这是在哪本书上学的,按你的说法,OFFFFFFFFH-0FFFF0000H这段ROM空间无法修改,请指教!还有,这段64K的空间如何映射到2M的FLASHROM上,只是映射已用的部分吗?打开地址线21是IO的92H的第1位吧?
Areslee 2002-08-22
  • 打赏
  • 举报
回复
现在的PC都有32根以上的地址线啊!
yeahnet6868 2002-08-22
  • 打赏
  • 举报
回复
根据分段动态分配内存吧,因为16根地址线,所以段地址可以达到:ffff,但是此时偏移地址只能是:000f了吧,为什么出现:ffff:ffff搞不明白阿!
metalbreeze 2002-08-22
  • 打赏
  • 举报
回复
那么runtime部分是从??-0fffffh
djygrdzh 2002-08-22
  • 打赏
  • 举报
回复
至于HMA,当20地址线被打开(好像是通过往io端口59h某个位写1)以后,
0FFFF0H+0FFFFH=10FFFFH就不被转换到=0FFFFH,而是直接访问10FFFFH。注意看一下就知道,那个1正好处于第21根地址线也就是A20,这样就可以访问100000h-10ffffh之间的HMA了。但是在A20关闭的情况下这个地址段还是被翻译为0FFFFH-00000h。
djygrdzh 2002-08-22
  • 打赏
  • 举报
回复
但是初始化以后bios会把自己拷贝到 000fffffh 以下部分
不是0000ffffh,笔误
djygrdzh 2002-08-22
  • 打赏
  • 举报
回复
bios真正的地址是0ffffffffh-0ffff0000h,这段地址被硬件映射到一块flashrom上,也就是该bios芯片。但是初始化以后bios会把自己拷贝到0000ffffh以下部分,因此在实模式下可以访问,但这只是runtime部分,初始化计算机的部分是不被拷贝的。
metalbreeze 2002-08-22
  • 打赏
  • 举报
回复
书上写的是0ffff0h为机器启动地址,其后为自检和rom引导程序(是不是bios镜象)
djygrdzh 2002-08-22
  • 打赏
  • 举报
回复
具体我不是很清楚,因为这是硬件连线决定的,但是估计原理和3-8译码器差不多。。。
xxxzzz 2002-08-22
  • 打赏
  • 举报
回复
说明白一些,是如何映射的?
djygrdzh 2002-08-22
  • 打赏
  • 举报
回复
打开地址线21确实是IO的92H的第1位
djygrdzh 2002-08-22
  • 打赏
  • 举报
回复
当然不是64K,是64K-16,这个大小在 BIOS研发技术剖析一书中被提到
加载更多回复(13)

21,493

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧