DOS保护模式接口(全).doc_第1页
DOS保护模式接口(全).doc_第2页
DOS保护模式接口(全).doc_第3页
DOS保护模式接口(全).doc_第4页
DOS保护模式接口(全).doc_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DOS 保 护 模 式 接 口 -DPMI 0.9 规范 中文版1.0 * 目 录 * 1 简介*2 关于保护模式程序的一般性提示2-1 虚拟DOS环境2-1-1 非虚拟方式2-1-2 半虚拟方式2-1-3 全虚拟方式2-2 描述符管理2-3 中断标志管理2-4 中断2-4-1 硬件中断2-4-2 软件中断2-5 虚拟内存与页锁定*3 模式和堆栈交换3-1 堆栈与堆栈交换3-1-1 保护模式堆栈3-1-2 已锁定的保护模式堆栈3-1-3 实模式堆栈3-1-4 DPMI主机0环堆栈3-2 预定义中断映射3-3 模式交换3-4 状态保存*4 错误处理*5 装载DPMI客户和扩展应用程序5-1 获得实模式到保护模式的交换入口指针5-2 调用实模式到保护模式的交换入口指针*6 中止保护模式程序的运行*7 模式检测*8 局部描述表描述符管理服务(LDT)8-1 分配一个LDT描述符8-2 释放一个LDT描述符8-3 描述符分段8-4 获得下一个选择符的增量8-5 保留子函数8-6 获得段基地址8-7 设置段基地址8-8 设置段位限制8-9 设置描述符存取权限8-10 创建代码段别名描述符8-11 获得描述符8-12 设置描述符8-13 分配特殊LDT描述符*9 DOS内存管理9-1 分配DOS内存块9-2 释放DOS内存块9-3 重设DOS内存块*10 中断服务10-1 获得实模式中断向量10-2 设置实模式中断向量10-3 获得处理器异常处理向量10-4 设置处理器异常处理向量10-5 获得保护模式中断向量10-6 设置保护模式中断向量*11 传输服务11-1 模拟实模式中断11-2 用远程返回结构调用实模式过程11-3 用内部返回结构调用实模式过程11-4 分配实模式回调地址11-5 释放实模式回调地址11-6 获得状态保存/存储地址11-7 获得实模式交换地址*12 获得版本号*13 内存管理服务13-1 获得空闲内存信息13-2 分配内存块13-3 释放内存块13-4 重设内存块*14 页锁定服务14-1 锁定线行区域14-2 解开线行区域14-3 将实模式区标注为可页化14-4 重新锁定实模式区14-5 获得页大小*15 按需求处理换页调整服务15-1 保留子函数15-2 将页面标注为需求页化替换页*16 物理地址映射*17 虚拟中断状态函数17-1 获得或禁用虚拟中断状态17-2 获得或激活虚拟中断状态17-3 获得虚拟中断状态*18 获得向量指定的API入口指针*19 调试寄存器支持19-1 设置调试监视定19-2 清除调试监视点19-3 获得调试监视定的状态19-4 重置调试监视点*20 其他APIS*21 对DOS扩展程序的提示21-1 初始化扩展应用程序21-2 安装API的扩展21-3 装载应用程序21-4 提供API扩展*1 简介 DOS保护模式接口的定义使DOS程序使用扩展内存成为可能,当然这必须在有PC体系结构的计算机(使用INTELX86系列芯片),且要在维持系统保护模式下才可行。DPMI定义了一组DOS和BIOS的可调用子功能。它们可以由保护模式的DOS程序组成。DPMI也定义了一组新的软件中断,功能号:INT-31H。保护模式下的DOS程序可以调用它们,这些中断主要的功能是帮助保护模式程序分配内存,修改描述符,调用实模式程序等等。能够支持虚拟DOS模式的操作系统,在不影响其系统安全的情况下,也应该有支持DPMI的能力。 在这篇文章中,实模式软件被定义为-在1M内存地址空间中运行,且使用段:偏移量寻址方式的那些代码。在很多DPMI的实例中,也可以让实模式软件运行在虚拟8086模式下。因为虚拟8086模式和实模式非常的接近,所以我们也将它考虑成实模式。 DPMI的服务仅对保护模式的程序可用。在实模式中运行的程序不能使用这些服务功能。保护模式程序在进入保护模式调用INT31之前必须使用在20页中描述的服务功能,所有的INT31H功能都会修改标志位和AX寄存器所有的其它寄存器在其不要返回数值的条件下都将被保留,未被支持的调用会在设置进位标志位后返回,如果INT31H设置了一个陷门,则中断B标志位就不能被任何INT 31H调用所改变,除非当内存管理与中断标志位管理调用发生时,所有的内存管理调用都能使用中断,中断标志位管理调用在被特别指定的情况下也能修改中断标志位,所有的INT31H的服务都是可重入的。 某些DPMI的实例能够运行80386的32位程序,当程序运行在32位模式下时,DMPI函数能将16位的寄存器用32位的扩展寄存器来代替。 在运行16位保护模式程序时32位寄存器的高段位会被忽略,DPMI服务是由被称为DPMI主机程序所提供的,使用这些服务的程序被称作DPMI客户,一般情况下DPMI客户有两种类型:1:扩展应用程序2:直接使用DPMI的应用程序绝大多数的DPMI应用程序都是扩展应用。扩展应用程序由一个扩展器来分界,DPMI客户和应用程序调用扩展器服务后即被客户程序编译成真正的DPMI调用。使用一个扩展应用程序的好处是很明显的,它可以让客户程序使用不只一个的DPMI主机服务,事实上我们建议扩展器用下列命令来搜寻扩展服务 。DPMI 。VCPI/EMS 。XMS 。TOP-DOWN(INT 15H) 一个扩展器能够提供一组API给应用程序,然后将其编译为真正的可以提供的服务,当主机扩展服务不足时在扩展器中的一个特殊的功能就必须为应用程序提供上述服务。 *图一 Figure 1. 图一 应用程序/扩展器/客户/主机/操作系统结构 +-+ | | | +-+ | | | | | | | 应用程序代码 | | | | | | | +-+ | | | | +-+ | | | 扩展器基地址 (包括 APIs) | | | | - | | | | DPMI | | | | 客 户 | | | +-+ | | | | VCPI | | | | 客 户 | | | +-+ | | | | XMS | | | | 客 户 | | | +-+ | | | | Top-down | | | | client | | | +-+ | | | +-+ +-+ | | | | | |-+ | | | | DPMI | | | 主机 | VCPI |-+ | | | | | | | | | |-| XMS |-+ | | EMS | | Top-down | | | | | (Int 15h) | +-+ +-+ | | | 操 作 系 统 (e.g. DOS) | | | +-+* 2 虚拟DOS环境 很多DPMI可以模拟虚拟DOS段。换句话说就是DOS接口环境提供给程序的接口并不是真实的操作系统接口。硬件中断,I/O与处理器异常都能被操作系统虚拟化。这就表示一个DPMI程序能够接收一个虚拟的键盘中断并且能从键盘控制端口处读虚拟的输入输出。 在这种环境下,真正的硬件中断都是被操作系统所管理的。对DPMI程序来讲,物理上的中断是不可见的。如果操作系统有这个功能,则它会映射一个虚拟的中断给DPMI程序,而DPMI并不知道这个中断是否是真实的,它也没有必要关心,从程序员的角度来看这个虚拟的中断就如同真实的中断一样。 操作系统同样会将输入输出中断控制器和其它设备虚拟化。DPMI的虚拟化功能提供了3种类型;2-1-1 非虚拟化 一般情况下,标准的单任务DPMI实例并不会虚拟化任何硬件设备,这些程序就好比在标准DOS的实模式下工作一样,在这种情况下,使用DPMI主机设备的扩展器服务功能会将保护模式的DOS调用转换成标准的DOS实模式调用,就是将处理器设置成实模式工作方式。2-1-2 半虚拟化 某些DOS环境会虚拟化硬件设备,提供程序虚拟内存或者其它需要某些硬件虚拟化的服务。在这些环境下,DPMI应用程序就只能运行在非特权级别上,就是通常所称的第4级别环。部分或全部硬件中断和I/O都会被虚拟化,虚拟内存将被支持,在这种情况下的实例中,页锁定服务通常被用来锁定中断和异常处理代码段。 ?2-1-3 完全虚拟化 这个环境将提供一个完全的模拟的DOS环境。而原始的操作系统的某些部分会与MS-DOS有些不同。在DPMI的这个实例下,所有的设备都会被虚拟化并且有某些扩展。一般情况下,页锁定服务会被这些实例所忽略因为所有的物理中断和I/O处理都会由操作系统来管理,程序即一直运行于一个非特权级的环上。2-2 描述符管理 因为保护模式的代码段不能被修改,所以这就需要程序在它想在代码段存储数据时分配一个特殊的数据描述符,在实模式下工作的段运算不能在保护模式下运行。某些调用返回描述符的有效范围。例如如果一个16位模式的程序分配了一个大于64K的内存块,则调用会分配连续的一系列描述符,每一个描述符都会有一个段限制,其中包含有这些块的剩余量。并且调用会返回在这些描述符序列的第一个描述符。要得到下一个选择符,则必须在程序中加上INT 31H 调用0003H的返回值。 为了与其他的老式系统兼容,有两个中断控制器的计算机就会将其中一个副控制器用BIOS重定向的办法映射到主控制器的范围内。例如在IBM AT兼容计算机上的IRQ2就会映射为IRQ9(中断71H)。在实模式下,这些系统的BIOS会将中断71H转换为INT-0AH和在副中断控制器上的EOI。需要在使用由BIOS重定向中断的包含模式程序会使用如下这些技术:2-3 中断标志位管理 POPF和IRET这两个指令并不能修改中断标志位,因为很多DPMI的实例都在IOPLDPL的模式下运行,只有执行CLI或者STI指令才能修改中断标志位。如下的代码会让中断失效: XXX; XXX;(在这之前中断都是有效的); PUSHF CLI XXX XXX POPF (中断失效了); 应当注意到有些DPMI的实例会为保护模式的DOS程序维持一个虚拟的中断状态,但当前中断标志位的值并不能反映虚拟中断的状态,既然如此保护模式的程序就应该使用虚拟中断状态服务来决定当前的中断标志位状态。 既然CLI和STI是特权级的指令,如果使用不当则他们可能会引起一个保护性的错误。DPMI的提供者也会模拟这些指令。由于在异常处理时会引起程序首部的混乱,所以SLI和CLI应当尽可能的少用,一般情况下,至少让他们应该在300个时钟周期之后才使用一次。 2-4 中断 保护模式程序能够对软件和硬件两种中断通过使用DPMI的获取和设置保护模式中断向量功能来设置陷井。从硬件设备发出的中断例如从时钟和键盘控制器中发出的中断总是首先能被映射,并且被保护模式的中断处理。如果保护模式没有处理到或是调用了前一个中断,那么这个中断会被映射到实模式。 当一个中断被映射到了实模式,EAX,EBX,ECX,EDX,ESI,EDI,EBP等寄存器和标志位都会从保护模式变到实模式,并且不能被选择。而段寄存器则留下没有定义的值,除非有API的翻译器将它重新定义为明确的实模式段地址。DPMI也会自动的为映射成实模式的中断设置堆栈。 2-4-1 硬件中断 中断控制器被映射到系统的预定义中断中。例如在一台IBM-AT兼容系统中,主中断控制就基于8号中断编程,而副中断控制则基于70中断编程。被虚拟化后的中断控制器可以被重新编程,而在保护模式中它们的基本设置可以用INT 31H 的0400H功能号来检查。 硬件中断过程及其所以的数据段都必须在它所属的固定内存段中。而能够被硬件中断陷井所涉及到的内存都必须被锁定。处理者也总是在以一个被锁定的堆栈中被调用,请参考12页。 就像在实模式中一样,硬件中断的处理者会被以禁止中断来调用。当IRET没有被存储在中断标志位时,硬件中断陷井必须在执行IRET前要执行一条STI指令或者中断仍然被禁止。2-4-2 软件中断 很多在实模式中执行的软件中断都不会反映出保护模式中断的陷井。但是有如下这些在实模式中调用的软件中断和保护模式下的软件中断有所关联它们是:INT ICH BIOS时钟中断 INT 23H DOS CTRL+C中断 INT 24H DOS严重错误处理中断 在实模式下,程序不应该在中断时被中止,如果程序在这点被中止的话,有可能会阻止DPMI主机的正常清除。在所有的软件中断中,只有INT 00H-07H能够在虚拟中断禁用的情况下被调用,称作非屏蔽中断,而其他的中断不会修改中断标志位的状态。称作可屏蔽中断。正如前面所讲的,在实模式下调用的软件中断不能映射出保护模式下的中断陷井,所以我们的程序就需要为这些中断加载一个监视实模式中断的陷井位。 2-5 虚拟内存与页锁定 在很多支持虚拟内存的DPMI实例的环境中,我们都有必要锁定那些很容易被其他程序影响到,而且是在DOS内部执行的内存块。这样做的原因很显然,DOS是一种不可重入的操作系统,当DOS很忙时,我们不可能要求它装载页面。 如果某个DPMI实例不会调用DOS读写虚拟内存到磁盘上,那么它就会忽略页锁定服务。一旦整个DPMI实例都被虚拟化,程序在执行当中页面错误就可以在任何一点被处理。然而,应当注意所有DPMI的应用程序都应该把代码段和数据段锁定,这些调用总是会在忽略它们的实例中被成功的返回。*3 模式和堆栈交换 这一节将把DPMI主机如何在保护模式和实模式之间交换和处理堆栈交换作一个简要的介绍。理解保护模式主机是如何维持客户原始状态,并且阻止堆栈数据被覆盖段寄存器被修改是非常重要的。 3-1 堆栈与堆栈交换 每一个DPMI实任务都将有4种不同类型的堆栈:它们是:应用程序级别环保护模式堆栈,页锁定保护模式堆栈,实模式堆栈和DPMI主机0环堆栈。 保护模式堆栈可以被看成是一个DPMI客户在其被保护模式进入指针调用进入保护模式时运行的一部分。 页锁定保护模式堆栈则是由DPMI服务器所提供用来模拟硬件中断,处理实模式回调用的。 而DPMI主机所提供的实模式堆栈通常是为客户程序数据段内存定位的。 0环堆栈是最高特权级别堆栈,只能由DPMI主机使用,而它可能有当前正在运行的程序的状态信息。 3-1-1 保护模式堆栈 这种模式的堆栈是一般情况下保护模式客户堆栈的工作方式。 DPMI客户的保护模式堆栈能在需要的时候将内存页解锁,在保护模式中被执行的软件中断能映射到这个堆栈中。 3-1-2 页锁定保护模式堆栈 在硬件INT-1CH,INT-23H,INT-24H,异常中断和保护模式中的实模式回调用中,DPMI主机会自动的把它们交换到页锁定保护模式堆栈中,当中断或者调用返回时主机会将其转换回到原来的保护模式堆栈。注意主机只能提供给页锁定堆栈4K的空间,堆栈交换的条件可以是在首次中断或者调用被映射到保护模式时进行并且在客户程序返回时被返回原堆栈,后续的嵌套中断或调用不会引起堆栈模式交换。软件中断不会自动的交换堆栈模式。 3-1-3 实模式堆栈 DPMI主机也可以为客户程序提供至少200个字节且一直锁定的实模式堆栈,而中断则映射成实模式使用传送服务的调用也能被映射到这种堆栈下,DPMI主机不会在DOS执行这个功能之前为在实模式下处理的硬件中断自动交换堆栈模式。 3-1-4 DPMI主机0环堆栈 DPMI主机会与其它DPMI任务一样使用一个堆栈,而DPMI客户程序却不能以任何方式来使用这个堆栈,这个堆栈有时可以用来在模式交换时存储状态信息。例如在原来的保护模式程序的SS:ESP处的数据在DPMI主机交换页面锁定保护模式时能被保存在0环堆栈中。 3-2 预定义中断映象 DPMI主机为保护模式用户的所有100H号中断都提供了中断向量。当DPMI客户初始化时,所有的中断向量都会指向自动把映射中断设置成实模式的那些代码(除了INT 31H 和INT 21H,AH=4CH)。当一个预定义的中断映射处理执行后,它即被交换到实模式去,并且保留EAX,EBX,ECX,EDX,ESI,EDI,EBP等寄存器和标志位,且在实模式下映射中断。而当实模式中断返回时,预定义中断映射代码就会将其交换回保护模式并且重新设置EAX,EBX,ECX,EDX,ESI,EDI,EBP和标志位的值。但是代码段寄存器和堆栈指针不会在两种模式之间传递。因此,任何想在段寄存器间传递的指针和信息都需要用一个DOS扩展程序来搭载。3-3 模式交换 一个客户有三种不同的方法可以在保护模式与实模式之间交换:1:执行预定义的中断映射处理2:用传送服务来调用实模式代码3:使用实模式回调用从实模式交换到保护模式4:使用线性模式交换功能 所有的模式交换功能除了线性模式交换功能外都会在DPMI主机的0环堆栈中保留一些数据。这就意味着不能在嵌套的模式交换中中止程序除非使用的交换功能是线性模式交换功能。甚至也不应该试图从一组硬件中断或异常处理中断中中止那些使用线性模式交换服务的程序,因为DPMI主机会自动的执行模式和堆栈交换来提供这些服务功能。3-4 状态保留 因为DPMI主机堆栈交换会自动的越过模式交换,因此某些时候当使用线性模式交换服务时有必要使用状态保留功能来存储先前的状态。主机系统会为其它模式的当前状态保留必要的信息,这些信息包括在CS:IP,SS:IP和段寄存器中的值,因为DPMI客户无法直接使用这些值,所以就需要在执行嵌套的模式交换时调用状态保留功能。 例如在有些硬件中断发生时,DPMI主机会将实模式段寄存器,CS:EIP,SS:ESP的值保存在0环堆栈中。 * 4 错误处理 并不是所有的INT 31H调用都会成功,而DPMI 0.9这个版本却没有为多数错误返回指定返回代码。当一个调用失败产生后它即会将标志位置位1,并且在AX中返回未定义的值。在将来的DPMI接口中就将把错误返回代码返回到AX寄存器中,并且把所有的错误码都会表现在AX的高位(15位)。如果一个功能调用返回设置了的标志位并且清除的AX高位,那就意味着这个调用失败了,借助于指定的错误返回代码,将来的DPMI下运行的程序将会对所出现的错误有更恰当和及时的处理。 5 装载DPMI客户与扩展应用程序 所有的DPMI应用程序开始都被在实模式中执行。一个程序一开始必须运行与标志的实模式中但是它可以通过执行一些简单的代码段来切换到保护模式中去。 DPMI并没有定义一个可执行文件的保护模式下的格式,相反程序必须提供给DPMI它们自己为进入并固定在保护模式中运行的代码机制。 5-1 获得实模式到保护模式的交换入口 在实模式中调用这个功能,就可以侦测到当前DPMI的服务入口,并且获得能使程序在保护模式中运行的地址 调用入口 AX=1867H 执行INT-2FH 返回 如果成功则: AX=0 BX=标志位0位=1 如果支持32位程序 CL=处理器类型 02H=80286 03H=80386 04H=80486 DH=DPMI主版本号 DL=DPMI副版本号 SI=DPMI主机私有数据需要的段数(可能0) ES:DI=进入保护模式的调用过程的地址 如果失败则: AX!=0程序员提示 使用这个功能并不是真正执行转入保护模式的操作,而你需要调用在ES:DI返回的地址。在分配了DPMI主机的私有数据区之后,才开始执行真正的转入DPMI的操作交换。 5-2 调用实模式-保护模式的交换入口指针 在使用了INT-2FH-功能号1678H的中断调用后,DPMI客户即获得了保护模式入口指针,且必须像如下描述的调用入口指针地址: 调用入口 AX=标志位0=1; 条件:如果应用程序是32位的程序 ES=DPMI主机数据区的实模式段大小; 注释:必须是前一个功能在SI的返回数据区的大小,如果不用数据区,则ES会被忽略掉。调用的返回地址会在ES:DI中由前一个功能带回。 返回 成功则: 清除进位标志位。 程序现在可以在保护模式中运行了。 CS:=基于实模式CS与64K段限的16位选择符。 SS:=基于实模式SS与64K段限的选择符 DS:=基于实模式DS与64K段限的选择符 ES:=指向有100H字节限制的程序段前缀的选择符 FS和GS=0(如果运行与80386以上)如果程序是32位的则ESP的高端为0,其它寄存器被保留。 失败则: 设置进位标志位 程序仍然运行于实模式中 程序员提示: 。 一旦进入保护模式,所有的INT 31H功能调用都可以被使用 。 只能执行INT21H的4CH功能号来中止保护模式程序的执行 *6 中止一个保护模式程序的运行 要中止一个保护模式程序的运行可以通过执行一条INT 21H的4CH功能号。并且在AL寄存器中返回错误代码,这是一种标准的DOS中止运行调用,但是它必须在保护模式中运行且允许DPMI主机清除所有的与保护模式程序相关的数据结构。 程序不能通过异常处理,实模式回调用等硬件中断来结束运行,程序仅仅能够由它们自己的主线程执行DPMI主机的正常清除功能来中止运行。然而对所有模式使用线性模式交换服务的DOS扩展器能够在从实模式切换到保护模式之后的任何时候执行中止调用来中止程序运行。 *7 模式检测 要写一个即能在实模式下又能在保护模式下运行的程序或库也是可行的,只要是有数行代码能检测当前的程序是不是运行在保护模式下就可以了,而只能在保护模式下运行的程序却不需要这些代码。 调用入口 AX=1686H 执行一次INT 2FH中断 返回 如果是在DPMI下的保护模式中运行则: AX=0 如是在DPMI下的实模式中运行则: AX!=0(AX不等于0)程序员提示 1:这种调用会在调用程序运行于保护模式中时返回AX=0,而当调用程序运行在那些支持DPMI模式的实模式环境下时,AX则返回一个非零值。如果还有什么不清楚的地方也可以参考有关进入保护模式的内容。 8 LDT描述符管理服务 LDT描述符管理服务可以为在当前任务的局部描述符表中的保护模式描述符提供分配,释放,创建,锁定,解锁等服务。8-1 分配LDT描述符 这是一个用来对给当前任务中的局部描述符表分配多或只有一个描述符的功能。 描述符必须用应用程序来初始化; 调用入口 AX=0000H CX=需要分配的描述符的数目 返回值 成功则; 清除进位标志位, AX=基地址选择符 失败则 设置进位标志位,程序员提示 1:如果需要分配多于一个的描述符,则AX就会返回连续描述符集合的第一个描述符 8-2 释放LDT描述符 这个功能用以释放前一个LDT描述符分配功能分配的描述符, 调用入口 AX=0001H BX=要释放的选择符 返回 调用成功则: 清除进位标志位 失败则 设置进位标志位 程序员提示 对每一个独立的描述符都可以调用这个功能来释放一个描述符集合。 对程序初始的CS,DS和SS,也可以释放以分配的描述符。其它没有用0000H功能分配的描述符不能用这个功能释放它。 8-3 段化描述符 这个功能是将实模式的段转化成由保护模式程序所编址的描述符 调用入口 AX=0002H BX=实模式段地址 返回值 如果成功则: 清除进位标志位 AX=映射到实模式段地址的选择符 失败则: 设置进位标志位 程序员提示: 。对相同的段使用多次同样的调用会返回相同的选择符 。这个功能所创建的描述符将不能被修改或者释放 所以必须谨慎的使用这个功能,如果你的程序使用相同的选择符来检查不同的实模式地址,那么就需要分配一个描述符,并且使用设置基地址功能而不是本功能来改变其基地址。 。这个功能将使使用实模式段地址的程序更方便的互相存取数据,不要指望使用这个功能就可以获得特权级别数据段的描述符。8-4 获得下一个选择符的增量 某些例如分配LDT描述符和分配DOS内存块的功能能返回多于一个的描述符,而使用这个功能就可以让你知道你应该在选择符上加的值是多少,可以存取在描述符阵列中的下一个描述符: 调用入口: AX=0003H 返回 清除进位标志位 AX=要获得下一个选择符而要加的增量 程序员提示。 不用在返回的值上作任何设定,返回值有二级权限。8-5 保留子功能 功能号0004H-0005H被保留不做它用 8-6 获得段基地址 使用本功能将返回指定段的32位线性基地址; 调用入口 AX=0006H BX=选择符 返回 如果功能成功则: 清除进位标志位 CX:DX=指定段的32位线性基地址 失败则: 进位标志位置位 程序员提示: 如果在BX中的指定选择符是无效的话,则本功能失败。8-7 设置段基地址使用本功能将改变指定段的32位线性基地址; 调用入口 AX=0007H BX=选择符 CX:DX=指定段的32位线性基地址 返回 成功则: 清除进位标志位 失败则: 进位标志位置位 程序员提示: 。 如果在BX中的指定选择符是无效的话,则本功能失败。 。 你的程序只能够修改那些由LDT描述符分配功能所分配的描述符。 。在基地址的高8位会被16位的DPMI实例所忽略。 8-8 设置段限 这个功能为指定段设置段限。 调用入口 AX=0008H BX=选择符 CX:DX=32位段限 返回 成功则 清除进位标志位 失败则: 设置进位标志位 程序员提示: 。 如果在BX中的指定选择符是无效或者指定段限没有设置的话,则本功能失败。16位DPMI实例不能设置高于0FFFH的段限,因此在这些DPMI实例调用本功能时CX必须是0。 。高于1M空间的段限必须要页对齐,也就是说高于1M空间的段限必须有低12位设置。 。 你的程序只能够修改那些由LDT描述符分配功能所分配的描述符 。可以使用LSL这条指令来获得段限,LSL指令是有80286以上的机器所提供的指令,注意在80386机器上如果你的的段有高于64K的段限,就应该使用32位模式的LSL指令结构。 8-9 设置描述符存取权限 本功能允许保护模式程序修改描述符区域的存取权限和类型。 调用入口 AX=0009H BX=选择符 CL=存取权限/类型位 CH=80386扩展存取权限/类型位 (仅限于32位的DPMI实例) 返回 成功则: 清除进位标志位 失败则: 设置进位标志位程序员提示: 。 如果在BX中的指定选择符是无效的话,则本功能失败。 。 你的程序只能够修改那些由LDT描述符分配功能所分配的描述符。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论