第一章 引言 1
1.1 本书介绍 1
1.2 阅读对象 2
1.3 使用本书需要什么? 2
1.4 本书的目的 3
1.5 本书中使用的约定 3
1.6 如何使用本书 3
1.7 本书各章节介绍 4
1.8 问题 4
第二章 基本概念 5
2.1 通过软件控制设备 5
2.1.1 设备基本原理概述 5
2.1.2 设备的程序控制 8
2.2 DOS概述 15
2.3 DOS服务功能 17
2.3.1 DOS中断 17
2.3.2 DOS服务程序 19
2.3.3 使用DOS服务程序 21
2.4 DOS设备管理 21
2.5 DOS设备驱动程序 22
2.5.1 新设备的设备驱动程序 22
2.5.2 替换驱动程序(ANSI·SYS) 22
2.5.3 新旧设备驱动程序的关系 22
2.5.4 为标准设备定制驱动程序 23
2.5.5 无设备之驱动程序 24
2.5.6 驱动程序结构框架 24
2.5.7 DOS怎样与驱动程序通信 24
2.6 块设备和字符设备 28
2.7 设备驱动程序命令 28
2.7.1 初始化命令 30
2.7.2 Media Check和获得BIOS参数块命令 30
2.7.3 IOCTL输入命令 30
2.7.4 输入命令 31
2.7.5 无破坏输入命令 31
2.7.6 输入状态命令 31
2.7.7 输入废除命令 31
2.7.8.输出命令 31
2.7.9 带验证的输出命令 31
2.7.10 输出状态命令 31
2.7.11 输出废除命令 32
2.7.12 IOCTL输出命令 32
2.7.13 设备打开命令 32
2.7.14 设备关闭命令 32
2.7.15 可移动存储介质命令 32
2.7.16 输出至忙命令 32
2.7.17 其它命令 32
2.8 跟踪程序对设备的请求 32
2.9 建立设备驱动程序的过程 34
2.9.1 编写设备驱动程序 34
2.9.2 汇编设备驱动程序 34
2.9.3 连接设备驱动程序 35
2.9.4 转换EXE为COM格式 35
2.9.5 将设备驱动程序装入DOS 35
2.10 本章小结 36
2.11 问题 36
第三章 简单的设备驱动程序 37
3.1 设备驱动程序的基本框架 37
3.2 简单设备驱动程序的各个部分 38
3.3 对汇编程序的指示 39
3.4 主过程代码 40
3.5 DOS要求的设备标题 41
3.6 设备驱动程序的工作空间 43
3.7 STRATEGY过程 44
3.8 INTERRUPT过程 45
3.9 局部过程 46
3.10 DOS命令处理 47
3.11 错误出口过程 48
3.12 公共出口过程 49
3.13 程序结束部分 50
3.14 完整的Simple设备驱动程序 50
3.15 建立Simple设备驱动程序 53
3.16 使用Simple设备驱动程序 53
3.17 假如不工作怎么办? 53
3.18 本章小结 53
3.19 问题 53
第四章 控制台设备驱动程序 55
4.1 控制台设备驱动程序 55
4.2 设计自己的控制台设备驱动程序 55
4.3 编写控制台设备驱动程序概述 59
4.3.1 程序说明 60
4.3.2 汇编程序伪指令 60
4.3.3 主过程代码 62
4.3.4 设备标题 62
4.3.5 控制台设备驱动程序的工作区 64
4.3.6 STRATEGY过程(策略过程) 64
4.3.7 INTERRUPT过程(中断过程) 65
4.3.8 局部过程 66
4.3.9 DOS命令处理 66
4.3.10 错误和公共退出 72
4.3.11 程序结束 73
4.4 完整的控制台设备驱动程序 74
4.5 关于DOS版本的注解 81
4.6 建立更替的控制台设备驱动程序 81
4.7 本章小结 81
4.8 问题 81
第五章 打印机设备驱动程序 82
5.1 打印机类型 82
5.2 I/O控制和IOCTL调用 83
5.3 IOCTL程序 84
5.4 建立和使用IOCTL程序 87
5.5 用于串行适配器和并行适配器的BIOS服务程序 88
5.6 打印机设备驱动程序内部构造 90
5.6.1 设备标题 92
5.6.2 设备驱动程序的工作空间 94
5.6.3 STRATEGY,INTERRUPT过程及局部过程 94
5.6.4 DOS命令处理 95
5.6.5 出错退出 103
5.6.6 公共退出 103
5.6.7 程序结束 103
5.7 建立打印机设备驱动程序 108
5.8 使用打印机设备驱动程序 113
5.9 本章小结 113
5.10 问题 113
第六章 时钟设备驱动程序 114
6.1 时钟/日历芯片 114
6.2 时钟设备驱动程序的功能 114
6.3 PC时钟及定时信号概述 115
6.4 对MM58167A时钟芯片编程 116
6.4.1 二进制编码的十进制值 117
6.5 寻找时钟芯片 117
6.6 驻留程序 118
6.7 使用定时器中断显示时间 118
6.8 认识时钟设备驱动程序 119
6.8.1 开始 119
6.8.2 设备标题 121
6.8.3 时钟设备驱动程序的工作空间 122
6.8.4 策略和中断过程 123
6.8.5 用于时钟设备驱动程序的局部过程 124
6.8.6 DOS命令处理 128
6.8.7 错误退出部分 135
6.8.8 公共退出部分 135
6.8.9 程序结束 136
6.9 建立时钟设备驱动程序 139
6.10 时钟设备驱动程序的工作 155
6.11 本章小结 156
6.12 问题 156
第七章 磁盘内部结构介绍 157
7.1 磁盘的物理性质 157
7.1.1 磁盘类型 157
7.2 磁盘驱动器上的数据组织 157
7.2.1 磁道 157
7.2.2 存贮容量估算 157
7.2.3 数据组织成扇区 158
7.2.4 扇区编号和划分 158
7.2.5 扇区划分的DOS标准 159
7.2.6 磁盘格式化 159
7、3 DOS磁盘支持的技术细节 159
7.3.1 DOS支持的磁盘 159
7.3.2 磁盘组织方式 160
7、4 引导区/保留区,文件分配表和盘簇 160
7.4.1 文件存贮单元——盘簇(cluster) 162
7.4.2 文件分配表(FAT) 162
7.4.3 在FAT中记录盘簇 163
7.4.4 盘簇、链和FAT 163
7.4.5 文件分配表的数目(几乎)总是2 165
7、5 文件目录 165
7、6 磁盘容量: 168
7.6.1 FAT表目:12或16位? 168
7.6.2 DOS磁盘容量限制 169
7、7 重要的磁盘参数 169
7.7.1 启动区(引导区) 169
7.7.2 BIOS参数块(BPB) 169
7.7.3 便用BPB查找信息 172
7、8 DOS磁盘设备驱动程序 173
7.8.1 DOS和磁盘设备驱动程序 173
7.8.2 磁盘分类 173
7、9 磁盘设备驱动程序命令 175
7.9.1 初始化命令 176
7.9.2 Media Check(介质检查)命令 177
7.9.3 Get BPB(获得BIOS参数块)命令 178
7.9.4 IOCTL Input命令 178
7.9.5 Input(输入)命令 178
7.9.6 Output(输出)命令 178
7.9.7 Output With Verity(带验证输出)命令 178
7.9.8 IOCTL Output命令 179
7.9.9 Device Open(设备打开)命令 179
7.9.10 Device Close(设备关闭)命令 179
7.9.11 Removable Media(可移动介质)命令 179
7、10 本章小结 179
7、8 问题 180
第八章 RAM磁盘设备驱动程序 181
8、1 使用RAM磁盘设备驱动程序 181
8、2 RAM磁盘及其工作原理 181
8、3 RAM磁盘设备驱动程序 182
8.3.1 指定RAM磁盘的内部格式 183
8.3.2 一些RAM磁盘设备驱动程序的设计选择 184
8、4 RAM磁盘设备驱动程序使用的命令 184
8、5 RAM磁盘设备马区动程序清单 185
8.5.1 该设备驱动程序的工作空间 189
8.5.2 RAM磁盘的STRATEGY和INTERRUPT部分 190
8.5.3 局部过程 191
8.5.4 DOS命令处理 193
8.5.5 错误出口和公共出口 200
8.5.6 程序结束部分 200
8、6 RAM磁盘设备驱动程序整体 201
8、7 建立RAM磁盘设备驱动程序 209
8、8 修改RAM磁盘设备驱动程序 209
8、9 本章小结 210
8、10 问题 210
第九章 建造一个完整的全功能设备驱动程序 211
9、1 要求的工具 211
9.1.1 完美的编辑程序 211
9、2 设备驱动程序概述 214
9.2.1 对汇编程序的指示 215
9.2.2 设备标题 222
9.2.3 STRATEGY和INTERRUPT过程 227
9.2.4 DOS命令处理 227
9.2.5 从设备驱动程序退出 249
9.2.6 未实现命令的状态字 251
9、3 本章小结 251
9、4 问题 251
第十章 编程技巧 253
10、1 编写设备驱动程序的核对清单 253
10、2 设备驱动程序调式纠错技巧 255
10、3 编制样板设备驱动程序 256
10、4 设备驱动程序在内存中位置的确定 266
10、5 加入调试纠错程序 267
10、6 新堆栈 271
10、7 特殊比特 272
10、8 机器不兼容性 272
10、9 DOS的差别 272
10、10 DOS版本的差别 273
10、11 本章小结 275
10、12 问题 275
附录A 8086/8088体系结构概述 276
A、1 Intel 8086/8088微处理器芯片 276
A、2 8086/8088存储器结构 276
A.2.1 8086/8088存储器中的数据存储 276
A.2.2 段落(paragraph) 277
A.2.3 存储器分段 278
A.2.4 存储器分段与段寄存器 279
A、3 8086/8088体系结构中的硬件寄存器 279
A.3.1 通用寄存器 280
A.3.2 指针和变址寄存器 280
A.3.3 段寄存器 280
A.3.4 指令指针寄存器 280
A.3.5 标志 281
A、4 8086/8088输入/输出(I/O)结构 281
A、5 软件中断 282
附录B BIOS中断 283
附录C DOS初始化 295
C、1 DOS系统盘 295
C.1.1 建立系统盘 295
C、2 初始化DOS 295
附录D 硬盘的特殊功能 296
D、1 分区(partition) 296
D、2 FDISK程序 296
D.2.1 生成分区 296
D.2.2 删除分区及显示分区信息 296
D.2.3 使分区成为当前活动 296
D、3 分区扇区 296
D.3.1 分区表 297
附录E 问题解答 299