段寄存器
段寄存器一共有四个,分别是CS(Code Segment)、DS(Data Segment)、ES(Extra Segment)、SS(Stack Segment)。 CS:代码段寄存器,存放代码段基地址。 DS:数据段寄存器,存放数据段段基地址。 ES:附加段寄存器,存放附加段段基地址。 SS:堆栈段寄存器,存放堆栈段段基地址。 这四个段前三个都比较正常,来看一个例题理解一下段寄存器的作用: 最后一个堆栈寄存器就有点特殊了,这源于堆栈本身的特性决定的,学过数据结构的都知道,堆栈的特点是先进后出,只操作栈顶指针。也就是说,堆栈就像你收纳衣服的箱子,衣服就是数据,你放衣服的时候直接放在原有的衣服的上面,你想拿出来箱子底部的衣服的话,就要先把上面的拿出来才行。 下面来看一道例题: SS的值就相当于箱子的盖子,你放衣服最多放到与盖子的位置重合; SP叫做栈顶指针,相当于最上面的那件衣服的位置; 栈底就相当于箱子底部,其实也有一个叫做栈底指针的BP。只不过本题没有涉及。(注意SP和BP的值都是相对SS的偏移地址)。 这样就很明确了,当SP=BP,也就是说你放的最上面的衣服与箱底重合,那不就是没放衣服嘛,所以栈是空的。 相对的思考一下什么时候栈满?
逻辑段与物理段的关系
简单来说,逻辑段是人们规定的,不唯一。物理段是唯一存在的。 比如你家住在翻斗花园三单元,你妹妹家当然和你一样,小明家住也住在翻斗花园三单元,小懒家住在青青草原。这些就是逻辑段。 现在同学来找你耍,你会跟他说我家在某某省,某某市,上海路306号,这个就是物理段。 所以逻辑段可以不相连(你和小懒),也可以重合(你和小明),也可以完全重合(你和妹妹)。 每个单元对应唯一一个物理地址就不用解释了; 一个内存单元可以同时处于两个逻辑段,就相当于上海路306号,即属于你家,也属于你妹妹的家。 一个内存单元可以在不同的时刻属于相同(不同)类型的段,就相当于你去租房子,在这个时刻属于你的房子,下一时刻或许你不租了,就属于其他人的。
逻辑与物理的根本区别就在于一个是人为规定的,一个是现实唯一存在的,逻辑地址相当于现实地址的一种映射。类比着身边存在的例子去理解会比较深刻一点。
|