第一部分 基础部分 1
第1章 绪论 1
1.1 汇编语言概述 1
1.1.1 汇编语言 1
1.1.2 汇编语言的特点 2
1.1.3 恰当地使用汇编语言 3
1.2 数据的表示和类型 4
1.2.1 数值数据的表示 4
1.2.2 非数值数据的表示 6
1.2.3 基本数据类型 7
1.3 Intel系列CPU简介 8
1.3.1 8位微处理器 8
1.3.2 16位微处理器 9
1.3.3 32位微处理器 11
1.3.4 Pentium和Pentium Pro 13
1.4 习题 14
2.1.1 8086/8088CPU寄存器组 15
2.1 8086/8088寄存器组 15
第2章 8086/8088寻址方式和指令系统 15
2.1.2 标志寄存器 17
2.2 存储器分段和地址的形成 19
2.2.1 存储单元的地址和内容 19
2.2.2 存储器的分段 20
2.2.3 物理地址的形成 20
2.2.4 段寄存器的引用 21
2.3 8086/8088的寻址方式 22
2.3.3 直接寻址方式 23
2.3.1 立即寻址方式 23
2.3.2 寄存器寻址方式 23
2.3.4 寄存器间接寻址方式 24
2.3.5 寄存器相对寻址方式 25
2.3.6 基址加变址寻址方式 26
2.3.7 相对基址加变址寻址方式 27
2.4 8086/8088指令系统 28
2.4.1 指令集说明 28
2.4.2 数据传送指令 29
2.4.3 堆栈操作指令 32
2.4.4 标志操作指令 34
2.4.5 加减运算指令 36
2.4.6 乘除运算指令 41
2.4.7 逻辑运算和移位指令 44
2.4.8 转移指令 51
2.5 习题 58
3.1.1 语句的种类和格式 63
3.1 汇编语言的语句 63
第3章 汇编语言及其程序设计初步 63
3.1.2 数值表达式 64
3.1.3 地址表达式 67
3.2 变量和标号 67
3.2.1 数据定义语句 67
3.2.2 变量和标号 70
3.3 常用伪指令语句和源程序组织 73
3.3.1 符号定义语句 74
3.3.2 段定义语句 75
3.3.3 汇编语言源程序的组织 79
3.4 顺序程序设计 81
3.4.1 顺序程序举例 81
3.4.2 简单查表法代码转换 83
3.4.3 查表法求函数值 85
3.5 分支程序设计 86
3.5.1 分支程序举例 86
3.5.2 利用地址表实现多向分支 91
3.6.1 循环程序举例 94
3.6 循环程序设计 94
3.6.2 多重循环程序举例 103
3.7 习题 106
第4章 子程序设计和DOS功能调用 110
4.1 子程序设计 110
4.1.1 过程调用和返回指令 110
4.1.2 过程定义语句 115
4.1.3 子程序举例 116
4.1.4 子程序说明信息 118
4.1.5 寄存器的保护与恢复 119
4.2 主程序与子程序间的参数传递 121
4.2.1 利用寄存器传递参数 121
4.2.2 利用约定存储单元传递参数 123
4.2.3 利用堆栈传递参数 125
4.2.4 利用CALL后续区传递参数 127
4.3 DOS功能调用及应用 129
4.3.1 DOS功能调用概述 129
4.3.2 基本I/O功能调用 130
4.3.3 应用举例 132
4.4 磁盘文件管理及应用 141
4.4.1 DOS磁盘文件管理功能调用 141
4.4.2 应用举例 143
4.5 子程序的递归和重入 150
4.5.1 递归子程序 150
4.5.2 可重入子程序 151
4.6 习题 152
5.1.1 I/O端口地址和I/O指令 155
5.1 输入和输出的基本概念 155
第5章 输入输出与中断 155
5.1.2 数据传送方式 156
5.1.3 存取RT/CMOS RAM 157
5.2 查询方式传送数据 160
5.2.1 查询传送方式 160
5.2.2 读实时钟 161
5.2.3 查询方式打印输出 162
5.3.1 中断和中断传送方式 164
5.3 中断 164
5.3.2 中断向量表 165
5.3.3 中断响应过程 168
5.3.4 外部中断 168
5.3.5 内部中断 170
5.3.6 中断优先级和中断嵌套 172
5.3.7 中断处理程序的设计 173
5.4 基本输入输出系统BIOS 174
5.4.1 基本输入输出系统BIOS概述 174
5.4.2 键盘输入 175
5.4.3 显示输出 178
5.4.4 打印输出 188
5.5 软中断处理程序举例 191
5.5.1 打印I/O程序 191
5.5.2 时钟显示程序 194
5.6 习题 197
6.1 字符串处理 200
6.1.1 字符串操作指令 200
第6章 简单应用程序的设计 200
6.1.2 重复前缀 205
6.1.3 字符串操作举例 208
6.2 十进制数算术运算调整指令及应用 215
6.2.1 给合BCD码的算术运算调整指令 215
6.2.2 未组合BCD码的算术运算调整指令 216
6.2.3 应用举例 218
6.3 DOS程序段前缀和特殊情况处理程序 224
6.3.1 DOS程序段前缀PSP 224
6.3.2 对Ctrl+C键和Ctrl+Break键的处理 228
6.4 TSR程序设计举例 234
6.4.1 驻留的时钟显示程序 234
6.4.2 热键激活的TSR程序 236
6.5 习题 238
第7章 高级汇编语言技术 241
7.1 结构和记录 241
7.1.1 结构 241
7.1.2 记录 246
7.2 宏 249
7.2.1 宏指令的定义和使用 250
7.2.2 宏指令的用途 251
7.2.3 宏指令中参数的使用 253
7.2.4 特殊的宏运算符 254
7.2.5 宏与子程序的区别 256
7.2.6 与宏有关的伪指令 256
7.2.7 宏定义的嵌套 258
7.3 重复汇编 260
7.3.1 伪指令REPT 260
7.3.2 伪指令IRP 261
7.3.3 伪指令IRPC 262
7.4 条件汇编 262
7.4.1 条件汇编伪指令 263
7.4.2 条件汇编与宏结合 265
7.5 源程序的结合 268
7.5.1 源程序的结合 268
7.5.2 宏库的使用 271
7.6 习题 273
第8章 模块化程序设计技术 275
8.1 段的完整定义 275
8.1.1 完整的段定义 275
8.1.2 关于堆栈段的说明 280
8.1.3 段组的说明和使用 281
8.2 段的简化定义 285
8.2.1 存储模型说明伪指令 285
8.2.2 简化的段定义伪指令 285
8.2.3 存储模型说明伪指令的隐含动作 288
8.3.1 伪指令PUBLIC和伪指令EXTRN 289
8.3 模块间的通信 289
8.3.2 模块间的转移 291
8.3.3 模块间的信息传递 293
8.4 子程序库 298
8.4.1 子程序库 298
8.4.2 建立子程序库 298
8.4.3 使用举例 301
8.5.1 汇编格式的编译结果 303
8.5 编写供Turbo C调用的函数 303
8.5.2 汇编模块应该遵守的约定 306
8.5.3 参数传递和寄存器保护 307
8.5.4 举例 309
8.6 习题 313
第二部分 提高部分 314
第9章 90386程序设计基础 314
9.1 80386寄存器 314
9.1.2 段寄存器 315
9.1.1 通用寄存器 315
9.1.3 指令指针和标志寄存器 316
9.2 80386存储器寻址 316
9.2.1 存储器寻址基本概念 317
9.2.2 灵活的存储器寻址方式 318
9.2.3 支持各种数据结构 320
9.3 80386指令集 320
9.3.1 数据传送指令 321
9.3.2 算术运算指令 326
9.3.3 逻辑运算和移位指令 327
9.3.4 控制转移指令 330
9.3.5 串操作指令 334
9.3.6 高级语言支持指令 337
9.3.7 条件字节设置指令 340
9.3.8 位操作指令 342
9.3.9 处理器控制指令 345
9.4.1 说明 346
9.4 实方式下的程序设计 346
9.4.2 实例 348
9.5 习题 358
第10章 保护方式下的80386及其编程 361
10.1 保护方式简述 361
10.1.1 存储管理机制 361
10.1.2 保护机制 363
10.2 分段管理机制 364
10.2.1 段定义和虚拟地址到线性地址转换 364
10.2.2 存储段描述符 366
10.2.3 全局和局部描述符表 369
10.2.4 段选择子 370
10.2.5 段描述符高速缓冲寄存器 371
10.3 80386控制寄存器和系统地址寄存器 372
10.3.1 控制寄存器 372
10.3.2 系统地址寄存器 374
10.4 实方式与保护方式切换实例 375
10.4.1 演示实方式和保护方式切换的实例(实例一) 376
10.4.2 演示32位代码段和16位代码段切换的实例(实例二) 382
10.5.1 系统段描述符 389
10.5 任务状态段和控制门 389
10.5.2 门描述符 390
10.5.3 任务状态段 392
10.6 控制转移 395
10.6.1 任务内无特权级变换的转移 395
10.6.2 演示任务内无特权级变换转移的实例(实例三) 397
10.6.3 任务内不同特权级的变换 408
10.6.4 演示任务内特权级变换的实例(实例四) 410
10.6.5 任务切换 420
10.6.6 演示任务切换的实例(实例五) 422
10.7 80386的中断和异常 431
10.7.1 80386的中断和异常 431
10.7.2 异常类型 433
10.7.3 中断和异常的转移方法 437
10.7.4 演示中断处理的实例(实例六) 442
10.7.5 演示异常处理的实例(实例七) 450
10.7.6 各种转移途径小结 465
10.8 操作系统类指令 466
10.8.1 实方式和任何特权级下可执行的指令 467
10.8.2 实方式及特权级0下可执行的指令 468
10.8.3 只能在保护方式下执行的指令 470
10.8.4 显示关键寄存器内容的实例(实例八) 473
10.8.5 特权指令 477
10.9 输入/输出保护 477
10.9.1 输入/输出保护 477
10.9.3 演示输入/输出保护的实例(实例九) 481
10.9.2 重要标志保护 481
10.10 分页管理机制 492
10.10.1 存储器分页管理机制 492
10.10.2 线性地址到物理地址的转换 493
10.10.3 页级保护和虚拟存储器支持 496
10.10.4 页异常 498
10.10.5 演示分页机制的实例(实例十) 499
10.11 虚拟8086方式 506
10.11.1 V86方式 506
10.11.2 进入和离开V86方式 506
10.11.3 演示进入和离开V86方式的实例(实例十一) 510
10.11.4 V86方式下的敏感指令 522
10.12 习题 523
第11章 80486及Pentium程序设计基础 525
11.1 80486程序设计基础 525
11.1.1 寄存器 525
11.1.2 指令系统 527
11.1.3 片上超高速缓存 530
11.2.1 调试寄存器 535
11.2 80486对调试的支持 535
11.2.2 演示调试故障/陷阱的实例 538
11.3 Pentium程序设计基础 543
11.3.1 寄存器 543
11.3.2 指令系统 545
11.3.3 处理器的识别 548
11.3.4 片上超高速缓存 553
11.4 基于Pentium的程序优化技术 557
11.4.1 流水线优化技术 557
11.4.2 分支优化技术 564
11.4.3 超高速缓存优化技术 567
11.5 习题 569
第三部分 上机实验指导 572
第12章 实验指导 572
12.1 实验的一般步骤 572
12.2 汇编器和连接器的使用 574
12.2.1 MASM的使用 574
12.2.2 LINK的使用 575
12.2.3 TASM的使用 577
12.3 调试器DEBUG的使用 578
12.2.4 TLINK的使用 578
12.3.1 启动和退出DEBUG 579
12.3.2 命令一览 580
12.3.3 利用DEBUG调试程序 582
12.4 Turbo Debugger的使用 587
12.4.1 启动和退出TD 587
12.4.2 利用TD调试汇编程序 588
参考文献 592
附录Pentium指令与标志参考表 593