|
发表于 2013-8-19 08:38:08
|
显示全部楼层
是这样的:首先。因为8086的数据总线只有16位,所以它的几乎所有寄存器都是16位。于是,这就涉及到了一个严重的问题:“我们要用多少个寄存器来保存地址?”
显然,我们第一次尝试使用1个寄存器来保存地址,也就是用16个2进制位来保存地址,但是这样只能保存64KB大小的地址空间。但是8086的地址总线是20根,可以有1MB的地址。我们不能浪费剩下的地址空间不用。
于是,我们产生了一个朴实无华的想法:一个寄存器不够的话,就用两个。但两个寄存器总共有32位,可以寻址4GB的空间,但实际上能用的只有1MB。
接着思考的就是:在这种情况下,肯定有很多的地址表示是重复的,也就是说同一个20位的物理地址可以对应多种不同的32位表示。问题在于:这种硬把32位地址转换为20位地址的方法有很多,我们要选择哪一种方法呢?其实随便你选择哪种都可以,不过这个问题答案的关键不在于你如何选择,而在于8086CPU的设计者如何选择。
接下来的事情你已经知道了,8086的设计者为了让人觉得他们的做法“比较明智”,硬是搞了段地址和偏移地址的概念。当然,有概念比没有概念要好,因为有概念,你可以根据概念由段地址和偏移地址自己计算出物理地址;没有概念的话,你基本就要像查ascii表那样查一张很大的表。
整个故事就是这样的。 |
|