DOS中DPMI在C语言中的实现方法浅析

转载:http://tanshank15408.blog.sohu.com/157003732.html

本文使用通俗易懂的表述,深入浅出地介绍DPMI和DOS Extender(以DOS/4GW为例)的理论和基本使用技术,旨在让对DPMI不太了解的程序员能了解DPMI在C语言中的实现方法。限于本人水平及资料匮乏,文中难免存在不当之处,望各位读者不吝赐教。DPMI和DOS Extender DPMI是DOS保护模式接口(DOS Protected Mode Interface)的英文缩写,是在DOS平台下实现大内存编程的重要手段。众所周知,DOS默认支持管理的最大内存空间为640KB。随着硬件科技的发展,在80年代末期、90年代初期,拥有超过640KB的内存的系统诞生了。这就要求DOS能够使用和管理高于640KB部分的内存空间。 DPMI就是在这种背景下诞生的技术,它提出了Real Mode(实模式)和Protected Mode(保护模式)的概念。所谓Real Mode,就是DOS默认的工作模式,在这种模式下DOS最多只能管理640KB内存。而Protected Mode是由DPMI平台提供的一种新模式,在这种模式下DOS可以管理16MB甚至更多的内存空间,这对于当时的计算机应用已经绰绰有余(事实上,超过16MB内存的计算机系统一直到1997年才得以普及)。 下面详细解释Protected Mode的实现方法。首先需要指出,Protected Mode只是一个抽象概念,其具体实现依赖于DOS Extender(关于DOS Extender,还没有统一的中文翻译)。DOS Extender是DPMI的具体应用,可以将它理解为一个程序。和Real Mode下的其它应用程序一样,它占用640KB中的一部分。但是它可以让经过特殊设计的应用程序以它为平台运行。这样,这些应用程序就可以通过DOS Extender访问高于640KB的内存空间。 常见的DOS Extender包括DOS/16M、DOS/4G、DOS/4GW、DOS32A、Causeway等,它们都通过DPMI实现对大内存的管理。认识Watcom C/C++和DOS/4GW Watcom C/C++是80386时代风靡全球的C语言开发工具。它并没有强大的Integrated Development Environment(IDE,集成开发环境),但编译的目标程序的执行效率却比当时Borland和Microsoft的编译器编译的快很多。因此,Watcom C/C++得到了许多程序员,尤其是游戏开发者的青睐。 在众多DOS Extender中,最出名的是由Rational Systems Inc.(现在更名为Tenberry Software)开发的DOS/16M、DOS/4G和DOS/4GW。在许多老游戏的执行之初,我们都可以看到DOS/4GW的字样,这就说明这些游戏是通过DOS/4GW访问大内存的。 刚刚提到的三个DOS Extender虽然都是Rational Systems Inc.的产品,但还是有差别的。DOS/16M是16位的Extender,它兼容许多16位编译器(比如Borland C 2.0);DOS/4G和DOS/4GW都是32位的Extender,它只兼容32位的编译器。其中,DOS/4GW是DOS/4G为当时如日中天的Watcom C/C++制作的特别版,售价比较低,代价是最多只能管理16MB内存(不过在当时已经足够了)。Watcom C/C++与DOS/4GW的完美搭配 在众多实现DOS大内存程序设计的方法中,Watcom C/C++与DOS/4GW的搭配是最受欢迎的。Watcom C/C++拥有无与伦比的程序执行效率;而DOS/4GW不仅稳定,功能也十分强大(由于运行在保护模式下的程序往往在访问硬件时遇到困难,DOS/4GW比较好地解决了这个问题)。 Watcom C/C++如今已经成为了一款开源的免费软件,同时更名为Open Watcom C/C++,而DOS/4GW仍然是商业软件。Open Watcom C/C++可以在其网站http://www.openwatcom.org/下载到,最新版本为1.52 RC2。这个版本中包含了DOS/4GW。 在安装好Open Watcom C/C++后,要使用DOS/4GW编译和连接一个C/CPP文件,需要进行下面的步骤(以Open Watcom C/C++安装在D:\OWATCOMC下为例): 在Open Watcom C/C++的安装目录下新建一个compile.bat文件,内容如下:PATH D:\OWATCOMC\BINWSET TEMP=D:\OWATCOMC\TEMPSET INCLUDE=D:\OWATCOMC\HSET WATCOM=D:\OWATCOMC\D:\OWATCOMC\BINW\WCL386 /l=dos4g %1DEL %1.obj 这个compile.bat文件调用WCL386,即Open Watcom C/C++的编译和连接器,来编译和连接你的程序。 如果要编译一个文件d:\c\hello.c,则在DOS提示符下输入:D:\OWATCOMC\COMPILE d:\c\hello.c 这样就可以在D:\OWATCOMC下生成hello.exe。 程序并不要做额外的更改,但你可以定义更多的大数组(但不是更大的数组),申请更大的内存空间(总和不超过16MB,如果使用DOS/4G就可以申请到总和多达64MB的内存空间)。总结 笔者也刚刚接触DPMI不久,资料匮乏是在研究这种技术时遇到的最大障碍。如果你对Protected Mode编程有兴趣,或有所指教,欢迎你和我联系。我的网站为http://wecan.name/。 要想真正用好DPMI技术是十分困难的,必须对汇编语言有所了解才行。不过,如今的Windows已经是一个在Protected Mode下运行的超级程序,现在的程序员在编程时完全不必受到DPMI使用中琐碎的束缚。然而,学习在DOS下使用Protected Mode,对深入了解80x86计算机系统的工作原理是很有裨益的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Borland C++3.1 神话般的经典开发工具 带有传奇色彩的BORLAND公司,见证了美国软件技术市场上波澜壮阔、激动人心的技术大战和产品大战,最为经典的成功范例就是Borland C++3.1! Borland是国程序员最为景仰的公司之一,特别是对于资格老一点的程序员而言,他们学习编程的起步就是Borland. 以下是Borland c++入门指南摘录的一些信息 Borlandc++适用于需要一个专业化、优化的编译器的C++和C程序员,它同时适用于A&T公司的C++2.1版和ANSIC的程序员。它快速而有效,据此用户可以创建包括Microsoft Windows应用程序在内的任何应用程序。 Borland C++3.0可以在DOS的环境下运行,更可以在Windows下运行,在Windows之下的Borland C工作环境更亲切,将使您开发程序更得心应手。 C++是一个面向对象(OOP)的程序设计语言.使用户能充分利用OOP的先进设计方法和省时效率高的特点,它是C语言的进一步发展,它是可移植的,所以用户可以很容易地将一个由C++编写的应用程序从—个系统移植到另一个系统。在任何地方,都可以用C++从事任何编程工作。 Borland C++特色 1. Borland C++3.0及3.1可供程序设计人员开发C++及c程序。其的c++是依照AT&T2.1标准设计的,而C则是ANSI C。因此让您开发的程序兼容性高.移植性(Portable)也更强。 2.全局的优化(Global Optimization):为程序编译出最优的目的码,使执行时间减少,使目的码变小。 3.缩短编译时间:由于编译器及工具的使用,大大减少了编译时间。 4.集成开发可境:(即IDE,Integrated Development Environment),本产品提供一完整的工作平台(Platform),使程序的编写编译、调试、分析、运行相当完整且方便。 5.窗口程序开发:本产品可以开发出Microsoft Windows程序,还包括完整的工具程序:窗口资源编译器(Resource Compiler),在线帮助编译器(Help Compiler)及窗口资源工作程序(Resource Workshop)。 6. DPMI编译器:DPMI (DOS Protected Mode Interface)使编译器可以在DOS或Windows386的保护模式下运行,因此开发大型的程序不用担心内存不足。 7. Easywin:或将DOS程序直接转成Window。程序的功能,不需要改半行令。 8. WinSight:窗口信息跟踪程序,使我们看到程序与Windows之间的联系息。 9.在线帮助,在IDE环境下,任何错误都可由在线帮助得到说明或者想要任何时间查询函数或其他说明,都可使用此项功能。 10.虚拟Run - time面向对象存储管理功能(VROOMM,Virtual Run-time Object-Oriented Memory Manager)。当程序设计人员选定目的码的覆盖功能后,VRAOOMM会处理一切事情,即使程序超过640K。 11.丰富的类库,本产品提供常用的数据结构,例如List, Queue, Qegue, Stack, Array. . 等。 12.丰富的函数库:本产品提供4, 5百个函数,可以说无所不包了。 1.2.1. Borland C++3.1新功能 1. 3.1版将Turbo C++ for Window。改名为Borland C++for Windows, 2. 3.1版配合Windows 3.1版,增加多媒体(Multi-Media)、笔(Pen)和MCI (Media Control Interface)之控制接口。 3. 新增Win Spector I具程序,此工具程序是当Windows程序发生General Protection Faults时,提供发生此错误的地方,及当时机器的状态。 4. 在Borland C++ for Window,提供最优化的选项。 5. 彩色语法高亮显示(Color Syntax Highlighting),在源程序设置不同的显示的颜 色。可在DOS IDE内的Options I Environment I Colors I Edit及Windows IDE内的Options Environment I Highlight内设置。 6. 可利用参数(-3)或IDC内的Options I Compiler I Advanced Coded Generation 80368设置产生386的目的码。 7. 可在程序内控制最大打开文件数,在_NFILE. H内#DEFINE_NFILE_n
YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值