汇编的任务状态段和控制门

每个任务有一个任务状态段TSS,用于保存任务的有关信息,在任务内变换特权级和任务切换时,要用到这些信息。为了控制任务内发生特权级变换的转移,为了控制任务切换,一般要通过控制门进行这些转移。本文将介绍任务状态段和控制门。

<一>系统段描述符

系统段是为了实现存储管理机制所使用的一种特别的段。在80386中,有两种系统段:任务状态段TSS和局部描述符表LDT段。用于描述系统段的描述符称为系统段描述符。

1.系统段描述符的格式

系统段描述符的一般格式如下表所示。

系统段
描述符
m+7 m+6 m+5 m+4 m+3 m+2 m+1 m+0
Base(31...24) Attributes Segment Base(23...0) Segment Limite(15...0)
系统段
描述符
的属性
Byte m+6 Byte m+5
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
G X 0 AVL Limit(19...16) P DPL DT0 TYPE

与存储段描述符相比,它们很相似,区分的标志是属性字节中的描述符类型位DT的值。DT=1表示存储段,DT=0表示系统段。系统段描述符中的段基地址和段界限字段与存储段描述符中的意义完全相同;属性中的G位、AVL位、P位和DPL字段的作用也完全相同。存储段描述符属性中的D位在系统段描述符中不使用,现用符号X表示。系统段描述符的类型字段TYPE仍是4位,其编码及表示的类型列于下表,其含义与存储段描述符的类型却完全不同。

系统段
类  型
类型编码 说      明
0 未定义
1 可用286TSS
2 LDT
3 忙的286TSS
4 286调用门
5 任务门
6 286中断门
7 286陷阱门
 
系统段
类  型
类型编码 说      明
8 未定义
9 可用386TSS
A 未定义
B 忙的386TSS
C 386调用门
D 未定义
E 386中断门
F 386陷阱门

从上表可见,只有类型编码为2、1、3、9和B的描述符才是真正的系统段描述符,它们用于描述系统段LDT和任务状态段TSS,其它类型的描述符是门描述符。利用前文定义的存储段描述符结构类型DESC仍能方便地在程序中说明系统段描述符。需要注意的是,系统段描述符的选择子不能用来读写系统段,要想读写系统段,必须使用别名技术。

2.LDT段描述符

LDT段描述符描述任务的局部描述符表段。例如:下面的描述符LDTABLE描述一个局部描述符表段,基地址是654321H,以字节为单位的界限是1FH,描述符特权级是0。

    LDTABLE  DESC  <1FH,4321H,65H,82H,,>

LDT段描述符必须安排在全局描述符表中才有效。在装载LDTR寄存器时,描述符中的LDT段基地址和段界限等信息被装入LDT段描述符高速缓冲寄存器中。

3.任务状态段描述符

任务状态段TSS用于保存任务的各种状态信息。任务状态段描述符描述某个任务状态段TSS描述符分为286TSS和386TSS两类。TSS描述符规定了任务状态段的基地址和任务状态段的大小等信息。例如,下面的描述符TempTask描述一个可用的386任务状态段,基地址是123456H,以字节为单位的界限是104,描述符特权级是0。

    TempTask  DESC  <104,3456H,12H,89H,,>

在装载任务状态段寄存器TR时,描述符中的段基地址和段界限等信息被装入到TR的高速缓冲寄存器中。在任务切换或执行LTR指令时,要装载TR寄存器。

TSS描述符中的类型规定:TSS要么为“忙”,要么为“可用”。如果一个任务是当前正执行的任务,或者是用TSS中的链接字段沿挂起任务链接到当前任务上的任务,那么该任务是“忙”的任务;否则该任务为“可用”任务。

利用段间转移指令JMP和段间调用指令CALL,直接通过TSS描述符或通过任务门可实现任务切换。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索avl
, 存储
, 寄存器
, 系统
, 类型
, 描述
, 状态
, ldt
, 操作系统tss
, 任务
, 描述符
, 系统盘符
, 属性描述符

汇编程序的任务是、汇编程序的任务、内部控制制度汇编、arm汇编控制led实验、汇编编写按键控制led,以便于您获取更多的相关知识。

时间: 2024-09-16 18:13:17

汇编的任务状态段和控制门的相关文章

调试-【汇编】伪指令和段寄存器不是 一 一对应的吗?

问题描述 [汇编]伪指令和段寄存器不是 一 一对应的吗? 比如 assume ds:data , cs:code code segment start : mov ax,1H code ends data segment db '1111' data ends end start :调试的结果是 ![图片说明](http://img.ask.csdn.net/upload/201508/04/1438693132_453028.png) 解决方案 解决方案二: 程序中ds并没有指向data段,你

VS2008中有无类速一些杀毒软件中三状态树型控件?

问题描述 各位高手,请问在vs2008中有无类似一些杀毒软件中三状态树型控件?即在树型控件中的每一个节点增加一个具有checkedbox功能?在一些介绍中,vs2008增加了大量的控件,但进入vs2008年却没有发现有什么新控件?这是什么原因? 解决方案 解决方案二:Web方面有三态的http://www.intersoftpt.com/

汇编教程之树型视图控件

本课中,我们将学习如何使用树型视图控件.另外还要学习如何在树型视图中完成拖-拉动作,以及如何使用图象列表. 理论: 树型视图是一种特别的窗口,我们可以使用它一目了然地表示某种层次关系.譬如象在资源管理器中左边窗口中的就是树型视图.您可以调用CreateWindowEx来创建树型视图,传递一个类名""SysTreeView32"",或者您也可以把它放到一个对话框中去.不要忘了在您的代码中加入InitCommonControls函数. 树型视图有几种特有的风格.下面是几

vb net为什么窗体编辑状态看不见控件

问题描述 拿到一个既存工程,能编译能正常运行.但是,编辑环境中看不到窗体上的控件(如编辑框,按钮等).这些控件里有自定义控件.敬请各位大侠指点,在线等候中....... 解决方案 解决方案二:这个既存工程是哪里来的,找到编代码的人问问这样是否正常现象很有可能为了图省事,自定义控件根本没有注册成COM组件,仅仅是代码里动态加载出来显示解决方案三:COM组件的说法好像有点问题,应该是OCX插件吧就是在工具箱里能看到吗,是否在设计器里能看到它解决方案四:那你要看是不是代码里动态添加的控件解决方案五:是

Android编程实现控件不同状态文字显示不同颜色的方法_Android

本文实例讲述了Android编程实现控件不同状态文字显示不同颜色的方法.分享给大家供大家参考,具体如下: 方式一: 第一要选择的控件 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/close_time_display" android:layout_marginRight="20

汇编教程:控制寄存器和系统地址寄存器

80386控制寄存器和系统地址寄存器如下表所示.它们用于控制工作方式,控制分段管理机制及分页管理机制的实施. 控 制 寄存器 CRx BIT31 BIT30-BIT12 BIT11-BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CR0 PG 0000000000000000 ET TS EM MP PE CR1 保留 CR2 页故障线性地址 CR3 页目录表物理页码 000000000000 BIT47-BIT16 BIT15-BIT0 全局描述符表寄存器GDTR 基地址 界限 中

详解ASP.NET的四种状态

这些状态的原理对于做.NET开发非常重要.现在详细解说一下. 视图状态:视图状态就在大家身边不知道大家是否注意.ASP.NET是基于服务其处理事件 的.当服务器处理完事件时,再返回本窗体时,如果没有视图状态,原来的数据将不会在有 .这样说也许会晕.举个列子,比如有一个网站需要你注册成为会员.当你填完信息,(一 般来说页面会转向别的地方)这里为了说明问题,我们让他返回原来的页面继续操作,如果 没有视图状态,则你以前填的数据都没有了.如果有视图状态,则原来的数据还在.试图状 态在一些时候很有用.比如

6.1 传统控件

在上一课的表5.1已经列出了Windows的传统控件及其对应的控件类.在这些控件中,读者应该重点掌握命令按钮.选择框.单选按钮.编辑框.列表框和组合框.   .1.1 传统控件的控件通知消息 控件通过向父窗口发送控件通知消息来表明发生了某种事件.例如,当用户在按钮上单击鼠标时,按钮控件会向父窗口发送BN_CLICKED消息.传统控件的通知消息实际上是通过WM_COMMAND消息发给父窗口的(滚动条除外),在该消息的wParam中含有通知消息码(如BN_CLICKED)和控件的ID,在lParam

C++ Builder2006控件的安装方法

一.安装步骤: 1.拿到源码,要全部源码,不要那种只有部分源码的包. 2.找到BPK文件,如果只有DPK文件,那就用DPK2BPK程序(网上下载)生成一个BPK文件,如果生成失败,那就自己新建一个包(BPK或bdsproj),把DPK文件中包含的pas文件包含进去. 3.编译与安装. 二.注意事项: 1.Bpl包的重名问题,主要是不能重名,在Borland 与 system32下查找要安装的包的名字,如果找到全删除掉. 2.文件的重名问题,.pas.h.hpp.dcu.obj.lib.bpl.b