第1章 绪论 1
1.1 什么是汇编语言 1
1.1.1 机器语言 1
1.1.2 汇编语言 2
1.2 为什么学习汇编语言 4
1.3 如何学习汇编语言 7
1.4 汇编语言源程序举例 9
1.5 计算机中信息编码的奥秘 12
1.6 使用符号的说明 14
习题1 15
上机实践1 16
第2章 Intel中央处理器 17
2.1 Intel公司微处理器的发展史 17
2.2 Intel x86微处理器结构 19
2.3 执行部件 20
2.3.1 32位CPU中的通用寄存器 21
2.3.2 通用寄存器应用示例 22
2.4 标志寄存器 23
2.4.1 条件标志位 24
2.4.2 控制标志位 26
2.4.3 系统标志位 27
2.5 指令预取部件和指令译码部件 27
2.6 分段部件和分页部件 28
2.7 x86的三种工作方式 30
2.8 Intel公司酷睿微体系结构 31
习题2 33
上机实践2 34
第3章 主存储器及数据在计算机内的表示形式 35
3.1 主存储器 35
3.1.1 数据存储的基本形式 35
3.1.2 数据地址的类型及转换 36
3.2 数值数据在计算机内的表示形式 37
3.2.1 有符号数和无符号数表示法 37
3.2.2 BCD码 38
3.3 字符数据在计算机内的表示形式 39
3.4 数据段定义 39
3.4.1 数据定义伪指令 40
3.4.2 表达式 40
3.4.3 汇编地址计数器 42
3.4.4 数据段定义示例 43
3.5 主存储器分段管理 44
3.6 主存储器物理地址的形成 45
3.6.1 8086和x86-32实方式下物理地址的形成 45
3.6.2 保护方式下物理地址的形成 47
习题3 50
上机实践3 51
第4章 寻址方式 53
4.1 寻址方式概述 53
4.2 立即寻址 54
4.3 寄存器寻址 56
4.4 直接寻址 57
4.4.1 直接寻址的基本概念 57
4.4.2 直接寻址的用法示例 58
4.5 寄存器间接寻址 60
4.5.1 寄存器间接寻址的基本用法 60
4.5.2 寄存器间接寻址与C语言指针的比较 62
4.6 变址寻址 63
4.7 基址加变址寻址 64
4.8 寻址方式综合举例 66
4.9 x86机器指令编码规则 68
4.10 8086/80386的寻址方式 73
习题4 74
上机实践4 78
第5章 常用机器指令 79
5.1 通用机器指令概述 79
5.2 数据传送指令 80
5.2.1 一般数据传送指令 80
5.2.2 带条件的数据传送指令 82
5.2.3 堆栈操作指令 83
5.2.4 标志寄存器传送指令 86
5.2.5 地址传送指令 88
5.3 算术运算指令 89
5.3.1 加法指令 90
5.3.2 减法指令 91
5.3.3 乘法指令 92
5.3.4 除法指令 94
5.3.5 符号扩展指令 95
5.4 逻辑运算指令 95
5.5 移位指令 97
5.6 位操作和字节操作指令 99
5.7 标志位控制指令和杂项指令 100
5.8 I/O指令 100
习题5 102
上机实践5 103
第6章 顺序和分支程序设计 105
6.1 概述 105
6.2 程序中的伪指令 107
6.2.1 处理器选择伪指令 107
6.2.2 存储模型说明伪指令 108
6.2.3 段定义及程序结束伪指令 109
6.3 转移指令 110
6.3.1 转移指令概述 110
6.3.2 简单条件转移指令 110
6.3.3 无符号条件转移指令 111
6.3.4 有符号条件转移指令 113
6.3.5 无条件转移指令 114
6.4 简单分支程序设计 115
6.4.1 C语言的if语句与汇编语句的对应关系 115
6.4.2 分支程序设计示例 117
6.4.3 分支程序设计注意事项 120
6.5 多分支程序设计 121
6.5.1 多分支向无分支的转化 121
6.5.2 switch语句的编译 123
6.6 条件控制流伪指令 125
习题6 128
上机实践6 129
第7章 循环程序设计 131
7.1 循环程序 131
7.1.1 循环程序的结构 131
7.1.2 循环控制方法 132
7.1.3 循环控制指令 134
7.2 单重循环程序设计 137
7.3 多重循环程序设计 139
7.4 循环程序中的细节分析 141
7.5 与C循环程序反汇编的比较 145
7.6 循环控制伪指令 148
习题7 150
上机实践7 151
第8章 子程序设计 152
8.1 子程序的概念 152
8.2 子程序的基本用法 153
8.2.1 子程序的定义 153
8.2.2 子程序的调用和返回 154
8.2.3 在主程序与子程序之间传递参数 155
8.2.4 子程序调用现场的保护 157
8.2.5 子程序设计应注意的问题 158
8.3 子程序应用示例 159
8.3.1 字符串的比较 159
8.3.2 数串转换 161
8.3.3 串数转换 163
8.3.4 自我修改返回地址的子程序 165
8.3.5 自我修改的子程序 168
8.4 C语言程序中函数的运行机理 169
8.5 汇编语言中子程序的高级用法 172
8.5.1 局部变量的定义和使用 173
8.5.2 子程序的原型说明、定义和调用 174
8.5.3 子程序的高级用法举例 176
8.6 递归子程序的设计 177
习题8 180
上机实践8 181
第9章 串处理程序设计 183
9.1 串操作指令简介 183
9.2 串传送指令 185
9.3 串比较指令 187
9.4 串搜索指令 189
9.5 向目的串中存数指令 190
9.6 从源串中取数指令 191
习题9 192
上机实践9 192
第10章 复合数据类型的定义和使用 194
10.1 结构体 194
10.1.1 结构体的定义 194
10.1.2 结构变量的定义 195
10.1.3 结构变量的访问 196
10.1.4 结构信息的自动计算 198
10.2 结构变量的数据存储 200
10.2.1 汇编语言中结构变量的存储 200
10.2.2 与C语言结构变量存储的差异 201
10.3 联合体 202
习题10 203
上机实践10 203
第11章 程序设计的其他方法 205
11.1 汇编语言多模块程序设计 205
11.2 C语言程序和汇编语言程序的混合 209
11.2.1 函数的申明和调用 209
11.2.2 变量的申明和访问 210
11.3 内嵌汇编 211
11.4 模块程序设计中的注意事项 213
11.5 宏功能程序设计 214
11.5.1 宏定义 214
11.5.2 宏调用 215
11.5.3 宏指令与子程序的比较 216
11.6 可执行文件的格式 217
习题11 223
上机实践11 224
第12章 中断和异常处理 225
12.1 中断与异常的基础知识 225
12.1.1 中断和异常的概念 225
12.1.2 中断描述符表 227
12.1.3 中断和异常的响应过程 229
12.1.4 软中断指令 230
12.2 Windows中的结构化异常处理 231
12.2.1 编写异常处理函数 231
12.2.2 异常处理程序的注册 232
12.2.3 全局异常处理程序的注册 234
12.3 C语言异常处理程序反汇编分析 236
习题12 239
上机实践12 239
第13章 Win32窗口程序设计 242
13.1 Win32窗口程序设计基础 242
13.1.1 窗口程序运行的基本过程 242
13.1.2 Windows消息 245
13.1.3 Win32窗口程序的开发环境 247
13.2 Win32窗口应用程序的结构 248
13.2.1 主程序 248
13.2.2 窗口主程序 248
13.2.3 窗口消息处理程序 249
13.3 窗口应用程序开发实例 250
13.3.1 不含资源的窗口程序 250
13.3.2 包含菜单和对话框的窗口程序 253
13.4 与C语言开发的窗口程序比较 260
习题13 264
上机实践13 264
第14章 x87 FPU程序设计 265
14.1 浮点数据 265
14.1.1 浮点数据在机内的表示形式 265
14.1.2 浮点类型变量的定义 267
14.2 x87 FPU的寄存器 268
14.2.1 x87 FPU数据寄存器 268
14.2.2 x87 FPU其他寄存器 269
14.3 x87 FPU指令 271
14.4 浮点数处理程序示例 274
习题14 277
上机实践14 277
第15章 MMX程序设计 278
15.1 MMX技术简介 278
15.2 MMX指令简介 280
15.3 MMX编程示例 282
15.4 使用C语言编写MMX应用程序 285
习题15 286
上机实践15 287
第16章 SSE程序设计 288
16.1 SSE技术简介 288
16.2 SSE指令简介 289
16.2.1 组合和标量单精度浮点指令 290
16.2.2 64位SIMD整数指令 292
16.2.3 状态管理指令 293
16.2.4 缓存控制指令 293
16.3 SSE2及后续版本的指令简介 293
16.3.1 组合双精度浮点数和标量双精度浮点数指令 294
16.3.2 64位和128位整数指令 295
16.4 SSE编程示例 296
16.5 使用C语言编写SSE应用程序 297
习题16 299
上机实践16 300
第17章 AVX程序设计 301
17.1 AVX技术简介 301
17.2 AVX指令简介 302
17.2.1 新引入的指令 302
17.2.2 功能扩展指令 303
17.3 AVX编程示例 304
习题17 306
上机实践17 306
第18章 x86-64位汇编程序设计 307
18.1 x86-64的运行环境 307
18.1.1 寄存器 307
18.1.2 寻址方式 308
18.1.3 指令系统 309
18.2 64位的程序设计 309
18.2.1 64位平台下与32位平台下的区别 309
18.2.2 显示一个消息框 312
18.2.3 浮点数运算 312
18.2.4 程序自我修改 313
18.3 x86-64机器指令编码规则 314
习题18 317
上机实践18 317
第19章 上机操作 318
19.1 创建工程和生成可执行程序 318
19.2 程序的调试 319
19.3 编译链接器的配置 322
19.4 其他操作 324
附录 ASCII字符表 326
参考文献 327