2 ty7zz ty7zz 于 2016.05.05 16:48 提问

在保护模式的无特权级变换的转移

在保护模式下采用 JMP 和 RETF 指令进行任务内无特权级变换的转移.最好是能给出程序和说明,而不是到处引用,新手勿扰。

4个回答

top2s
top2s   2016.05.07 14:51
已采纳

用 JUMP、CALL、RETF等指令进行相应段的转移。在用到 CALL 指令时,使用堆栈,以使得在调用 CALL时,系统对 CALL 当前的程序运行点进行压栈保存,在遇到 RETF 返回指令时,进行弹栈返回。

df45af
df45af   2016.05.07 17:44

(1)实模式下的初始化,包括对GDT和演示任务LDT的初始化,装载GDTR;
(2)从实模式切换到保护模式,处于0特权级;
(3)装载LDTR,并设置堆栈;
(4)利用段间转移指令JMP实现从代码段K到同级代码段L的转移;
(5)利用段间调用指令CALL调用同级代码段C中的子程序D显示字符串信息;
(6)利用段间调用指令CALL调用同级代码段C中的子程序H把十六进制数转换成对应的ASCII码;
(7)再利用段间调用指令CALL调用同级代码段C中的子程序D显示字符串信息;
(8)利用段间转移指令JMP实现从代码段L到代码段K的转移;
(9)从保护模式切换到实模式;
(10)在实模式下结束程序。
该实例的逻辑功能是用十六进制数的形式显示代码段L的段界限的值。源程序如下:
;名称:ASM3.ASM
;功能:演示任务内无特权级变换的转移
;编译:TASM ASM3.ASM
;连接:TLINK ASM3.OBJ

INCLUDE 386SCD.INC

GDTSeg SEGMENT PARA USE16 'GDT' ;全局描述符表数据段(16位)

GDT LABEL BYTE ;全局描述符表
DUMMY Desc <> ;空描述符
Normal Desc ;规范段描述符
CodeK Desc ;代码段K的描述符
LDTable Desc ;局部描述符表段的描述符

GDTLen = $-GDT ;全局描述符表长度

Normal_Sel = Normal-GDT ;规范段描述符选择子
CodeK_Sel = CodeK-GDT ;代码段K的选择子
LDT_Sel = LDTable-GDT ;局部描述符表段的选择子

GDTSeg ENDS ;全局描述符表段定义结束

LDTSeg SEGMENT PARA USE16 'LDT' ;局部描述符表数据段(16位)
LDT LABEL BYTE ;局部描述符表
;代码段L的描述符
CodeL Desc
;代码段C的描述符
CodeC Desc
;显示缓冲区段描述符
VideoBuf Desc
;LDT别名段描述符(DPL=3)
ToLDT Desc
;显示信息缓冲区数据段描述符(DPL=3)
MData Desc
;堆栈段描述符
StackS Desc

LDTLen

sl_18500
sl_18500   2016.05.06 11:01

保护模式编程——保护的详尽意义:通过调用门转移特权级
http://www.zdh1909.com/html/Verilog/29918.html

dsd45
dsd45   2016.05.07 17:27
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!