黑夜的狼

沮丧吗,那就是一种无病呻吟!留恋它就是一种高度近视!目光应该放得更远一点! 别不想飞,只是要一步跨过太平洋!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
内存逻辑地址

学习的CUP是8086,8086只有20根地址总线

那么最大内存就只有1M(220B)
这里做个解释啊,一般老鸟呢很自然的就想220就是1M,虽然是对的,不过细想一下
自己却掉入了误区。(以为20根总线是20位,那么最大内存是220 bit)

给新手和我自己看的
{
20根地址总线在内存的寻址范围是0-(220-1)
220是哪来的?每一个根地址总线可以表示为1和0,就是两个地址,也就是
0-(21-1)以此类推20根自然就是0-(220-1)
这其中的每一个数都表示一个起始地址
而在8086中,数据是以字节B来存储的,所以是最大内存是220 B,而不是220 b
}

而寄存器存取只有16位(传说在一个硅片上很难弄上20位)
所以对内存进行分段。这个分段比较有意思,它对这个1M有内存进行分段,
每隔16B为一段,但每段为64KB,也就是说,段和段之间重叠
只露出来头来,这个头就是16B,可以想象一下,就像拿扑克牌,只露头
比如,第一段的后面64KB-16B和第二段的前64KB-16B为重叠部分

每个段都有个起始地址,就是叫段地址,所以要找一个内存地址就可以是
一个所在段的段地址+段内偏移量,就可以了
这种 “段地址:段内偏移量”的形式就叫逻辑地址

例如对于物理地址为00010H的内存单元,
(因为内存寻址以B为单位,00000为最开始,那么00010H也就是说前面的内存量总数为16B)
若在内存第0段中表示,应该是0000:0010H;而在内存第1段中表示,
则成了0001:0000H。
(每一段之间的差量,也正好为16B,所以正好为第1段中的0000位置)

计算时只要注意,每段之差是16B,而前后连着的两个 物理地址 之差是1B就可以了

posted on 2007-11-22 02:53  anncesky  阅读(640)  评论(1)    收藏  举报