免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4392 | 回复: 4
打印 上一主题 下一主题

问个CPU内存寻址的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-03 21:40 |显示全部楼层 |倒序浏览
发这儿合适吧...

1:8086CPU 字长16位(字长16位是寄存器大小的以上么?),地址总线20
这个说法对么?

2:8086CPU用1个寄存器16位就不能充分利用20跟地址总线,所以设计了段地址和偏移地址(2个寄存器)来充分利用20跟地址总线?
(段地址+偏移地址多麻烦啊,但CPU设计成那样了,没法,将就CPU)
PS:如果当初8086字长和数据总线一样大,是否就可能没有段地址+偏移地址这个说法?

3:2个寄存器(CS+IP)总共是32位,来放20位的数据(20跟地址总线),应该是有浪费的,中间有很多重复,这也是一个地址可以由不同的段地址+偏移地址组成的原因?

4:即使是2个寄存器32位放16位的数据远远足够,但考虑发展很快,所以地址分配依然从0开始,也就是先放满IP寄存器,(好比一个数字的低位),再放CS寄存器高位,IP寄存器16位,也就是最多指向64K空间,满了64K空间才进一位进到CS寄存器上去(好比一个数字的高位).
(这段不知道我表述清楚没)

5:如果第四条正确,那么后面就有很多空余的地址配额可以指向更多的空间,但从汇编书上看,那些地址并没有空闲,因为段地址*16+偏移地址这个计算方式,让每一个地址都指向了1M之内的内存空间
(我认为白白浪费点了,还让我们计算的麻烦,不知道为什么用这个方法?)
(我想出来的就是IP寄存器取16位,CS寄存器取低4位然后组合成一个20位地址,刚好对应20跟地址总线,然后CS寄存器的高12位用于以后更多地址总线的寻址)
(用段地址*16+偏移地址这个计算方式难道是计算机不方便从CS寄存器中单独取4位出来?)
(为什么乘以16,我脑袋不大灵活,没想出来.)

6:286有24跟地址总线,照4,5的理解,CS:IP没有20跟地址总线浪费那么多了,但意味着8086上的地址在286上指向了不同的地方,意味着程序的不通用,我感觉这是不大可能的,我可能错在没有理解到那个段地址*16上?

7:386,486都是32字长和32地址总线,完全利用,没有浪费,用1个寄存器就行了嘛,但为了程序通用,估计浪费个寄存器也无所谓哦,这方面地址是怎么处理的?

82 32位字长,36位地址总线,还是要用2个寄存器,64位放36位数据,地址算法又是咋样?

论坛徽章:
0
2 [报告]
发表于 2008-05-03 21:55 |显示全部楼层
8086CPU
2个寄存器32位,总共可以放2^32个的地址,但1M只有2^20个地址
2^32个地址全部都指向2^20个地址去了么,意思是平均一个地址有2^12种写法?

论坛徽章:
0
3 [报告]
发表于 2008-05-04 00:10 |显示全部楼层
ISA System Architecture没中文版本啊,E文的我看不懂。。
我在看王爽那本汇编语言,看到大概120页了,感觉模模糊糊的,不是很懂。。
然后我买了本IBMPC汇编语言程序设计,我看到那个寻址方式多啊,复杂啊,也是没看几页,大概看到50页,感觉就看不下去了。。。
想到内存地址不太明白,就一直想下去,就想出这些问题了。。

直接用1,2,3这样挨顺序表示地址很直观啊,不知道当初是基于什么一个原因用了现在书上讲的寻址方式。

论坛徽章:
0
4 [报告]
发表于 2008-05-04 00:41 |显示全部楼层
原帖由 mik 于 2008-5-4 00:27 发表


没看过王爽的汇编语言,《ISA System Architecture》真的比这些什么什么汇编语言强多了。E文不好,可以用金山词霸翻着看,坚持下去。我看E文不懂时也这样

王爽那本汇编语言不错,属于经典的汇编书了。可惜书店居然找不到,四川书市都没找到。
:em12: 用金山词霸看估计太郁闷了点。。。
cjaizss大虾对硬件了解,等他来解答

再简化下问题
16位寄存器放不下20位的地址,所以用2个寄存器放,这能理解,但为啥不直接把20位地址从0到FFFFF编号,低于FFFF的部分放到IP寄存器当中,高的部分直接放到CS寄存器的低4位去呢,这样CPU拿地址的时候直接把CS寄存器的低4位拿出来后面加上16个0然后再加上IP当中取出来的值。
又说了那么多,没简化成。还是等答案,先不说了
要是以后地址总线是寄存器的3倍,NND,2个寄存器都不够放了,得用3寄存器了。。

论坛徽章:
0
5 [报告]
发表于 2008-05-04 08:44 |显示全部楼层
原帖由 mik 于 2008-5-4 00:56 发表

汗~ 建议你爱听就听不听就算了。你就等着 cjaizss 给你解答吧

最后答你一次:
20 位地址的形式是: 高16位地址放CS,也即是放CS后,低4位被置为0,再上 offset 得20位地址。
20位的地址编号本来就是从 0 ...

不是这个意思,英语的我不大可能看的动,要知道我的英语是最差的一科,150分的题我才能得40-50分
假设CS地址FFFF,IP也是FFFF,那么地址就指向10FFEF去了,就超过1M内存了,cpu会把高位丢掉?,按照0FFEF去寻址?
CS的高16位地址加上4位偏移地址,问题是IP是有16位啊, 这点我就不明白了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP