|

楼主 |
发表于 2022-5-28 10:35:23
|
显示全部楼层
本帖最后由 竹逸 于 2022-5-28 10:41 编辑
关于地址(比如段地址、基址、偏移地址、物理地址)我是这样理解的
- 物理地址:是唯一的内存地址
- 内存中每一个存储单元都是以线性排列的,为了方便区分谁是谁,我们用记标号的方式来定位每一个存储单元,第一个存储单元从0开始标号,以此类推,这些标号就是每一个存储单元在当前位置的地址值,存储单元都是实实在在存在的,所以把为这些存储单元分配的地址值称为物理地址
- 8086 CPU内部是16位的,也就是说各个总线的宽度均为16位,可是它与外部器件的地址总线宽度是20位,那么8086CPU是如何实现用内部16位的地址总线去寻址外部20位的物理地址呢?
- CPU的设计师就想出了一个折中的办法,用两个16位的地址来合成一个20位的物理地址,其中一个16位的地址就称为段地址,另一个16位的地址就称为偏移地址,段地址和偏移地址都是16位的,用十六进制表示则是4位,他们通过地址加法器把4位的段地址左移一位来组成一个5位的基础地址,相当于原来的4位数*10H后变成了5位数,然后和偏移地址相加合成物理地址
- 段地址*10H + 偏移地址 = 物理地址
- 基础地址也是物理地址,是段首地址(一个段中连续内存单元的起始地址)
- 偏移地址是相对于基址的偏移量
- 段地址 基址 偏移地址 物理地址
- 0000 00000 0~F 00000~0000F
- 0001 00010 0~F 00010~0001F
- 0002 00020 0~F 00020~0002F
- ……
- FFFF FFFF0 0~F FFFF0~FFFFF
- 可以看出段地址每增1,则基础地址增10H,也就说明上下段的间隔是16个存储单元,而这16个存储单元是通过偏移地址来索引的,基础地址负责定位每个段首地址,通过 段地址*10H+偏移地址 的方式就可以完美索引到外部20位(00000~FFFFF)物理地址
复制代码 |
|