误区:内存被分成一个一个的段,每个段有一个段地址。
实际:内存没有分段,段的划分来自于cpu,由于8086cpu采用“(段地址*16)+偏移地址+物理地址”(用两个地址形成一个20位的地址)的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。需注意:
1.段地址16必然是16的倍数,因此一个段的起始地址一定是16的倍数;
2.偏移地址为16位,16位地址的寻址能力为64K,所以一个段的长度最大为64K。(2=64KB)
CPU访问内存单元时,必须向内存提供内存单元的物理地址。8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。CPU可以用不同的段地址和偏移地址形成同一个物理地址。
在8086PC机中,存储单元的地址用两个元素来描述。即段地址和偏移地址。
数据在21F60H内存单元中。对于8086PC机的两种描述:
1.数据存在内存2000:1F60单元中;
2.数据存在内存的2000段中的1F60H单元中
可根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。