💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
**段地址\*16+偏移地址=物理地址** **偏移地址=物理地址-段地址\*16** 段地址是16位表示的, 10进制*16=2进制左移4位=16进制左移一位 如果物理地址为=21F60H,段地址为2000H,段地址*16即左移一位:20000H。 偏移地址=21F60H-20000H=1F60H 段地址为其他的规律同理:(段地址的范围是11F7~21F6) ![](https://img.kancloud.cn/20/9a/209a109ee07ab0ae83ca84f34c8af23f_401x197.png) ## **为什么要分段?** 内存并没有分段,段的划分来自于CPU 8086是16位的,它的寻址范围是2^16-1=65535=64k,所以一个段的长度最大为64KB 但是内存的容量远大于64KB,所以我们需要cpu分段来读写内存,~~所以偏移地址的值不会超过65535(FFFFH)即偏移地址的范围是(0000H~FFFFH)~~ 例子:有一个数据存放在内存20000H单元中,现在给定段地址为SA,若想用偏移地址寻到此单元. 则SA应满足的条件是: 最小为?  最大为? 段地址SA 最小为:1001H   此时偏移为:FFF0H  最大为:2000H   此时偏移为:0000H 例子2: 给定段地址为0001H,仅通过变化偏移地址寻址, CPU的寻址范围为? 关键: * 此题中已经假设地址总线为16位,寻址范围最大为2的16次方,所以偏移地址变化范围是 0 ~ 65535,即 0000H ~ FFFFH * 基础地址(段地址\[SA\] X 16)+ 偏移地址\[EA\] = 物理地址 ``` 物理地址=SA*16+EA EA的变化范围为0h~ffffh 物理地址范围为(SA*16+0h)~(SA*16+ffffh) 现在SA=0001h,那么寻址范围为 (0001h*16+0h)~(0001h*16+ffffh)=0010h~1000fh ``` ## **同一段地址,不同的分配方案** 例子:10000H~100FFH这一段地址 方案1: 10000H~100FFH单元可以组成一个段 起始地址(基础地址)为10000H,他的段地址1000H 除以16即右移一位(10000H段地址取值最大1000H最小1H),大小为100H 方案2: 10000H~1007FH单元可以组成一个段 1008FH~100FFH单元可以组成一个段 起始地址为10000H和10080H,段地址为1000H和1008H,大小均为80H 开始的偏移都是0,后面的偏移分别都是7F 10000H的偏移地址=10000H-1000H\*16=10000H-10000H=0H 1007FH的偏移地址=1007FH-1000H\*16=1007FH-10000H=7FH 10080H的偏移地址=10080H-1008H\*16=10080H-10080H=0H 100FFH的偏移地址=100FFH-1008H\*16=100FFH-10080H=7FH ![](https://img.kancloud.cn/44/37/4437030f3f488a0e9c10bfc3e30243c3_827x357.png) 乘以16必然是16的倍数,所以段地址的起始地址一定也是16的倍数 偏移地址位16位,16位地址的寻址能力为64k,所以一个段的长度为2^16=64k 在8086pc机中存储单元的地址用两个元素拉描述,即段地址和偏移地址 数据在21F60H内存单元中,对于8086pc机的描述: * 数据存在内存2000:1F60单元中 * 数据存在内存的2000段中的1F60H单元中