1 80×86微型计算机的组织 1
1.1 微处理器的历史回顾 1
1.1.1 机械计算器时代 1
1.1.2 电子计算机时代 1
目录 1
1.2 IBM-PC系列计算机的存储器和I/O系统 3
1.2.1 IBM-PC系列计算机的存储器 3
1.2.2 I/O空间 7
1.2.3 IBM-PC系列计算机的总线 8
1.3.1 CPU中的寄存器 9
1.3 微处理器的工作模式 9
1.3.2 实模式存储器寻址 13
1.3.3 保护模式存储器寻址 17
1.3.4 存储器分页 21
问题和练习1 24
2 寻址方式与汇编语言程序的组织 26
2.1 汇编语言 26
2.1.1 机器语言 26
2.1.2 汇编语言 26
2.2 寻址方式 28
2.2.1 数据寻址方式 29
2.2.2 程序存储器寻址方式 34
2.2.3 堆栈存储器寻址方式 36
2.3 汇编语言程序的组成 37
2.3.1 汇编语言源程序的组织 37
2.3.2 变量与标号 41
2.4 段的简化定义 45
2.4.1 存储模型说明伪指令 45
2.4.2 简化的段定义伪指令 46
2.5.1 上机环境 48
2.5.2 上机的一般步骤 48
2.5 上机指导 48
2.5.3 汇编器和连接器的使用 50
2.6 调试程序DEBUG 54
2.6.1 直接在内存中建立和运行程序 54
2.6.2 使用DEBUG 55
问题和练习2 62
3 数据传送指令 65
3.1 通用数据传送 65
3.1.1 MOV(传送)指令 65
3.1.2 PUSH/POP(压栈/出栈)指令 65
3.2.1 LEA(装入有效地址)指令 68
3.2 地址传送指令 68
3.1.3 XCHG(交换)指令 68
3.2.2 LDS、LES、LFS、LGS和LSS指令 69
3.3 IN/OUT(输入/输出)指令 71
3.4 串数据传送指令 72
3.4.1 LODS指令 72
3.4.2 STOS指令 73
3.4.3 MOVS指令 75
3.4.4 INS(串输入)指令 76
3.5.1 XLAT(翻译)指令 77
3.5 其他数据传送指令 77
3.4.5 OUTS(串输出)指令 77
3.5.2 MOVSX和MOVZX 78
3.5.3 BSWAP(字节交换)指令 79
问题和练习3 79
4 算术与逻辑运算指令 81
4.1 加法、减法和比较 81
4.1.1 加法 81
4.1.2 减法 86
4.2 乘法和除法 89
4.2.1 乘法 89
4.2.2 除法 91
4.3.1 BCD码算术运算 94
4.3 BCD码和ASCII码算术运算 94
4.3.2 ASCII码算术运算 95
4.4 逻辑指令 98
4.4.1 逻辑运算指令 98
4.4.2 移位指令 102
4.5 串扫描和串比较指令 105
4.5.1 SCAS指令 106
4.5.2 CMPS指令 106
问题和练习4 107
5.1.1 无条件转移指令(JMP) 110
5 程序控制指令 110
5.1 转移指令 110
5.1.2 条件转移和条件设置 115
5.1.3 循环指令 118
5.2 过程调用指令 119
5.2.1 过程 119
5.2.2 CALL(调用)指令 121
5.2.3 RET(返回)指令 124
5.3 中断概述 125
5.3.2 中断指令 126
5.3.1 中断向量和中断向量表 126
5.4 机器控制指令及其他指令 128
问题和练习5 130
6 DOS与BIOS中断及应用 132
6.1 DOS功能调用及其应用 132
6.1.1 DOS功能调用概述 132
6.1.2 DOS的基本输入/输出功能调用 133
6.1.3 应用举例 134
6.2 磁盘文件管理及应用 144
6.2.1 DOS磁盘文件管理功能调用 144
6.2.2 应用举例 145
6.3 基本输入/输出系统(BIOS) 152
6.3.1 BIOS概述 152
6.3.2 键盘输入 153
6.3.3 显示输出 156
6.3.4 打印输出 166
问题和练习6 168
7 汇编语言程序设计 170
7.1 汇编语言的语句 170
7.1.1 语句的种类和格式 170
7.1.2 表达式 171
7.1.3 常用伪指令语句 176
7.2 顺序程序设计 178
7.3 分支程序设计 181
7.3.1 用转移指令实现分支程序 181
7.3.2 利用地址表实现多向分支 185
7.4 循环程序设计 187
7.5 子程序设计 196
7.5.1 子程序设计概述 196
7.5.2 子程序举例 198
7.5.3 主程序和子程序之间的参数传递 200
问题和练习7 205
8 高级汇编语言技术 209
8.1 结构和记录 209
8.1.1 结构 209
8.1.2 记录 214
8.2 宏 217
8.2.1 宏指令的定义和使用 217
8.2.2 宏指令的用途 219
8.2.3 宏指令中参数的使用 220
8.2.4 特殊的宏运算符 221
8.2.6 与宏有关的伪指令 223
8.2.5 宏与子程序的区别 223
8.3 重复汇编 226
8.3.1 伪指令REPT 226
8.3.2 伪指令IRP 226
8.3.3 伪指令IRPC 227
8.4 条件汇编 228
问题和练习8 231
9.1 段的完整定义的进一步说明 232
9.1.1 完整的段定义 232
9 模块化程序设计 232
9.1.2 关于堆栈段的说明 236
9.1.3 段组的说明和使用 237
9.1.4 存储模型说明伪指令的隐含动作 239
9.2 模块间的通信 241
9.2.1 伪指令PUBLIC和伪指令EXTRN 241
9.2.2 模块间的转移 242
9.2.3 模块间的信息传递 245
9.3 子程序库 249
9.3.1 子程序库 249
9.3.2 建立子程序库 250
9.3.3 使用举例 253
9.5.1 调用协议 254
9.5 汇编语言与高级语言的接口 254
9.5.2 数据类型 256
9.5.3 语言接口 256
9.5.4 用于C语言的完全段定义 259
问题和练习9 259
10 汇编语言编程高级专题 260
10.1 输入/输出程序设计 260
10.1.1 查询方式传送数据 260
10.1.2 中断传送方式 264
10.2.1 程序头 273
10.2 设备驱动程序设计 273
10.2.2 策略过程 274
10.2.3 设备驱动程序命令 276
10.2.4 中断过程 281
10.2.5 设备驱动程序举例 281
10.3 保护模式下的程序设计 287
10.3.1 DOS保护模式接口(DPMI) 288
10.3.2 以保护模式显示扩展内存 292
问题和练习10 301
参考文献 302