栈,数据段,代码段和cpu外内部总线之间的关系
小甲鱼,你好!我是您的终极粉丝,我想问个很郁闷我的问题,那就是:原来8086cpu内部是16位的嘛对吧,而而内部是用16位的段地址和16位的偏移地址通过地址加法器形成和外部地址总线20条相匹配的20条总线对吧?但是,数据段和代码段的长度最长是64K,还有栈最长的长度也是64k,对吧?可是那这样不管是数据段还是代码段还 是栈,它们都是长度不超过64k即16位,而cpu的地址总线有20位即能访问1MB的内存,那这样20和16相比不是总线多了4,这样不是浪费了4条总线?求解答,可能是我对内部这些关系理解错了,能不能在把我的主题中“栈,数据段,代码段和cpu外内部总线之间的关系”解释解释???谢谢,最近要考微机了,呜呜呜。:lol◆
像風一樣的男子 发表于 2012-12-22 20:56 static/image/common/back.gif
你也没有回答我所最后问的。先等等别的答案先把,不好意思哈
段地址*16 这种方式就把寻址能力扩大到了20位(8086寄存器16位,最大是ffff,乘以16以后可以达到ffff0。再加上偏移地址可以寻址所有的地址空间),所以不会浪费。 你说的应该没错,不过由16条变成20条的增加了cpu的寻址范围,对于cpu来说没有这几个段的,内存增加了,就增加了pc机的工作能力, 地址总线跟cpu内存的位数没有对应关系,地址总线的20位,最后生成的也只是内存中的一个地址,这个地址对应的也就是一个8位的字节。这个字节才是跟CPU内部的位数产生关系。
地址总线只是表示了CPU的寻址能力,8086CPU只有20根数据总线,他的最大寻址范围就是FFFFF。也就是说如果你的内存大于个这数,那也是没用的。因为CPU只能访问0-FFFFF的内容。 8086的寻址方式是通过段地址和偏移地址组合起来寻址的。的确是用两个16位的地址组合后,来扩大寻址范围。具体的计算方法是,第一个地址(称为段地址)*16+第二个地址(称为偏移地址)。这样获得的结果就是对应的物理地址。 shdfsbgfjks 发表于 2012-12-21 21:13 static/image/common/back.gif
你说的应该没错,不过由16条变成20条的增加了cpu的寻址范围,对于cpu来说没有这几个段的,内存增加了,就增 ...
恩,你说得对,但是你不是回答我所主要问的,不好意思哈 志华 发表于 2012-12-21 23:01 static/image/common/back.gif
地址总线跟cpu内存的位数没有对应关系,地址总线的20位,最后生成的也只是内存中的一个地址,这个地址对应的 ...
你只是回答了cpu访问内存时候,能够访问的最大访问范围。还没有说数据段还有代码段,还有栈,这几个段人为分长度的时候,最长都是16,而cpu地址总线是20即最大访问内存为fffff,而那个16和20相比不是相差4,不是浪费了4? 阿飞-祁磊 发表于 2012-12-21 23:25 static/image/common/back.gif
8086的寻址方式是通过段地址和偏移地址组合起来寻址的。的确是用两个16位的地址组合后,来扩大寻址范围。具 ...
你也没有回答我所最后问的。先等等别的答案先把,不好意思哈
像風一樣的男子 发表于 2012-12-22 20:56 static/image/common/back.gif
你也没有回答我所最后问的。先等等别的答案先把,不好意思哈
地址总线表示的是最大的内存访问长度。跟段所能表示的最大地址没有关系。
如果地址总线跟段的偏移一样大,那段地址也就没有意义了。你就一个偏移地址就能把所有的内存都访问到。
就像你说的,比如数据在段地址的ffff处,但他在实际的内存里面的地址肯定不是ffff,当然除了段地址是0,这时候如果只有16位,那就访问不到那个地址了。 路过看看呵呵 激动人心,无法言表! 一个代表了寻址能力,也就是说存储单元的个数,一个代表了机器字长存储字长,也就是说一个存储单元里有多少位,我是这样理解的。
页:
[1]