第一章 概述 1
1.1 386 DOS内存扩展程序的版本 2
1.2环境与兼容性 2
1.3内存术语 2
1.4 相关的软件产品 3
第二章386 DOS内存扩展程序的使用 4
2.1创建保护模式程序 4
2.2命令行语法 4
2.2.1开发版本命令行 4
2.2.2运行版本命令行 5
2.3命令行开关 6
2.3.1环境变量的使用 7
2.3.2命令文件的使用 7
2.4.内存管理开关 7
2.4.1常规内存开关 8
2.4.2扩展内存控制 9
2.4.3.限制应用程序对线性内存的使用 11
2.5优先级 12
2.6混合模式程序开关 12
2.7 GDT和LDT长度开关 13
2.8协处理器开关(-WEITEK和-CYRIX) 14
2.9堆栈分配开关 14
2.10 386/387分页错误现场(-NOPAGE和-ERRATA 17) 15
2.10.1禁止分页开关 15
2.10.2 80386错误17的避免 16
2.11 386| VMM开关 17
2.12极少用到的开关 17
2.12.1硬件结构开关 18
2.12.2 20行地址线开关 19
2.12.3 VDISK兼容性开关 19
2.12.4保存32位寄存器开关 20
2.12.5禁止乘法检查的开关 20
2.12.6不要在V CPI下运行的开关 21
2.12.7调试打印输出开关 21
2.12.8系统功能调用指针转换开关 22
2.12.9中断控制开关 23
2.12.10 BIOS块移动开关 24
2.12.11写屏蔽模式下打开.EXP文件 24
第三章 程序环境 26
3.1程序结构 26
3.2程序的段 28
3.3程序段前缀(PSP) 29
3.4环境块 30
3.5内存的分配和释放 30
3.6重叠段 30
3.7空指针检测 31
3.8实现对另一程序的(EXEC) 31
3.9环境检测 32
3.10程序的压缩 32
3.11简单例程 32
第四章 访问硬件 34
4.1优先级 34
4.2硬件I/O 34
4.3屏幕访问 34
4.4 Intel 80287/80387浮点协处理器的编程 35
4.5 Weitek浮点协处理器的编程 35
4.6 Cyrix EMC87浮点协处理器的编程 36
第五章 内存管理 37
5.1 386 DOS内存扩展程序内存模式 37
5.1.1分页 37
5.1.2局部描述符表段 39
5.1.3全局描述符表段 40
5.2内存分配 40
5.2.1常规内存的使用 41
5.2.2直接扩展内存的使用 41
第六章 中断与异常 44
6.1 386 DOS内存扩展程序标准的中断处理过程 44
6.1.1软中断 45
6.1.2硬中断 46
6.1.3处理器异常 46
6.1.4 MS-DOS一些需要考虑的问题 46
6.2接管中断 47
6.3获取和设置中断向量的调用 48
6.3.1获取保护模式中断向量 48
6.3.2获取实模式中断向量 48
6.3.3设置保护模式中断向量 48
6.3.4设置实模式中断向量 48
6.3.5设置中断获取保护模式下的控制权 49
6.3.6设置实模式和保护模式中断向量 49
6.3.7获取保护模式处理器异常向量 49
6.3.8设置保护模式处理器异常向量 50
6.4编写中断处理程序初步 50
6.4.1保存寄存器 50
6.4.2高级语言接口支持 51
6.4.3具有再入功能的中断处理程序 51
6.5保护模式中断处理程序的中断堆栈结构 51
6.6保护模式下中断处理程序的典型策略 54
6.6.1处理一个中断然后IRETD 54
6.6.2处理一个中断然后链接 54
6.6.3返回时改变寄存器 54
6.6.4同前中断处理程序相链接并重新获取控制权 55
6.6.5保持控制权不从中断返回 55
6.7 DPMI下中断标志的控制 56
6.8 PC AT兼容性问题的处理 56
6.8.1硬件中断IRQ0—7和处理器异常08h— 0Fh 57
6.8.2硬件中断IRQ 2 57
6.8.3 BOUND异常和BIOS打印屏幕系统调用 57
6.8.4协处理器中断 58
6.8.5不可屏蔽中断 58
第七章 实模式和保护模式混合编程 59
7.1简介 59
7.2程序装载 59
7.2.1实模式和保护模式代码的链接 60
7.2.2从保护模式程序中装入执行(EXEC)实模式程序 61
7.2.3从实模式程序中装入执行(EXEC)保护模式程序 62
7.2.4两个PSP的保存 62
7.3不同模式间的数据传送 63
7.4交互模式控制权的传递 63
7.4.1内部模式进程调用 64
7.4.2用中断进行模式切换 65
7.5典型程序的编制 66
7.5.1将实模式和保护模式代码一起链接 66
7.5.2由保护模式代码开始 66
7.5.3由实模式代码开始 67
7.6作任意的实模式系统调用 67
7.7常规内存的分配 68
7.8保护模式常规内存程序 68
7.9例程 69
7.9.1 GDEMO.C图形例子 69
7.9.2 TAIL.ASM Microsoft鼠标例子 69
7.9.3 PTAIL2.ASM Microsoft鼠标例子 81
第八章 兼容性 82
8.1直接扩展内存的分配 82
8.2启动20行地址 82
8.3硬中断的冲突 83
8.4 VCPI接口 83
8.5.DPMI 83
8.6 XMS驱动程序 84
8.7 Quarterdeck DESQview 386 84
8.8 Windows 3.0 84
8.9内存驻留程序 84
8.9.1 RAM Disk和Disk Cache程序 85
8.9.2 EMS仿真程序 85
8.9.3其它内存驻留程序 85
附录A MS—DOS系统调用 86
附录B 386 DOS内存扩展程序系统调用 126
附录C BIOS功能调用 177
附录D库、头文件和80386样板程序 209
D.1 \EXAMPLES\INCLUDES目录 209
D.2 \EXAMPLES\LIBS目录 209
D.3 \EXAMPLES\DOSEXT目录 210
D.4\EXAMPLES\GRAPHICS目录 210
D.5 \EXAMPLES\INTHNDLR目录 211
附录E中断处理程序的例子 212
ICHAIN.ASM 212
ERR387.ASM 213
CTRLS.ASM 214
SERIO.ASM 215
CRITERR.ASM 223
附录F编写与DPMI兼容的应用程序 225
F.1 DPMI版本和功能 225
F.2在DPMI下的中断处理器和中断标志控制 226
F.3 386 DOS内存扩展程序开关 226
F.4 386 DOS内存扩展程序系统调用 227
附录G VCPI硬中断和DESQview 229
G.1在VCPI下硬件中断如何工作 229
G.2 -HWIVEC开关 230
附录H零特权级操作 231
附录I系统调用的可重入性 232
I.1使用数据缓存的DOS和BIOS调用 232
I.2.内存分配调用和页故障处理 233
I.3多种不可重入的系统调用 233
附录J与386 DOS内存扩展程序兼容性 235
J.1硬件中断的重定位(-HWIVEC) 235
J.2在硬件中断上的任务转换 235
J.3中断堆栈结构 236
J.4在.EXP文件上打开MS-DOS共享方式 236
J.5可重入性 237
附录K术语汇编 238
附录L错误信息 246
L.1用户错误 246
L.2用户致命性错误 252