高级MS-DOS编程全解析:从基础到实践
立即解锁
发布时间: 2025-08-20 00:42:34 阅读量: 1 订阅数: 5 


深入解析MS-DOS编程技巧与实践
### 高级 MS-DOS 编程全解析:从基础到实践
#### 1. MS-DOS 的发展历程
MS-DOS 在短短七年时间里,从一个简单的程序加载器发展成为基于英特尔 8086 系列微处理器的复杂稳定的操作系统。它支持网络、图形用户界面和各种存储设备,拥有超过 1000 万的授权用户。
其前身是 86 - DOS,由 Tim Paterson 为西雅图计算机产品公司编写。最初设计用于模仿 Digital Research 的 CP/M - 80,以便将 8 位 CP/M - 80 应用程序轻松移植到新的 16 位环境中。
1980 年 10 月,IBM 为其新的个人计算机寻找操作系统,微软从西雅图计算机产品公司获得 86 - DOS 的销售权,并于 1981 年 7 月收购了所有权利,对其进行重大修改后更名为 MS - DOS。
MS - DOS 1.0 相比 CP/M - 80 有诸多改进,如改进的磁盘目录结构、更好的磁盘空间分配和管理方法、扩展的操作系统服务以及 AUTOEXEC.BAT 批处理文件等。
后续版本不断发展,2.0 版本支持大容量软盘和硬盘、具有类 UNIX/XENIX 功能、支持后台打印等;3.0 版本实现了应用程序对打印假脱机程序的直接控制、扩展了国际货币格式支持等;3.1 版本增加了网络文件和打印机共享支持。
以下是 MS - DOS 版本发展的简要表格:
| 版本 | 发布时间 | 主要特性 |
| --- | --- | --- |
| MS - DOS 1.0 | 1981 年 | 首次用于 IBM PC,改进磁盘目录结构等 |
| MS - DOS 1.25 | 1982 年 6 月 | 支持双面磁盘,修复 bug |
| MS - DOS 2.0 | 1983 年 3 月 | 支持大容量磁盘和类 UNIX/XENIX 特性 |
| MS - DOS 3.0 | 1984 年 8 月 | 应用程序可控制打印假脱机程序,支持更大硬盘 |
| MS - DOS 3.1 | 1984 年 11 月 | 支持网络文件和打印机共享 |
#### 2. MS-DOS 的结构与加载过程
MS - DOS 分为几个层次,以将操作系统的内核逻辑和用户对系统的感知与运行的硬件隔离开来,这些层次包括 BIOS、DOS 内核和命令处理器(shell)。
BIOS 由计算机制造商提供,包含控制台显示和键盘、行式打印机、辅助设备、日期和时间以及引导磁盘设备的默认硬件相关驱动程序。MS - DOS 内核通过 I/O 请求包与这些设备驱动程序通信。BIOS 在系统初始化时作为 IO.SYS 文件的一部分被读入随机存取存储器(RAM)。
DOS 内核实现了应用程序所看到的 MS - DOS,提供文件和记录管理、内存管理、字符设备输入/输出、生成其他程序以及访问实时时钟等硬件无关服务。它在系统初始化时从引导磁盘上的 MSDOS.SYS 文件读入内存。
命令处理器(shell)是用户与操作系统的接口,负责解析和执行用户命令。默认的 shell 是 COMMAND.COM,它分为常驻部分、初始化部分和临时模块。
当计算机启动或重置时,程序执行从地址 0FFFF0H 开始,该地址包含一个跳转指令,将控制权转移到 ROM 引导程序。ROM 引导程序从系统启动磁盘的第一个扇区读取磁盘引导程序到内存中,然后将控制权转移给它。磁盘引导程序检查磁盘是否包含 MS - DOS 的副本,如果存在,则读取系统文件并将控制权转移到 IO.SYS 的初始入口点。
以下是 MS - DOS 加载过程的 mermaid 流程图:
```mermaid
graph TD;
A[系统启动或重置] --> B[执行地址 0FFFF0H 的跳转指令];
B --> C[ROM 引导程序读取磁盘引导程序];
C --> D[磁盘引导程序检查 MS - DOS 副本];
D -- 存在 --> E[读取系统文件并转移到 IO.SYS];
E --> F[初始化 DOS 内核和设备驱动程序];
F --> G[读取 CONFIG.SYS 文件并处理];
G --> H[加载命令解释器];
H --> I[MS - DOS 准备就绪];
D -- 不存在 --> J[提示用户更换磁盘重试];
```
#### 3. MS-DOS 应用程序的结构
MS - DOS 应用程序主要有两种类型:.COM 程序和 .EXE 程序。
.COM 程序适合微小模型,所有段寄存器包含相同的值,代码和数据混合在一起。它以绝对内存映像的形式存储在磁盘上,文件没有头或其他内部标识信息。最大长度约为 64 KB,加载时所有段寄存器指向程序段前缀(PSP)。
.EXE 程序适合小、中或大模型,段寄存器包含不同的值,代码、数据和堆栈位于不同的段中。它可以根据可用内存大小任意扩展,磁盘文件有唯一的头、重定位映射、校验和等信息。
PSP 是一个 256 字节长的保留区域,包含与 MS - DOS 的链接、MS - DOS 保存的信
0
0
复制全文
相关推荐










