80x86中除8086/8088只能在实模式下工作外,其他的CPU均可在实模式或保护模式下工作。
(1)存储器的分段
实模式下允许的最大寻址空间为1 MB。8086/8088的地址总线宽度为20位,因而其最大寻址空间正好是1MB。在1MB的存储器里,每个存储单元都有一个唯一的20位地址,称为物理地址。而对于其他微处理器在实模式下只能访问前1 MB的存储器地址。
实模式在16位字长的机器里怎么提供20位地址:
将1 MB主存空间划分为若干段,每个段的最大长度为64 KB单元,这样段内地址可以用16位表示。如果能再提供段的20位起始地址,那么通过这两个地址就可以访问段内任何一个存储单元。
段基值(Segment Base Value):16位段寄存器的值,存放的是20位段起始地址的高16位。
段基地址或段基址(Segment Base Address):将段基值左移4位后(即末尾加4位二进制数0),就得到一个20位的段起始地址。显然,段基址应该为xxxx0H,其低4位二进制数为0,即能被16整除的主存物理地址才可作为段基址。
偏移地址:是一个主存单元与所在段的段基址之间的字节距离。通常由CPU按指令的寻址方式计算得到或由指令指针IP提供,又称为有效地址。
当CPU访问某个主存单元时,必须指明由哪个段寄存器提供段基值,同时给出偏移地址。然后将16位段基值左移4位后与16位偏移地址相加,形成20位主存单元的物理地址,这一过程可以表示如下:
实模式存储单元获取物理地址过程如下图所示:
虽然每个存储单元只有唯一的物理地址,但它却可对应不同的段基值和偏移地址合成。