分段式分区方式
为什么会有段寄存器的存在:
一开始的因特尔8086cpu的数据总线宽度和地址总线宽度不一致,数据总线较低位,地址总线宽度可以做到比较大。
地址总线我们知道,如果位数少,那寻址范围就很小,所以会考虑比较大的地址总线宽度。
但是如果地址总线宽度大于数据总线会带来一些麻烦,ALU(算数逻辑单元)无法在单个指令周期里完成对地址数据的运算。
就是地址太长,我没法一次性算完。(类似于:让一个小学生算高中生的数学题)
那么这个时候英特尔想出了一个解决办法。
地址太长,那我就把地址弄短点。那怎么弄短呢?
段产生了,段寄存器就是。
在描述内存分段时,需要有如下段的信息:
1.段的大小;2.段的起始地址;3.段的管理属性(禁止写入/禁止执行/系统专用等)。
需要用8个字节(64位)存储这些信息,但段寄存器只有16位,因此段寄存器中只能存储段号(segment selector,也译作“段选择符”),再由段号映射到存在内存中的GDT(global (segment) descriptor table,全局段号记录表),读取段的信息。
通俗说就是段寄存器太小,不能够放很多信息,那么只能放一个段号,然后通过查表的方式读取段的信息。
段寄存器分为四种逻辑段:
1.代码段寄存器:CS
2.数据段寄存器:DS
3.堆栈段寄存器:SS
4.附加段寄存器:ES