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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
保护模式编程——保护的详尽意义:通过调用门转移特权级
保护模式及其编程——保护机制 摘要:在汇编语言的编程和操作系统的编写过程中,我们经常能听说到“保护模式”这个名词。为什么要叫“保护模式”呢?保护 二字的含义何在?本文主要探讨,“保护模式”下面各种具体的保护机制,这些保护机制产生的原因和具体的影响。阅读本文之前,读者需要了解基本的处理器相关知识,知道分段和分页机制的基本原理,熟悉一些基本的数据结构(段选择符、描述符、GDT、页表、CR系列寄存器等)
保护模式特权级变换总结
特权级的东西很乱,我决定今天花一点时间好好的整理一下,我一步一步慢慢开始,比较郁闷的是还不知道理解得正确不正确,先写着吧: 首先,特权级别一共有四个特权级别(0-3),然后呢,数字越小,级别越高。 其次,处理器通过CPL,DPL,RPL来进行特权级管理。 接下来,我想分为2种模块来总结,之前,我一直没把特权级访问和特权级转移分开理解,这里我想分成2块来总结。     第一种:访问。
保护模式中特权级
学习过程中遇到一个对保护模式总结很好的Blog,转来分享一下。 先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4个级别,0,1,2,3,数字越小表示权限越高。如图:    较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说
3.保护模式5----特权级概述(转)
学习过程中遇到一个对保护模式总结很好的Blog,转来分享一下。 先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4个级别,0,1,2,3,数字越小表示权限越高。如图:    较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说
32位保护模式学习小结(2)---任务的隔离和特权级保护
任务,任务的LDT和TSS 程序是记录在载体上的指令和数据,其正在执行中的一个副本,叫做任务(Task)。而用户程序就是任务,内核程序就是操作系统的缩影。LDT我们把所有的段描述符都放在GDT中。
x86 CPU的操作模式 保护模式下的特权级
32位Intel处理器拥有三种基本模式:         ****保护模式:纯32位保护执行环境。该模式拥有一个子模式,虚拟8086模式:         ****虚拟8086模式:是运行在保护模式中的实模式,为了在32位保护模式下执行纯16位实模式程序。它不是一个真正的CPU模式,还属于保护模式。         ****实模式:纯16位无保护执行环境。     保护模式下的特权级
保护模式总结(二)——任务和特权级
32位保护模式相对实模式来说,除了内存保护,还多了一大功能,那就是多任务。今天总结的内容就从多任务入手。        程序本质上是指令和数据,任务是程序为了完成某个特定的工作而执行的一个副本。        这是抽象的描述,任务在计算机中具体是由什么描述的呢?下面引入LDT和TSS的概念。        LDT:局部描述符表Local Descriptor Table。      
80x86保护模式下特权级转移
80386搞的这个保护模式,最大的特点就是加入了安全检查,不再像实模式下那样,程序代码可以随意jmp,随意call了,受到了特权级的约束,关于特权级的概念我看无数的资料,各种大牛的解释,反复理解了好多次,这回我要再次整理一下。 CPL:当前CPU正在处理的代码段的特权级,存放在当前cs寄存器和ss寄存器的低2位; DPL:要跳转过去的目标代码段的特权级,规定了能访问该段的特权级的标准,
特权级代码段之间的转移---任务切换
一、任务切换  利用段间转移指令 JMP 或者段间调用指令 CALL,通过任务门或直接通过任务状态段,可以切换到别的任务。此外,在中断/异常或者执行 IRET 指令时也可能发生任务切换。需要注意的是,因为 RET 指令的目标地址只能使用代码段描述符,所以,不能通过 RET指令实现任务切换。 1.直接通过TSS进行任务切换 段间转移指令 JMP 或段间调用指令 CALL 所含指针的
特权级——保护模式的特权级检查 DPL,RPL,CPL, 一致代码段,非一致代码段
特权级是保护模式下一个重要的概念,CPL,RPL和DPL是其中的核心概念,查阅资料无数,总结如下。  一、CPL、RPL、DPL简单解释     CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs寄存器的低两位。     RPL说明的是进程对段访问的请求权限(Request Privilege Level),是对于段