发这儿合适吧...
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个寄存器就行了嘛,但为了程序通用,估计浪费个寄存器也无所谓哦,这方面地址是怎么处理的?
8 2 32位字长,36位地址总线,还是要用2个寄存器,64位放36位数据,地址算法又是咋样? |