关于寻址的一点猜想,以后真正了解了再修改

来源:互联网 发布:java多泛型转换 编辑:程序博客网 时间:2024/06/06 14:17

书上一直都说 物理地址=段地址*16+偏移地址。

要是以前的我,可能就搞不明白为什么要*16了,可能就直接死记了。

多想了一下,原来如此,为什么*16是因为书上的例子原因,教程啊,你能不能写明白为什么要*16呢。。。

例子是8086的CPU是16位CPU,所以CPU中的寄存器是16位的,内部总线也是16位的,但是CPU的地址总线是20位的。

这样的情况下,CPU中只能处理16位的数据,因为寄存器只有16位,但是地址总线有20位,这样就导致了部分的地址是没办法寻找到了。

所以前辈们想到了一个办法,CPU中的两个16位地址经过某种处理得到20位的地址数据。这个办法就是上面所说的公式了。

至于*16是为什么,那是因为段地址在左移了一位之后就成了一个20位的地址数据,这个时候再跟偏移地址相加就是物理地址了。20位的地址总线比16位的内部总线要多出了4位,4位的0或者1,根据8421码(进制转换内容)来看的话,这个4位就是16了,再说了16进制的数据中*16就是表示左移一位,/16就是表示右移一位。

 

依我个人观点,也就是教程中CPU是8086的CPU,所以才*16,如果换做是其他的CPU,还真不一定是*16了,到底乘多少,真得依具体情况看看了。如果啊,如果CPU是32位的,地址总线宽度是48的话,那么估计就要*128了,因为2的16次方。

 

而这个偏移地址如何来确定的问题。

8086CPU,内存地址空间中存储的地址都是一些16位的地址,这些地址有一些是段地址,有一些是偏移地址。段地址就是某个存储单元的段的开始地址,而这个偏移地址就是某个存储单元相对于段地址的偏移的地址。这个偏移地址如何来确定,这个问题应该去问问CPU,或者其他硬件设备的生产厂商了。。。。这个我就不清楚了。

原创粉丝点击