免费注册 查看新帖 |

Chinaunix

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

问个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-03 23:33 |只看该作者

回复 #2 dgfsdgs 的帖子

你的问题这么多,还不如找本好书仔细看,介绍本好的教材给你《ISA System Architecture (3rd 》网上搜索一下,你能坚持将此书看完且能看两次,那么你的基本就打得很好了。

论坛徽章:
0
4 [报告]
发表于 2008-05-03 23:46 |只看该作者

回复 #2 dgfsdgs 的帖子

汗,这些问题是你自己想出来的? 还是书上的?

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

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

论坛徽章:
0
6 [报告]
发表于 2008-05-04 00:27 |只看该作者
原帖由 dgfsdgs 于 2008-5-4 00:10 发表
ISA System Architecture没中文版本啊,E文的我看不懂。。
我在看王爽那本汇编语言,看到大概120页了,感觉模模糊糊的,不是很懂。。
然后我买了本IBMPC汇编语言程序设计,我看到那个寻址方式多啊,复杂啊,也 ...


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

论坛徽章:
0
7 [报告]
发表于 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
8 [报告]
发表于 2008-05-04 00:56 |只看该作者
原帖由 dgfsdgs 于 2008-5-4 00:41 发表

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

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

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

最后答你一次:
20 位地址的形式是: 高16位地址放CS,也即是放CS后,低4位被置为0,再上 offset 得20位地址。
20位的地址编号本来就是从 0 至 FFFFF,只是你转不过弯来而已,这20位地址的编号采取段式内存管理进行分段,形式一个段基CS加上偏移量这种表示形式。实际上编号是0到FFFFF

论坛徽章:
0
9 [报告]
发表于 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位啊, 这点我就不明白了...

论坛徽章:
0
10 [报告]
发表于 2008-05-04 09:05 |只看该作者
原帖由 dgfsdgs 于 2008-5-3 21:40 发表
发这儿合适吧...

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

2:8086CPU用1个寄存器16位就不能充分利用20跟地址总线,所以设计了段地址和偏移地址(2个寄存器)来充分 ...


LZ 在思考问题,顶一下.

在纯数学逻辑上,有些观点是对的(如1,3).

对于分段的概念,LZ应结合当时OS的理论模型更容易理解,实际上段可以有代码段,数据段等, 有段寄存器最大的好处就是代码和数据可以处于约束保护之中,当然这一点8086做的并不完善,所以80386以上的保护模式就有了段大小的限制(CS,DS也不是直接的段地址了).

在多任务系统中,不同的任务可以处于不同的段中,而段中的指令和数据地址则可线性增长. 至于在内存中的实际起始位置则有段决定. 这样有利于配合OS对任务进行调度....因此段地址有多种组合在实际中是有意义的.

.......

[ 本帖最后由 system888net 于 2008-5-4 09:11 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP