第1章 编程语言及数据的基础知识 1
1.1 开篇语 1
1.2 简介 3
1.3 计算机编程语言 3
1.3.1 语言之间的关系 3
1.3.2 翻译流水线 3
1.3.3 编程语言与相应文件及编程工具之间的关系 6
1.3.4 为什么要学习汇编语言 7
1.4 数据的表示 8
1.4.1 计数系统 8
1.4.2 怎样表示整数 8
1.4.3 怎样表示无符号的整数 9
1.4.4 怎样表示带符号的整数 12
1.4.5 怎样保存字符 14
1.5 布尔表达式 16
1.6 3位计算机示例 17
1.7 小结 18
1.8 关键术语 18
1.9 代码回顾 19
1.10 习题 20
1.11 作业 21
第2章 处理器与计算机系统体系结构 22
2.1 简介 22
2.2 体系结构概述 22
2.3 处理器 26
2.3.1 缓存与寄存器 27
2.3.2 64位处理器 31
2.3.3 指令的执行 31
2.3.4 指令流水线 32
2.4 输入与输出 33
2.5 小结 35
2.6 关键术语 35
2.7 习题 36
2.8 作业 37
第1章 与第2章 补充材料 与体系结构有关的更多细节 38
第3章 汇编语言及其语法的基础知识 41
3.1 简介 41
3.2 基本元素 42
3.2.1 汇编代码的五大支柱 42
3.2.2 字面量 46
3.2.3 标签与注释 48
3.3 定义数据 49
3.4 写出能够正常运行的范例程序 55
3.5 小结 56
3.6 关键术语 56
3.7 代码回顾 57
3.8 习题 57
3.9 作业 58
第4章 基本指令 60
4.1 简介 60
4.2 数据的移动与算术运算 61
4.2.1 移动数据 61
4.2.2 加法与减法 62
4.2.3 乘法与除法 64
4.2.4 移位 69
4.2.5 处理负值 71
4.3 数据的寻址与传输 72
4.3.1 数据对齐 72
4.3.2 数据寻址 73
4.3.3 数组 75
4.3.4 改变数据的大小及类型 78
4.4 小结 79
4.5 关键术语 80
4.6 代码回顾 80
4.7 习题 81
4.8 作业 81
第5章 中级指令 83
5.1 简介 83
5.2 按位执行的布尔运算 83
5.3 分支 88
5.3.1 无条件跳转 88
5.3.2 有条件跳转 88
5.3.3 复合条件 91
5.4 重复执行 92
5.4.1 用CX/ECX/RCX计数器实现循环 92
5.4.2 用开发者自定义的计数器实现循环 94
5.5 小结 97
5.6 关键术语 97
5.7 代码回顾 97
5.8 习题 98
5.9 作业 99
第6章 函数 100
6.1 简介 100
6.2 栈内存入门 100
6.3 x86与x86_64的调用约定 101
6.3.1 cdecl(32位) 102
6.3.2 stdcall(32位) 109
6.3.3 x86_64(64位) 110
6.3.4 有用的细节 114
6.4 实现 114
6.5 小结 118
6.6 关键术语 118
6.7 重要的寄存器(32位和64位) 118
6.8 代码回顾 119
6.9 与平台有关的注意事项 119
6.10 习题 120
6.11 作业 120
第6章 补充材料 程序6-3 122
第7章 与字符串有关的指令及结构体 123
7.1 简介 123
7.2 辅助指令 123
7.3 基本字符串指令 125
7.3.1 MOVS 125
7.3.2 CMPS 126
7.3.3 SCAS 129
7.3.4 STOS 131
7.3.5 LODS 132
7.4 结构体 133
7.5 小结 135
7.6 关键术语 135
7.7 代码回顾 135
7.8 习题 136
7.9 作业 137
第8章 浮点运算 138
8.1 简介 138
8.2 浮点数的表示方式 139
8.2.1 IEEE表示法 139
8.2.2 特殊值 141
8.2.3 次正规数 141
8.2.4 舍入 142
8.3 浮点数的实现 143
8.3.1 x87 143
8.3.2 MMX——题外话 152
8.3.3 SSE 154
8.3.4 XOP、FMA3/4、F16C——分化 159
8.3.5 AVX 160
8.4 小结 161
8.5 关键术语 162
8.6 重要的寄存器(32位和64位) 162
8.7 代码回顾 162
8.8 习题 164
8.9 作业 165
第8章 补充材料 第8章 中的程序 167
第9章 内联汇编与宏 177
9.1 简介 177
9.2 内联汇编 177
9.2.1 与编译器有关的细节 178
9.2.2 内联式的汇编语句 178
9.2.3 为各种汇编方言提供支持 184
9.2.4 注意事项 185
9.3 宏 186
9.3.1 对比宏与函数 186
9.3.2 定义并调用宏 186
9.4 小结 188
9.5 关键术语 188
9.6 习题 188
9.7 作业 189
第10章 与处理器及体系结构有关的高级话题 191
10.1 简介 191
10.2 处理器与系统的机能 192
10.2.1 系统寄存器 192
10.2.2 处理器模式 193
10.2.3 内存模型 193
10.2.4 代码范例 197
10.3 中断与系统调用 198
10.3.1 软件中断 198
10.3.2 硬件中断 204
10.3.3 通过INT进行系统调用(旧方法) 204
10.3.4 通过SYSENTER、SYSCALL及程序库/API进行系统调用(新方法) 207
10.4 小结 214
10.5 关键术语 215
10.6 代码回顾 216
10.7 习题 216
10.8 作业 217
第10章 补充材料 第10章 中的程序和资源 218
第11章 其他架构 223
11.1 简介 223
11.2 CISC与RISC 224
11.3 更多架构 225
11.3.1 ARM 225
11.3.2 AVR 228
11.3.3 RISC-V 231
11.3.4 System-z/Architecture 233
11.4 量子架构 234
11.5 小结 236
11.6 关键术语 236
11.7 习题 236
11.8 作业 237
第12章 硬件与电子元件 239
12.1 简介 239
12.2 电学基础 239
12.2.1 基本的物理量 239
12.2.2 交流与直流 241
12.3 电子元件 242
12.3.1 供电设备 242
12.3.2 电阻器 244
12.3.3 二极管 245
12.3.4 电容器 245
12.3.5 晶体管 245
12.4 集成电路 246
12.5 常见的实现产品 247
12.5.1 计算机处理器 247
12.5.2 Raspberry Pi 247
12.5.3 Apple iPhone与Apple Watch 248
12.6 小结 248
12.7 关键术语 248
12.8 习题 249
12.9 作业 250
附录简介 251
附录A 各种汇编语法之间的对应关系 253
附录B 为汇编语言配置开发环境 256
附录C 反汇编 261
附录D 用GDB工具调试汇编程序 268
附录E 链接汇编代码及C++代码 273
附录F 函数与栈 278
附录G CPUID指令的用法 282
附录H ASCII和十进制算术运算 289
附录I 编译器内部函数 293