每个段寄存器可以确定一个段的起始地址
- 代码段 CS**(Code Segment)**
代码段存放当前正在运行的程序
段地址放在CS中,将段中第一条指令的偏移地址放在IP中,这样CPU就将执行定义的代码段中的指令,
- 堆栈段 SS(Stack Segment)
堆栈段定义了堆栈的所在区域
段地址放在SS中,将栈顶单元的偏移地址放在SP中
- 数据段 DS(Data Segment)
数据段存放当前运行程序所用的数据
- **附加段 ES(Extra Segment),
附加段是附加的数据段,它是一个辅助的数据区,也是串处理指令的目的操作数存放区。在80386及其后继的80x86中,除上述4个段寄存器外,又增加了2个段寄存器FS和GS,它们也是附加的数据段寄存器,所以8086~80286的程序允许4个存储段,而后继的80x86程序可允许6个存储段。
一般情况下,各段在存储器中的分配是由操作系统负责的。每个段可以独立地占用小于或等于64 KB的存储区,如下图所示。
在80x86中,段寄存器和与其对应存放偏移地址的寄存器之间有一种默认的组合关系,如下表所示:
8086/8088、80286:
80386及其后继机型:
对于段寄存器的存储访问规则
- CS段寄存器不能作为目标操作数
- 不能显示地改变代码段寄存器CS的值
- 不能把立即数直接传送到段寄存器
- 数据直接送入段寄存器是非法的