2.4 物理地址
CPU访问内存单元时要给出内存单元的地址。我们将这个唯一的地址称为物理地址。
2.5 16位结构的CPU
16位结构描述了一个CPU具有以下几个方面特征:
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路是16位的
2.6 8086CPU给出物理地址的方法
8086有20位地址总线,可传送20位地址,寻址能力为1M
8086内部为16位结构,只能传送16位的地址,寻址能力却只有64k。
8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理空间
- cpu中的相关部件提供两个16位的地址,一个称为断地址,一个称为偏移地址;
- 段地址和偏移地址通过内部总线送入一个称为 地址加法器 的部件
- 地址加法器将两个16位地址合并成一个20位的地址
地址加法器的工作原理
段地址 * 16,即数据左移4位
- 一个数据的十六进制形式左移1位,相当于乘以16;
- 一个数据的十进制形式左移1位,相当于乘以10;
- 一个数据的X进制形式左移1位,相当于乘以X;
2.7 段地址 ✖️16 + 偏移地址 = 物理地址的本质含义
第一个比喻:
- 从学校走2826m到图书馆。这2826可以认为是图书馆的物理地址。
- 可以分解为从学校走2000m到体育馆,从体育馆再走826m到图书馆
- 第一个距离2000m是相当于起点的基础地址
- 第二个距离826m是相对于基础地址的偏移地址
第二个比喻:
用纸条通讯,询问图书馆的地址(目前只有两张可以容纳3位数据的纸条)
第一张:200
第二张:826
规则:第一张 ✖️10 + 第二张,即可得到地址。
2.8 段的概念
错误认识:
内存被划分成了一个一个的段,每一个段有一个段地址
其实:
内存并没有分段,段的划分来自于CPU,由于8086CPU用“段地址 ✖️ 16 + 偏移地址 = 物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
- 段地址 ✖️ 16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;
- 偏移地址为16,16位的地址的寻址能力为64k,所以一个段的长度最大为64k。
如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?
结论:偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64k个内存单元。
比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H ~ 1FFFFH。
数据在21F60H内存中。对于8086PC机的两种描述:
- 数据存在内存2000:1F60单元中;
- 数据存在内存的2000段中的1F60H单元中。
注:段是可以人为定义的,可根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。