WEB开发网
开发学院软件开发汇编语言 汇编的任务状态段和控制门 阅读

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

 2007-11-13 09:31:23 来源:WEB开发网   
核心提示:<二>门描述符除存储段描述符和系统段描述符外,还有一类门描述符,汇编的任务状态段和控制门(2),门描述符并不描述某种内存段,而是描述控制转移的入口点,门内的偏移就是对应代码段的人口点的偏移,中断门和陷阱门只有在中断描述符表IDT中才有效,这种描述符好比一个同向另一代码段的门,通过这种门

<二>门描述符

除存储段描述符和系统段描述符外,还有一类门描述符。门描述符并不描述某种内存段,而是描述控制转移的入口点。这种描述符好比一个同向另一代码段的门。通过这种门,可实现任务内特权级的变换和任务间的切换。所以,这种门描述符也称为控制门。

1.门描述符的一般格式

门描述符的一般格式如下图所示。门描述符只有位于描述符内偏移5的类型字节与系统段保持一致,也由该字节标示门描述符和系统段描述符。该字节内的P和DPL的意义与其它描述符种中的意义相同。其它字节主要用于存放一个48位的全指针(16位的选择子和32位的偏移量)。

门描述符 m+7 m+6 m+5 m+4 m+3 m+2 m+1 m+0
Offset(31...16) Attributes Selector Offset(15...0)
门描述
符属性
Byte m+5 Byte m+4
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
P DPL DT0 TYPE 000 Dword Count

根据上图给出的门描述符的结构,可定义如下的门描述符结构类型:

    GATE     STRUC      ;门结构类型定义
    OFFSETL  DW      0  ;32位偏移的低16位

    SELECTOR DW      0  ;选择子
    DCOUNT   DB      0  ;双字计数字段
    GTYPE    DB      0  ;类型

    OFFSETH  DW      0  ;32位偏移的高16位
    GATE     ENDS

利用门描述符结构类型GATE能方便地在程序中说明门描述符。例如,下面的门描述符SUBRG描述一个386调用门,门内的选择子是10H,入口偏移是123456H,门描述符特权级是3,双字计数是0。

    SUBRG    GATE  <3456,10H,,8CH+60H,12H>

从上述描述符类型的列表中可见,门描述符又可分为:任务门、调用门、中断门和陷阱门,并且除任务门外,其它描述符还各分成286和386两种。

2.调用门

调用门描述某个子程序的入口。调用门内的选择子必须实现代码段描述符,调用门内的偏移是对应代码段内的偏移。利用段间调用指令CALL,通过调用门可实现任务内从外层特权级变换到内层特权级。

在上图所示的门描述符内偏移4字节的位0至位4是双字计数字段,该字段只在调用门描述符中有效,在其它门描述符中无效。主程序通过堆栈把入口参数传递给子程序,如果在利用调用门调用子程序时引起特权级的转换和堆栈的改变,那么就需要将外层堆栈中的参数复制到内层堆栈。该双字计数字段就是用于说明这种情况发生时,要复制的双字参数的数量。

3.任务门

任务门指示任务。任务门内的选择子必须指示GDT中的任务状态段TSS描述符,门中的偏移无意义。任务的入口点保存在TSS中。利用段间转移指令JMP和段间调用指令CALL,通过任务门可实现任务切换。

4.中断门和陷阱门

中断门和陷阱门描述中断/异常处理程序的人口点。中断门和陷阱门内的选择子必须指向代码段描述符,门内的偏移就是对应代码段的人口点的偏移。中断门和陷阱门只有在中断描述符表IDT中才有效。关于中断门和陷阱门的区别将在以后的文章中论述。

上一页  1 2 3 4  下一页

Tags:汇编 任务 状态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接