您的位置:首页 > 其它

内存寻址 是否分段 形象描述

2012-05-01 19:11 274 查看
在早期的处理器中,比如8086/8088,最大可寻址1M空间,及20位宽度,而cpu的寄存器仅是16位的,也就是说一个cpu寄存器仅能寻址64k,这就产生了矛盾。所以要用两个寄存器来表示地址,看下面的例子:
比如现在有这样一个问题,一个学校有50个班(1班,2班,...,50班),每个班有60名学生,怎么标记识别出每个学生呢?简单:把所有学生从1开始编号,到3000为止。每个号码代表一个学生即可,但是有这么一个问题,如果有一个电子显示牌用于老师点名,由于技术及成本原因,只能显示两位数字,并且最大数是60(00-60),那么怎么用显示牌标记出所有学生呢。比如第300号学生?答案就是做两个显示牌,第一个显示牌显示班级,第二个显示牌显示其在班级中的编号。

而每个学生的最终编号 = 班号*60 + 在班级的编号
这里学生的最终编号和内存地址是一样的,班号就是段寄存器,在班级的编号就是偏移地址。

实质就是16位cpu的内存地址线有20根,16<20所以地址要分两部分表示。32位cpu的地址线有32根,32=32只有一个寄存器就能全部表示内存地址,不存在分段问题。
现代cpu一般有多个模式,dos操作系统工作在实模式,不论cpu多先进和8086的区别只是速度快,但仅能使用1M内存(段地址+偏移地址),而windows工作在保护模式,能识别32位地址内存,又称为flat模式,不用分段
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: