第一章 确定及访问硬件 1
1.1 定位磁盘驱动器 1
1.2 简单的CPU检测 3
1.3 一个C++的I/O端口类 6
1.4 Mylex 386主板及总线鼠标 8
1.5 谁是第二?识别第二块视频适配器 9
1.6 建立自己的跳出开关 21
1.7 在无模式的监视器间切换 22
1.8 对AT实时时钟编程 25
1.9 封装金属磁盘驱动器架 42
第二章 键盘和键盘输入 44
2.1 加速你的AT键盘 44
2.2 SysReq键的一个用途 48
2.3 摆脱NumLock键的妨碍 51
2.4 Caps Lock校正器 52
2.5 F11和F12键的使用 54
2.6 填充键盘缓冲区 56
2.7 “O”的故事 64
2.8 在PC/XT机上改变按键的重复延时 71
2.9 通过BIOS实现安全的缓冲区填充 73
第三章 磁盘文件操作 75
3.1 配置.EXE文件 75
3.2 使用Setvbuf()加速文件I/O 77
3.3 繁殖搜索的路径 81
3.4 刷新文件缓冲区 86
3.5 C++中的安全文件指针 88
3.6 计算真实的目录空间 90
3.7 检查路径是否存在 92
3.8 抢占磁盘空间 93
3.9 文件名的性质 95
3.10 在C++中检测I/O重定向 97
3.11 逻辑驱动器间的转换 100
3.12 一个目录描述工具 104
3.13 删除与文件关联的子目录 106
3.14 读定长记录 109
第四章 文本视频编程 120
4.1 独立于硬件的光标处理程序 120
4.2 在VGA上显示43行(不是50行) 127
4.3 使用编码页国际化DOS程序 129
第五章 图形编程 142
5.1 C语言中的图形绘画工具 142
5.2 屏幕印刷 156
5.3 VGA分屏动画制作 174
5.4 硬拷贝的抖动 187
5.5 用Windows快速画Bezier曲线 199
5.6 C语言的邮政网络(POSTNET)条形码 211
第六章 关于用户界面的编程 214
6.1 三维图形窗口 214
6.2 判断何时发生窗口重迭 217
6.3 Turbo Vision的空闲时间 218
6.4 使用C++流的TV(Turbo Vision)I/O 231
6.5 在C中接收缺省数值 234
第七章 打印机和打印机编程 237
7.1 直接输出到打印机 237
7.2 关于PrtScr(屏幕打印)键 241
7.3 摆脱挂起的打印陷阱 242
7.4 用C++流访问打印机/辅助设备 245
7.5 Turbo C的后台打印 246
第八章 串口编程 250
8.1 如何使用COM3和COM4 250
8.2 串口硬件内幕 251
8.3 可扩充的串口对象 259
第九章 内存管理 282
9.1 保证内存块以字为单位移动 282
9.2 巨型指针的规范化 283
9.3 准确找出C++中游离的指针 285
9.4 使动态记录的内存开销减为最小 287
9.5 内存块以字为单位反向移动 288
9.6 DOS扩展程序的利用 290
9.7 确定扩展内存的大小 299
第十章 排序与检索方法 301
10.1 多字段排序 301
10.2 加快折半检索的速度 303
第十一章 操作串数据 305
11.1 简单的串压缩的算法 305
11.2 命令行切换的快速语法分析 308
11.3 专用名词正规化 309
11.4 聪明的数字存储法 317
11.5 在C中产生顺序后缀 318
第十二章 数据结构 320
12.1 二值堆 320
12.2 C++中的位向量类 328
12.3 展开树 336
12.4 C语言中继承数据结构 343
第十三章 对时间和日期的处理 347
13.1 在夏令时调整你的时钟 347
13.2 如何对付午夜的混乱 349
13.3 如何检查星期五和13日的出现 350
第十四章 算法与编程的方法 353
14.1 C语言的间接隶属运算符 353
14.2 位操作 355
14.3 C++静态类成员,构造函数和析构函数 356
14.4 将二进制数据转换为C的头文件 360
14.5 C的位操作宏指令 362
14.6 C中的一种简单Soundex编码 365
第十五章 Windows编程 369
15.1 为Windows的监视器锁屏程序 369
15.2 与窗口共存的十个步骤 379
15.3 从Windows中调用DOS设备驱动程序 388
15.4 Windows卡片文件格式 388
15.5 检查你的Windows应用程序 390
15.6 有关DOS向Windows转换的十三个技巧 396
15.7 建立你自己的Windows壳 405
第十六章 编写内存驻留程序 410
16.1 确定C语言TSR所需的内存量 410
16.2 与TSR通信 418
16.3 如果TSR在101键AT机上不能工作 421
16.4 TSR调试技巧 422
16.5 TSR的卸载 424
16.6 防止TSR的重复安装 426
16.7 用C语言简化TSR程序 428
第十七章 对DOS的编程 432
17.1 截取严重错误 432
17.2 编写驱动程序 433
17.3 读取并解释DOS分配表 447
17.4 跟踪DOS的设备驱动程序链 450
17.5 进入DOS Shell设置DOS提示符 454
17.6 IF EXIST不明显用法 455
17.7 编写定制的引导扇区 457
17.8 磁盘驱动器是否写保护 465
17.9 暂停系统配置过程 467
第十八章 系统级编程 471
18.1 从程序内部重启系统 471
18.2 用两字节存储Turbo C远指针 473
18.3 读取指令指针IP 474
18.4 构造.EXE文件 475
18.5 在函数中获取IP寄存器值 480
18.6 在BASM中使用32位指令 481
18.7 与DESQview共存 482
18.8 预知80x86保护错误 483
18.9 在C语言中压入和弹出参数 485
18.10 确定NetWare工作站的地址 489
第十九章 对BIOS的编程 492
19.1 是哪一代PC 492
19.2 藏起几个字节 499
19.3 把BIOS定义成数据结构 501
第二十章 代码优化技术 508
20.1 使你的数据一致化 508
20.2 32位数值用汇编求反 509
20.3 C中高效的自动变量 510
20.4 EGA和VGA锁存器最适于使用字节 511
20.5 在386上缩短跳转指令 512
20.6 移动堆栈段的“甜点” 513
20.7 Turbo C++的内嵌式汇编方式 515
20.8 精简TASM运行文件 522
20.9 快速块移动 523
20.10 在80387上更快的浮点运算 524
第二十一章 调试和维护代码 526
21.1 调试中的难点 526
21.2 用TDREMOTE保护重要的部分 530
21.3 使用BOUND指令的一些难点 531
第二十二章 编程方法 533
22.1 对文件和用户进行确认 533
22.2 一条用内存的转换路径命令 534
22.3 对.COM文件的MASM简化的段指令 536
22.4 用Turbo C++编译C程序 537
22.5 Pascal程序员的C++ 539
22.6 用汇编语言建立数据文件 547
22.7 不用汇编语言的内嵌式汇编 549
22.8 C++中的有限状态控制机 551