第1章 基础知识 1
1.1 常用数制及其相互转换 1
1.2 存储器内的数字表示 3
1 2.1 存储器 3
1.2 2 存储顺序 6
1 3 数据表示 8
1.3 1 整数的表示 8
1 3 2 字符的表示 9
1 3 3 汉字的表示 9
1 3 4 Unicode标准 10
1 3 5 BCD码 11
习题1 11
2 1 3 16位CPU:8086、8088、80286 13
2 1 2 8位CPU:8008、8080 13
2.1.1 4位CPU:4004 13
2.1 Intel CPU的发展 13
第2章 Intel 80x86系列微处理器 13
2 1.4 32位CPU:80386、80486 14
2.1.5 准64位CPU:Pentium、PⅡ、PⅢ、P4 14
2 1 6 64位CPU:Itanium 16
2.2 PC机操作系统的发展 16
2 2 1 MS-DOS 16
2.2.2 桌面Windows系统 17
2 2 3 Windows NT系列 17
2.2 4 Linux 18
2.3 16位CPU及DOS基础 19
2.3.1 执行单元 19
2.3 2 总线接口单元 20
2.3 3 寄存器 20
2 3 4 存储器的分段 22
2 3 5 DOS的内存布局 23
2.3.6 I/O地址空间 25
2.4 32位CPU及Windows基础 25
2.4 1 三种工作模式 25
2 4 2 寄存器 27
2 4.3 Windows应用程序的内存布局 29
2.4 4 Windows的保护机制 32
习题2 34
第3章 Windows汇编程序基础 36
3.1 机器语言、汇编语言和高级语言 36
3 1.1 机器语言 36
3 1.2 汇编语言 37
3 1 3 高级语言 38
3 1 4 三种语言的比较 38
3.2 汇编语言程序的上机过程 39
3 2.1 汇编程序的开发过程 40
3 2 2 MASM汇编器 41
3 2.3 LINK链接器 42
3 2.4 汇编链接步骤 42
3.3 汇编源程序的格式 43
3 3 1 一个显示字符串的汇编程序 43
3.3.2 程序格式 44
3 3.3 一个Windows界面的汇编程序 51
3.4 操作数的寻址方式 52
3 4.1 立即寻址 53
3.4 2 寄存器寻址 53
3.4.3 直接寻址 54
3.4.4 寄存器间接寻址 54
3 4 5 寄存器相对寻址 55
3.4.6 基址变址寻址 56
3.4.7 基址变址相对寻址 57
3 4 8 基址变址比例相对寻址 57
3.4.9 寻址方式总结 58
3.4.10 段超越 59
3.5 数据定义 60
3 5.1 常数的表示 60
3.5.2 简单数据类型 61
3.5.3 DUP伪操作 62
3 5 4 数据定义的例子程序 62
3.6 操作符 66
3.6.1 常用伪操作 66
3.6.2 算术操作符 71
3.7.1 立即数 72
3.7 寻址方式的应用 72
3.6.4 关系操作符 72
3.6.3 逻辑操作符 72
3 7 2 数组元素的访问 73
3 7 3 指针 74
习题3 76
第4章 数据操作 78
4.1 传送指令 78
4 1 1 通用数据传送指令 78
4.1 2 数据交换指令 81
4.1 3 取地址指令 82
4.2 算术运算 83
4 2 1 加法指令 83
4 2 2 减法指令 86
4.2.3 符号位扩展指令 89
4.2.4 乘法指令 91
4.2.5 除法指令 93
4.3 BCD码算术运算 95
4.3.1 压缩BCD码调整指令 95
4 3 2 非压缩BCD码调整指令 96
4.4 位运算指令 98
4.4.1 逻辑运算指令 98
4.4.2 位操作指令 102
4.4 3 移位指令 104
习题4 109
第5章 分支与循环程序设计 111
5.1 转移 111
5 1.1 无条件转移指令 111
5.1.2 条件转移指令 112
5.2 分支结构程序设计 114
5 2.1 单分支结构和双分支结构 115
5.2.2 多分支结构 116
5.2.3 折半查找程序 119
5.2.4 有序表插入 121
5.3 循环程序设计 123
5.3.1 循环指令 124
5 3.2 不定次数的循环 128
5.3.3 循环体中操作的控制 128
5 3 4 多重循环 130
5.4 跳转表 132
5 4 1 switch语句 132
5 4 2 跳转表 133
习题5 135
第6章 子程序设计 137
6.1 堆栈 137
6 1 1 堆栈空间 137
6 1 2 进栈和出栈指令 138
6 1 3 堆栈的用途 141
6.2 子程序 143
6 2 1 子程序的定义和调用 144
6 2 2 调用和返回指令 144
6 2 3 C语言函数的参数传递方式 147
6 2 4 汇编语言子程序的参数传递方式 153
6 2 5 带参数子程序的调用 154
6 2 6 子程序中的局部变量 157
6 2 7 子程序的嵌套 163
6 2 8 子程序的递归 163
6.3 Windows API 166
习题6 168
第7章 常用数据结构 171
7.1 数组与内存块 171
7 1 1 块操作 172
7 1 2 块传送指令 173
7 1 3 块存储指令 178
7 1 4 块装入指令 178
7 1 5 块比较指令 179
7 1 6 块扫描指令 181
7.2 字符串处理 182
7 2 1 常用字符串处理函数 183
7 2 2 常用内存块处理函数 185
7.3 结构 188
7 3 1 表示时间的结构 188
7 3 2 结构的声明和定义 190
7.3.3 结构数组 193
7.4 链表 198
7 4.1 动态分配和释放内存 198
7 4 2 链表中元素的插入与删除 199
7 4 3 链表的排序 204
7 4.4 双向链表 207
7.5 函数指针 207
7 5 1 指向子程序(函数)的指针 208
7 5 2 结构中的函数指针 210
7.6 程序执行环境 212
7 6 1 输入/输出重定向 212
7.6 2 命令行参数及程序返回值 213
习题7 214
第8章 汇编语言高级编程技术 216
8.1 宏 216
8.1 1 宏指令的定义和使用 216
8 1 2 宏指令中参数的使用 220
8 1 3 特殊的宏操作符 222
8.1 4 宏与子程序的区别 226
8.1 5 重复汇编 227
8.1 6 条件汇编 230
8.2 汇编高级语法 236
8 2 1 条件测试表达式 237
8.2 2 分支伪操作 239
8.2 3 循环伪操作 241
8.3 模块化程序设计 244
8.3 1 模块化程序设计基本概念 244
8.3.2 模块间的通信 245
8.4 C和汇编的混合编程 247
8 4 1 直接嵌入 247
8 4 2 C程序调用汇编子程序 249
8 4 3 汇编调用C函数 259
8.4.4 C++与汇编 261
8.5 程序优化 268
8 5.1 运行时间的优化 269
8.5 2 占用空间的优化 276
习题8 280
第9章 I/O程序设计 283
9.1 I/O操作 283
9.1.1 I/O端口及其分配 283
9.1.2 I/O指令 286
9.1.3 保护模式下I/O指令的限制 288
9.2 直接传送方式 289
9.2.1 CMOS数据的读取 289
9 2.2 扬声器发声程序 292
9 2.3 串行I/O 294
9 2 4 并行I/O 296
9.3.1 基本原理 298
9.3 中断传送方式 298
9 3.2 中断服务程序 300
9.4 DMA传送方式 302
9 4.1 DMA传送的过程 303
9 4 2 软盘控制器与DMA 304
9.5 文件I/O 304
9 5 1 文件 305
9 5 2 文件操作的基本函数 307
9 5.3 文件处理实例 310
习题9 316
第10章 保护模式及其编程 318
10.1 保护模式基础 318
10 1 1 32位CPU内部结构 318
10.1.2 三种运行模式 320
10 1 3 寄存器 321
10 1 4 显示CPU寄存器的值 327
10.2 虚拟内存管理 331
10 2 1 段式内存管理功能 331
10 2 2 页式内存管理功能 336
10.3 特权级保护 347
10.3 1 对数据访问的保护 348
10 3 2 对程序转移的保护 350
10 3 3 门 351
10.4 任务 354
10 4.1 任务状态段 354
10.4.2 任务切换 358
10 4 3 输入/输出保护 362
10.4 4 编写驱动程序修改I/O位图 364
10.5 中断和异常 369
10.5.1 中断和异常的类型 369
10 5 2 中断门和陷阱门 376
10 5.3 中断和异常的处理过程 378
10.5.4 通过任务门的转移 381
10.5.5 结构化异常处理 384
10.6 虚拟8086模式 389
10 6 1 虚拟8086任务 389
10 6 2 虚拟8086模式的进入和退出 391
10.7 操作系统类指令 394
10 7.1 在实模式和任何特权级下可执行的指令 395
10.7.2 仅在实模式及特权级0下可执行的指令 396
10.7.3 仅在保护模式下可执行的指令 397
习题10 401
附录A 使用VC编译调试汇编程序 403
附录B ASCⅡ码表 410
附录C 汇编语言伪指令和操作符 412
参考文献 414