鱼C论坛

 找回密码
 立即注册
查看: 3335|回复: 16

[争议讨论] 关于内存地址深入了解

[复制链接]
发表于 2011-8-3 11:09:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一直对8086的内存寻址计算有个疑惑:16位段*16让cpu寻址能力增加了98w多个,这些地址都分布在什么地方呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 11:23:18 | 显示全部楼层
按照16位段*16最大的地址应该是fffff=1048560,哪如果使用ffff0(段)+ffff(偏移)=1114095,很明显1114095>1048560,哪怎么解释5个16进制位无法定位的哪些地址呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 11:33:10 | 显示全部楼层
自己顶下,希望大家关注!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-3 12:23:28 | 显示全部楼层
一个操作对象, 在内存中会占用一点的空间, 这个空间位置在内存中的记号,就是这个操作对象的操作地址, 而这个空间所存储的数据, 就是这个操作对象的数据! 所以一个操作对象就有了两个概念, 一个操作地址,一个操作数!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 13:45:24 | 显示全部楼层
你答非所闻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-3 15:22:58 | 显示全部楼层
本帖最后由 zhdw 于 2011-8-3 15:23 编辑

cpu  寻址能力? 是根据 地址总线     16根地址线  寻址能力 2的16次方      地址是在内存上的
   偏移地址16位 范围0-ffffh  之间   你的16位段*16  这东西怎么出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 16:10:18 | 显示全部楼层
兄弟,你所说的寻址能力是没有地址加法器之前的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-3 17:46:06 | 显示全部楼层
哦    你的问题:  地址加法器合成一个 20位   物理地址  。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 17:47:27 | 显示全部楼层
就此意思!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-5 17:21:34 | 显示全部楼层
“按照16位段*16最大的地址应该是fffff=1048560,哪如果使用ffff0(段)+ffff(偏移)=1114095,很明显1114095>1048560,哪怎么解释5个16进制位无法定位的哪些地址呢?”
按我的理解对拥有20根地址线(即20位)的8086,段地址×16+偏移地址这只是提供了一种可行的寻址方式,以适应8086单次只能处理16位的现状。
A、20位地址线可表示最小地址为0,最大地址为fffffh。
B、而对于“段地址×16+偏移地址”这个数学表达式而言,其可以表达的最大数为(fffffh+ffffh)
需要注意的是上述A和B的区别,B仅为A采用的寻址方式,对于8086而言,当段地址为ffffh时候,其偏移地址只能为0000~000fh,否则将超出其地址线表示范围。
比如若偏移地址为0010h,则按B,ffff0h+10h=100000h,达到了6位(16进制),若用地址线则需要24根才能表示(当然,对于100000h这个实例,21根地址线也可以表示);超出了8086的寻址能力。
简单一些回答你的问题其实就是一句话。。(ffff0H+ffffh)这个地址是不会出现在8086中,当段地址为ffffh时候,偏移地址>0fh的寻址都是无效的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-5 18:49:23 | 显示全部楼层
你测试过没,不要只说理论哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-5 23:25:15 | 显示全部楼层
那你把你的测试拿出来吧,不知道是我的没讲清楚还是我没看懂你的问题~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-6 00:49:50 | 显示全部楼层
ffff*16=ffff0 +ffff是否大于fffff?
外部地址总线20条,那么最大提供fffff个地址标记?
如果是,哪cpu能够找到大于fffff个地址,哪多出来的怎么处理?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 20:01:01 | 显示全部楼层
在网上查了下,如果超出范围就会以虚拟内存的方式来实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-7 20:23:05 | 显示全部楼层
要得要得!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-8 10:20:08 | 显示全部楼层
本帖最后由 幕府幽魂 于 2011-8-8 10:21 编辑


同意10楼这个解释
8086CPUDOS下的 内存寻址范围能力最大只有2^20=1048576B=1MB,段地址*16+偏移地址=物理地址的最大范围=1MB。物理地址长度是固定的由硬件决定。而1MB也是8086CPU所能看见的最大范围!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-8 15:49:53 | 显示全部楼层
其实cpu却能看到大于1M的地方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表