段的概念来源于8086处理器,8086处理器为16位处理器,内部寄存器为16位,地址总线为20位,所以,20位地址总线能够寻址1M的内存空间,内存的地址是用20个数据位来表示,但对于内部的16位寄存器来说,无法容纳20位的地址,所以CPU把内存划分为最大为64K的段,这样就能用16位寄存器来寻址这64K的空间了,通过把1M的内存空间划分为若干个64K的段,这样内部寄存器就能偶操纵整个1M的空间了。当然段的大小可以任意,只要不大于64K就行了。
CPU内部有四个段寄存器,CS,DS,SS,ES,用它们来存储内存中段的起始地址,因为内存地址是20位的,所以对于段的起始地址就有了一定的要求,20位中的最后四位必须是0,CS,DS,SS,ES这四个段寄存器在存储起始地址的时候只存储前16位,CPU在实际访问内存的时候会自动在段寄存器的末尾加上四个零(左移四位),构成实际内存中的起始地址。
访问内存采取段地址+偏移地址的方式,偏移地址一般存放在SI,DI,IP中,最大值为64K,也就是一个段的最大容量。
内存中的最小存储单元是1个数据位,但CPU在访问内存的时候是以字节、字,双字或者四字来访问的,给定一个地址,CPU可以访问一个字节,一个字,一个双字或者四字,当然,8086处理器一次最多只能访问一个字,386以后的处理器可以访问更多。