第1章 预备知识 1
1.1 进位计数制及其相互转换 1
1.1.1 进位计数制概述 1
1.1.2 常用的进位计数制 1
1.1.3 不同进位计数制间的转换 2
1.2 二进制运算规则 3
1.2.1 二进制算术运算 3
1.2.2 二进制逻辑运算 4
1.3 数据在计算机中的表示方法 5
1.3.1 整数的表示 5
1.3.2 字符的表示 5
1.3.3 汉字的表示 6
1.3.4 Unicode标准 7
1.3.5 BCD码 8
习题1 9
第2章 汇编语言编程基础 10
2.1 汇编语言概述 10
2.1.1 程序设计语言概述 10
2.1.2 汇编语言简介 11
2.2 Intel公司微处理器简介 14
2.2.1 Intel 80X86系列 14
2.2.2 CPU的组成 17
2.2.3 3种运行模式 17
2.3 PC操作系统简介 19
2.3.1 MS-DOS 19
2.3.2 桌面Windows操作系统 20
2.3.3 Windows NT系列 20
2.3.4 Linux 21
2.4 程序可见寄存器组 22
2.4.1 通用寄存器 22
2.4.2 段寄存器 23
2.4.3 控制寄存器 24
2.5 存储器 26
2.5.1 基本概念 26
2.5.2 存储顺序 29
2.5.3 实模式寻址 30
2.5.4 保护模式寻址 32
2.6 外部设备 34
习题2 35
第3章 PC的指令系统 36
3.1 与数据有关的寻址方式 36
3.1.1 立即寻址方式 36
3.1.2 寄存器寻址方式 37
3.1.3 直接寻址方式 37
3.1.4 寄存器间接寻址方式 38
3.1.5 寄存器相对寻址方式 38
3.1.6 基址变址寻址方式 39
3.1.7 相对基址变址寻址方式 40
3.1.8 比例变址寻址方式 41
3.2 与转移地址有关的寻址方式 41
3.2.1 段内直接寻址方式 42
3.2.2 段内间接寻址方式 43
3.2.3 段间直接寻址方式 44
3.2.4 段间间接寻址方式 44
3.3 数据传送指令 45
3.3.1 通用数据传送指令 45
3.3.2 输入输出指令 50
3.3.3 查表转换指令 51
3.3.4 地址传送指令 52
3.3.5 标志传送指令 54
3.4 算术运算指令 54
3.4.1 二进制算术运算指令 54
3.4.2 十进制算术运算指令 63
3.5 逻辑指令 67
3.5.1 逻辑运算指令 67
3.5.2 位测试指令 68
3.5.3 位扫描指令 69
3.5.4 基本移位指令 70
3.5.5 循环移位指令 71
3.5.6 双精度移位指令 71
3.6 程序控制指令 72
3.6.1 转移指令 72
3.6.2 循环指令 78
3.6.3 子程序调用与返回指令 79
3.6.4 中断调用与返回指令 82
3.7 处理机控制指令 83
3.7.1 标志操作指令 83
3.7.2 其他处理机控制指令 84
3.8 串操作指令 84
3.8.1 串指令的特点 84
3.8.2 串指令 85
3.9 条件字节设置指令 89
习题3 90
第4章 汇编语言程序组织与开发环境 94
4.1 汇编语言语句格式 94
4.2 数据与符号定义伪指令 94
4.2.1 数据定义伪指令 94
4.2.2 符号定义伪指令 96
4.3 结构伪指令 98
4.4 汇编语言操作符 101
4.5 实模式16位汇编语言程序开发 104
4.5.1 DOS内存布局 104
4.5.2 16位程序框架中的伪指令 105
4.5.3 汇编语言源程序结构 107
4.5.4 实模式的汇编语言程序上机过程 111
4.5.5 DEBUG调试程序 117
4.6 DOS下的数据输入输出 122
4.6.1 使用ROM BIOS中断调用 122
4.6.2 使用DOS系统功能调用 130
4.7 高版本中的部分伪指令 134
4.7.1 微处理器伪指令 134
4.7.2 高版本程序框架中的.伪指令 135
4.7.3 预定义符号 137
4.7.4 实模式程序的简化结构 137
4.8 Windows程序的执行环境 140
4.8.1 Windows内存布局 140
4.8.2 Windows的保护机制 143
4.8.3 用户界面 145
4.9 Windows汇编源程序的基本格式 146
4.9.1 控制台界面的汇编源程序 146
4.9.2 Windows界面的汇编程序 153
4.10 Windows 32位汇编程序开发环境 154
4.10.1 Windows下的MASM汇编器 154
4.10.2 Windows下的LINK连接器 155
4.10.3 Windbg调试程序 156
4.11 使用VC IDE开发汇编程序 164
4.11.1 建立工程 164
4.11.2 设置调试选项 166
4.11.3 常用调试命令 170
4.12 几个与数据输入输出有关的Windows API函数 171
习题4 173
第5章 分支与循环程序设计 176
5.1 顺序结构程序设计 176
5.2 分支程序设计 176
5.2.1 IF_THEN_ELSE结构分支程序设计 176
5.2.2 SWITCH_CASE结构分支程序设计 183
5.3 循环程序设计 187
5.3.1 单重循环程序设计 188
5.3.2 多重循环程序设计 191
习题5 193
第6章 子程序设计 195
6.1 子程序结构 195
6.1.1 子程序的定义和调用 195
6.1.2 设计子程序时应注意的问题 195
6.2 堆栈 197
6.2.1 堆栈特点 197
6.2.2 堆栈用途 197
6.2.3 子程序的返回地址 199
6.3 参数传递 200
6.3.1 C语言函数的参数传递方式 200
6.3.2 汇编语言子程序的参数传递方式 203
6.3.3 带参数子程序的调用 204
6.3.4 子程序中的局部变量 206
6.4 子程序的嵌套和递归 208
6.4.1 子程序嵌套 208
6.4.2 子程序递归 208
6.5 缓冲区溢出攻击原理 209
6.5.1 堆栈溢出 209
6.5.2 数据区溢出 210
6.6 模块化程序设计 211
6.6.1 模块化程序设计基本概念 211
6.6.2 模块间的通信 212
6.7 C语言和汇编语言的混合编程 214
6.7.1 直接嵌入 214
6.7.2 C程序调用汇编子程序 215
6.7.3 汇编调用C函数 217
6.7.4 C++与汇编的联合编程 218
习题6 219
第7章 Windows界面编程 221
7.1 文件I/O 221
7.1.1 文件及其基本操作 221
7.1.2 文件操作的基本函数 221
7.2 控制台执行环境 227
7.2.1 输入/出重定向 227
7.2.2 命令行参数及程序返回值 227
7.3 GUI程序执行环境 229
7.3.1 窗口 229
7.3.2 菜单 232
7.3.3 对话框 234
7.3.4 GDI编程 238
7.4 多线程编程 243
7.4.1 线程的创建和终止 244
7.4.2 线程的同步 246
7.4.3 互斥锁 248
7.4.4 线程同步演示程序 249
习题7 251
第8章 汇编语言高级编程技术 252
8.1 宏 252
8.1.1 宏指令的定义和使用 252
8.1.2 宏指令中参数的使用 254
8.1.3 宏与子程序的区别 254
8.2 重复与条件汇编 255
8.2.1 重复汇编 255
8.2.2 条件汇编 257
8.3 汇编高级语法 259
8.3.1 条件测试表达式 259
8.3.2 分支伪操作 261
8.3.3 循环伪操作 262
8.4 程序优化 263
8.4.1 运行时间的优化 263
8.4.2 占用空间的优化 269
8.5 X86-64架构简介 271
习题8 273
第9章 I/O程序设计 274
9.1 I/O基本概念 274
9.1.1 I/O端口及其分配 274
9.1.2 保护模式下I/O指令的限制 277
9.2 直接传送方式 277
9.2.1 CMOS数据的读取 278
9.2.2 扬声器发声程序 281
9.2.3 串行I/O 283
9.2.4 并行I/O 285
9.2.5 直接读取硬盘扇区 286
9.3 中断传送方式 294
9.3.1 基本原理 294
9.3.2 中断处理程序 296
9.4 DMA传送方式 297
9.4.1 DMA传送的过程 297
9.4.2 软盘控制器与DMA 298
9.4.3 PCI-IDE控制器与DMA 299
习题9 313
第10章 保护模式及其编程 314
10.1 内存管理 314
10.1.1 保护模式下的特殊寄存器 314
10.1.2 实模式和保护模式的切换 319
10.1.3 分页管理 324
10.2 任务 327
10.2.1 任务状态段 327
10.2.2 任务切换过程 329
10.2.3 任务切换实例 330
10.3 特权级保护 339
10.3.1 对数据访问的保护 339
10.3.2 对程序转移的保护 340
10.3.3 门 341
10.3.4 输入输出保护 343
10.4 中断和异常 346
10.4.1 中断和异常的类型 347
10.4.2 中断门和陷阱门 349
10.4.3 保护模式下的中断处理实例 349
10.5 虚拟8086模式 358
习题10 359
参考文献 360