80286时cpu里寄存器都是16(可访问0x0000-0xFFFF的内存地址)位的,要访问1MB的内存空间(0x00000-0xFFFFF)是不够的。为此提出了逻辑地址的概念。
逻辑地址是用段寄存器(CS,DS,ES,SS,FS,GS)和偏移地址寄存器(DI,SI,BX,IP)来表示的。将1M的内存分成16个段,每个段为64KB,16X64KB=1MB。
如80000h:0000h可以表示成8000h:0000h,即逻辑地址为20位。
又如CS=8A00h IP=001Bh
那么将要执行的代码地址 8A000h+001Bh=8A01Bh,所以有时段的地址不一定0000,1000,2000...;F000开头的。
只有是在1M地址内,段的开始地址segstart和偏移量offset必须满足:
1> segstart+offset<=0xFFFFFh
2> offset <=0xFFFFh