当前位置:首页 > 网络编程 > 软件语言 > 汇编 > 控制转移(2)

控制转移(2)

点击次数:41 次 发布日期:2008-11-10 08:14:23 作者:源代码网
源代码网推荐
广告载入中
控制转移(2):2.关于实例三的说明 有些步骤的实现方法已在前面的实例中做过介绍,下面就任务内无特权级变换的转移和使用局部描述符LDT等作些说明:(1)实模式下初始化LDT 演示任务使用了局部描述符表LDT,本实例中该LDT在实模式下初始化(当然,也可以在使用LDT前的保护模式初始化)。为了简便,LDT中各描述符的界限和属性值在定义时预置,利用一个子程序设置各段的段基地址。为方便起见,在定义时把各段的段值安排在相应描述符的段基地址低16位字段中。由于实例中各段在实模式下定位(这是因为程序是从实模式下启动执行的),所以把段值乘以16就是对应的段基地址。(2)装载LDTR寄存器 在使用LDT之前,还要装载局部描述符表寄存器LDTR。本实例中的如下两条指令用于装载LDTR: mov ax,LDT_SEL lldt ax LLDT指令是专门用于装载LDTR的指令。该指令的操作数是对应LDT段描述符的选择子。根据该选择子,处理器从GDT中取出相应的LDT段描述符,在进行合法性等检查后,LDT段描述符的基地址和界限等信息被装入LDTR的高速缓冲寄存器中。由于要引用GDT,所以不能在实模式下装载LDTR。在“操作系统类指令”一文中将对LLDT指令作详细说明。(3)利用段间转移指令JMP实现任务内无特权级的转移 在本实例中进入保护方式后,特权级是0。通过如下段间直接转移指令实现从代码段K到代码段L的转移: JUMP16 CodeL_Sel,Virtual2 其中,选择子CodeL_Sel是对应代码段L的描述符的选择子。该描述符在LDT中,所以选择子中的描述符表指示位TI为1。描述符特权级是0,表示对应代码段的特权级是0,选择子中的请求特权级RPL也是0。目标代码段不是一致代码段,所以在CPL=DPL,RPL
软件开发网 www.mscto.com

源代码网推荐

源代码网供稿.
上一篇: 控制转移(1)  下一篇: 80386的异常类型
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华