在8086系统中,访问存储器的地址码由段地址和段内偏移地址两部分组成。为什么会这样而不是直接用一个寄存器表示呢?举个例子,在16位CPU中,有20位地址线,也就是说可访问的地址空间为2^20=1M,但是CPU只有16位,相应的寄存器也只有16位,所以寄存器可表示的最大的数值为2^16=65536=64K<1M的,所以必须采用分段的方式来寻址了。段寄存器用来存放各分段的逻辑基值,并指示当前正在使用的4个逻辑段,包括代码段寄存器CS、堆栈段寄存器SS、数据段寄存器DS和附加段数据寄存器ES。
1,代码段寄存器CS(Code Segment):存放当前正在运行的程序代码所在段的段基值,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供。
2,数据段寄存器DS(Data Segment):指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基值。
3,堆栈段寄存器SS(Stack Segment):指出当前堆栈的底部地址,即存放堆栈段的段基值。
4,附加段寄存器ES(Extra Segment):指出当前程序使用附加数据段的段基址,该段是串操作指令中目的串所在的段。