8086/8088 cpu 物理地址需要20位寄存器来存储,但是其内部寄存器都是16位的,不能满足1M字节的寻址要求。为此,引入了“段”的概念。
将存储区分成若干段,每段最多为2^16(64K)字节。
一个存储单元的物理地址由段基址和偏移地址两部分构成,这两部分都是16位,可以分别存放于两个16位寄存器中,存放段基址的寄存器成为段寄存器,一个存储单元的物理地址等于:
物理地址=段基址X16+偏移地址
一个存储单元的物理地址是唯一的,但其段基址和偏移地址不是唯一的,换言之,一个存储单元的地址可用多组段基址和偏移地址来表示。
通常,一个程序可以分为代码段、数据段、堆栈段和附加数据段。
代码段存放指令代码,代码段的段基址存于代码段寄存器(CS),偏移地址存于指令指针(IP);
进行堆栈操作时,段基址来源于堆栈段寄存器(SS),偏移地址来源于堆栈指针寄存器(SP) ;
存储一个操作数时,段基址存放于数据段寄存器(DS)或附加段寄存器(ES),偏移地址可以通过多种方法得到。