第1章 预备知识 1
1.1 计算机语言 1
1.1.1 面向机器的语言 1
1.1.2 非面向机器的计算机语言 5
1.1.3 学习汇编语言的意义 6
1.2 思维方式的转变 6
1.2.1 从设计师到设计师兼建筑师 7
1.2.2 冯·诺依曼计算机的设计思想 7
1.2.3 从高级语言的局限性看汇编语言 9
1.2.4 汇编语言的主要特性 10
1.3 计算机中数的表示 11
1.3.1 数的表示 12
1.3.2 数制转换 14
1.3.3 ASCII码 15
1.3.4 数的补码表示 16
1.3.5 二进制编码的十进制数BCD码(Bina-CodedDecimal) 19
1.3.6 IEEE浮点数 20
1.3.7 从不同角度来看待一个二进制数 23
习题 23
第2章 80x86实模式汇编的运行环境 25
2.1 DOS下Edit的使用 25
2.1.1 汇编源程序文件的编辑及相关知识 25
2.1.2 用Edit编辑汇编源程序 25
2.2 Debug调试汇编程序 29
2.2.1 用Debug运行汇编语言程序 29
2.2.2 典型Debug命令剖析 31
2.2.3 Debug命令综述 34
2.3 Emu8086的使用 40
2.3.1 Emu8086简介 40
2.3.2 Emu8086的安装及使用 41
2.3.3 Emu8086显示模拟 41
2.3.4 Emu8086应用实例 41
2.4 用MASM(或ASM)运行汇编语言程序 44
2.4.1 MASM汇编语言程序的调试步骤 44
2.4.2 MASM典型实例 45
2.5 Windows下虚拟DOS运行环境的搭建 50
习题 51
第3章 PC引导机制 53
3.1 加电自检POST操作 53
3.2 操作系统的加载 55
3.3 嵌入式系统与汇编语言 57
习题 58
第4章 8086微处理器及其寻址方式 59
4.1 8086CPU的基本逻辑结构 59
4.1.1 8086基本功能结构 59
4.1.2 理解并运用基本逻辑结构图 60
4.1.3 8086CPU的运行特点 61
4.1.4 执行程序的步骤 61
4.1.5 指令与数据 62
4.2 8086寄存器组 63
4.2.1 通用寄存器 64
4.2.2 段寄存器 65
4.2.3 控制寄存器 65
4.3 8086的存储器分段结构 66
4.3.1 8086的存储器分段 66
4.3.2 段寄存器的引用 70
4.4 堆栈 71
4.4.1 什么是栈 71
4.4.2 8086的栈机制 71
4.5 寻址方式 74
4.5.1 汇编指令的书写形式 74
4.5.2 三种类型的操作数 75
4.5.3 寻址规则 77
习题 83
第5章 汇编语言程序设计基础 85
5.1 源程序的书写格式 85
5.1.1 简化段定义格式 85
5.1.2 完整段定义格式 90
5.2 汇一编语言的语句 95
5.3 汇编语言的数据组织及其访问 98
5.4 汇编语言程序正常结束的方式 103
5.5 指令简介 104
习题 109
第6章 数据传送与顺序程序设计 111
6.1 MOV指令与顺序程序设计 111
6.2 堆栈操作 118
6.3 数据交换指令 121
6.4 查表转换指令 124
6.5 地址目标传送指令 127
6.6 标志位传送指令 129
6.7 端口输入/输出指令 131
6.8 顺序程序设计 133
习题 133
第7章 算术运算指令与程序设计 135
7.1 算术运算和逻辑运算对标志寄存器的影响 135
7.2 算术运算的数据格式 138
7.3 二进制数加减运算 139
7.3.1 二进制数加法 139
7.3.2 二进制数减法 143
7.3.3 二进制数加减运算的有效性 145
7.4 无符号二进制数乘除运算 146
7.5 带符号二进制数乘除运算 151
7.5.1 带符号二进制数乘法运算指令 151
7.5.2 带符号二进制数除法运算指令 153
7.6 非压缩型BCD码运算 155
7.6.1 非压缩型BCD码加法运算 155
7.6.2 非压缩型BCD码减法运算 158
7.6.3 非压缩型BCD码乘法运算 158
7.6.4 非压缩型BCD码除法运算 161
7.7 压缩型BCD码加减运算 162
7.7.1 压缩型BCD码加法运算 162
7.7.2 压缩型BCD码减法运算 165
习题 166
第8章 逻辑运算 168
8.1 逻辑运算指令 168
8.2 移位指令 170
8.3 循环移位指令 175
8.4 逻辑运算指令应用 177
8.4.1 BCD码的输入/输出 177
8.4.2 二进制数的输入/输出 181
习题 184
第9章 分支程序与循环程序设计 186
9.1 分支 186
9.1.1 标号 186
9.1.2 无条件转移指令 188
9.1.3 条件转移 195
9.2 程序设计流程图 198
9.3 循环程序设计 200
9.3.1 循环控制指令 200
9.3.2 单重循环 204
9.3.3 多重循环 207
习题 212
第10章 串操作指令与程序设计 214
10.1 字符串操作综述 214
10.2 字符串操作指令 219
10.3 串操作指令的重复前缀 227
习题 228
第11章 过程 230
11.1 过程的定义与说明 230
11.2 过程调用 232
11.3 过程的返回 238
11.4 模块间的调用和转移 238
11.5 寄存器的保护和恢复 242
11.6 调用程序与被调用过程之间的数据传送 244
11.7 递归 246
11.8 C语言调用汇编过程 248
习题 250
第12章 高级汇编语言技术 252
12.1 结构 252
12.2 联合 260
12.3 记录 262
12.4 宏 269
习题 273
第13章 中断及中断处理程序 276
13.1 中断及中断相关概念 276
13.1.1 中断的基本概念 276
13.1.2 中断向量表 276
13.1.3 中断源及中断源的识别 278
13.1.4 中断的分类 279
13.1.5 中断处理机制 281
13.1.6 CPU响应中断的条件 282
13.1.7 中断的优先级 282
13.1.8 中断嵌套 283
13.2 软件中断 284
13.2.1 软件中断的处理过程 284
13.2.2 软件中断的分类 285
13.2.3 软件中断的访问 287
13.3 DOS中断服务 288
13.3.1 DOS中断服务的概念 288
13.3.2 常用的DOS中断 288
13.4 BIOS中断服务 290
13.4.1 BIOS的概念 290
13.4.2 BIOS中断服务的概念 290
13.4.3 常见的BIOS中断 290
13.5 DOS和BIOS功能调用实例 291
13.6 典型的中断处理程序实例 306
13.6.1 中断处理程序的编程原则 306
13.6.2 读取和设置中断向量 306
习题 311
第14章 端口输入/输出与外设编程 314
14.1 端口 314
14.2 8259A、8253和8255典型芯片编程 316
14.2.1 8259A芯片编程 316
14.2.2 8255编程 319
14.2.3 8253编程 322
14.3 其他芯片编程 325
14.4 综合实例 328
习题 335
第15章 32位80x86汇编 336
15.1 80386系统结构及内存寻址 336
15.1.1 80386CPU的逻辑结构 337
15.1.2 80386CPU的工作模式 343
15.1.3 80386CPU内存寻址 344
15.1.4 80386CPU内存分页机制 346
15.2 WIN32汇编开发环境 349
15.2.1 MASM32配置与使用 350
15.2.2 32位调试程序TD32 352
15.3 WIN32汇编实践 353
15.3.1 WIN32汇编语言程序结构 354
15.3.2 启蒙实例—“Hello,World!” 358
15.3.3 嵌入式汇编实例—高精度定时 363
15.3.4 综合实例—图形化时钟 367
习题 375
附录A ASCII表 377
附录B 调试程序DEBUG简介 380
附录C 键盘扫描码set1 386
参考文献 388