存储器分段

1.首先,什么是地址? 

        在内存中,每个存储单元相当于一个房间,而地址就是房间号。

        就好比你去酒店,酒店里一个一个包间就是一个个空间,这个空间就是内存单元。而酒店每个包间上的门牌号就相当于该内存单元的地址。也叫物理地址。

2.为什么要分段?

        这里基于80x86来讲解。

        因为80x86CPU提供的地址线为20根,所以寻址空间可达2的20次方个,也就是1MB的大小,用5位16进制的数码表示范围为00000H~FFFFFH。也就是说,这个酒店一共有1MB个包间,每个包间的门牌号就是从00000H~FFFFFH。

        然而,80x86CPU的地址寄存器(BX,BP,SP,SI,DI,IP,CS,DS,ES,SS)都是16位的,如果直接从这些寄存器中发出信号,那么寻址空间只能达到2的16次方,也就是64KB。就是说只能标识00000H~0FFFFH个包间,剩下的10000H~FFFFFH个包间居然没有门牌号!显然这是不可以的,因此我们要对内存进行分段。

3.怎么分段?

        将存储器划分为若干个逻辑段,每段最大64K个字节单元。逻辑段的大小可变,每段最少16个字节单元,也可以100个,1000个等等。意思就是对包间进行分组,每组最多64K个包间,最少16个包间。

        这样,段内单元的地址可用4个16进制的数码表示,称为偏移地址。也就是说,在每组包间中,每个包间的房间门牌号用4位16进制数表示,该组的房间门牌号就叫做偏移地址。在这里需要注意一个问题,是该组的房间门牌号,必须是该组的房间门牌号。先记住这个,下面会详细地讲。

        这里回到刚刚讲的00000H~FFFFFH(包间门牌号),这些门牌号(地址)是物理地址:

                              

        上图所示的是部分存储单元,其中“7B040H”和“FFFF0H”为两个段首地址,就是两组包间中第一个包间的门牌号(物理地址),而“7B041H”和“FFFF1H”(图中未给出,是“FFFF0H”的下一个单元)是两组包间中第二个包间的门牌号(物理地址)。以此类推,就有“7B042H、7B043H、7B044H......”“FFFF2H、FFFF3H、FFFF4H......”就是第三、四、五等等个包间的门牌号,也就是第三、四、五等等个存储单元的物理地址。

        计算机里每个段的首地址的末尾是0;也就是每组包间中,第一个包间的门牌号末尾是0。

        因此,省去末尾0,就可以用4位16进制的数来表示每个段的首地址,也就是16位2进制数,这样就对应了80x86的16位地址寄存器。于是,我们用段寄存器(CS,DS,ES,SS)来存放这些段的首地址。也就是各个段的起始地址。

  • 18
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值