前面已经提到16位字长的机器可以访问最大存储空间为64K字节,而PC机的最大存储容量为1M(原MS-DOS操作系统下)。要访问1M字节空间的存储器必须有20位地址,用16进制数表示1M字节的地址范围应该为00000-FFFFF。
在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址。CPU访问存储器时,必须先确定所要访问的存储单元的物理地址才能取得(或存入)该单元的内容。20位物理地址由16位段地址和16位偏移地址组成,段地址是指每一段的起始地址,由于它必须是小段的首地址,所以其低4位一定是0,这样就可以规定段地址只取段起始地址的高16位值。偏移地址则是指在段内相对于段起始地址的偏移值。这样,物理地址的计算方法如下:
把段地址左移4位再加上偏移地址值就形成物理地址。或写成: 16dX段地址+偏移地址=物理地址
疑问:如果是这么算,那么物理地址不是会重复了吗?比如:16*0x0010+0x0000和16*0x0000+0x0100
------解决方案--------------------------------------------------------
不同的段地址+偏移地址的组合的确可以表示同一个物理地址,你可以把它们当作逻辑性的表示。
------解决方案--------------------------------------------------------
这种重复叫回绕:ffff:fff0-> 0x100000,如果A20线为0的话就回绕到0x00000.
------解决方案--------------------------------------------------------
是的,较低段基址+较高偏移量完全有可能=较高段基址+较低偏移量,故而在16位汇编下,可以有多种寻址组合达到相同的目的。