处理器在执行上述段间转移指令向目标代码段实施转移过程中般至少要经过如下步骤:
(1)判断目标地址指针内选择子指示描述符是否为空描述符空描述符是GDT中第0个描述符是个特殊描述符目标代码段描述符不能为空描述符也即选择子高14位不能为0
(2)从全局或局部描述符表内读出目标代码段描述符由选择子内TI位确定使用全局描述符表还是局部描述符表
(3)根据情况检测描述符类型是否正确;调整RPL
(4)把目标代码段描述符内有关内容装载到CS高速缓冲寄存器
(5)判断目标地址指针内偏移是否越出代码段界限目标地址指针内偏移必须不超过目标代码段界限
(6)装载CS段寄存器和指令指针寄存器EIP;CPL存入CS内选择子RPL字段
上述步骤只是对转移过程简单介绍说明实际动作还要复杂在把目标代码段描述符内有关内容转载到CS高速缓冲寄存器时还要进行如下保护检测其中DPL表示目标代码段描述符特权级:
(1)对于非致代码段要求CPL=DPLRPL<=DPL;对于致代码段要求CPL>=DPL
(2)代码段必须存在即描述符中P位必须是1
通常描述符特权级DPL规定了对应段特权级如果描述符描述是数据段那么DPL就规定了访问该数据段最外层特权级;如果描述符描述是代码段那么DPL就规定了执行该代码段所需要CPL但从上述装载CS高速缓冲寄存器时进行保护检测可见对于致代码段却要求CPL>=DPL,也就是说致代码段描述符中DPL规定了可以转移到致代码段最内层特权级于是3级可以转移到任何致代码段而0级只允许转移到DPL等于0致代码段致代码段描述符内DPL这种解释正好和正常DPL解释相反
致可执行段是种特别段这种存储段为在多个特权级执行提供对子例程共享支持而不要求改变特权级例如通过把数值库例程放在致代码段中可以使区别级执行共享数值库例程这样任何特权级可以使用段间指令库中例程并在者所具有特权级执行该例程
最新评论