第1部分 预备知识 1
第1章 汇编语言与二进制 1
学习目标 1
1.1 认识汇编语言 1
1.1.1 指令与程序 1
1.1.2 机器语言、汇编语言和高级语言 2
1.1.3 为什么学习和使用汇编语言 3
1.2 汇编语言中的计数制 5
1.2.1 进位计数制 5
1.2.2 十进制数与二进制数之间的相互转换 5
1.2.3 十进制数与十六进制数之间的相互转换 6
1.2.4 二进制数与十六进制数之间的相互转换 7
1.3 计算机中数和字符的表示 8
1.3.1 无符号数与有符号数 8
1.3.2 有符号数的补码表示 8
1.3.3 ASCII码和BCD码 10
1.4 基本的二进制运算规则 12
1.4.1 算术运算 12
1.4.2 逻辑运算 13
1.4.3 补码的加减法运算 13
思考与习题 14
第2部分 实模式编程 16
第2章 8086计算机组织 16
学习目标 16
2.1 微型计算机硬件系统 16
2.2 Intel 80x86系列微处器简介 18
2.3 8086微处理器的功能结构 21
2.4 实模式下的内存组织 22
2.4.1 内存的线性编址和数据存储 22
2.4.2 内存的分段管理 23
2.4.3 逻辑地址到物理地址的转换 24
2.4.4 多个逻辑段的数据管理 25
2.5 8086寄存器组 26
2.5.1 通用寄存器 27
2.5.2 段寄存器 28
2.5.3 指令指针寄存器 29
2.5.4 标志寄存器 29
思考与习题 31
第3章 简短的程序设计 33
学习目标 33
3.1 汇编指令基本格式 33
3.2 开始设计汇编语言程序 35
3.2.1 几个常用的汇编指令 35
3.2.2 设计第一个汇编语言程序 40
3.2.3 使用DEBUG进行汇编语言程序设计 41
3.3 JMP、JE、JNE指令与分支 49
3.4 LOOP指令与循环 53
3.5 与数据有关的四类寻址方式 56
3.5.1 固定寻址方式 56
3.5.2 立即寻址方式 57
3.5.3 寄存器寻址方式 58
3.5.4 存储器寻址方式 58
3.6 一条指令的执行过程 63
3.7 上机实践 64
思考与习题 65
第4章 汇编语言源程序的结构及设计过程 69
学习目标 69
4.1 汇编语言的语句类型和语句格式 69
4.1.1 初识完整的汇编语言源程序 70
4.1.2 执行性语句和说明性语句 71
4.1.3 汇编语言源程序的语句格式 71
4.2 汇编语言源程序的结构形式 74
4.2.1 完整的段定义结构 74
4.2.2 程序段前缀结构 75
4.2.3 简化的段定义结构 76
4.3 汇编语言上机过程 77
4.3.1 源程序的编辑 78
4.3.2 对源程序的汇编 79
4.3.3 对目标程序的连接 80
4.3.4 EXE文件的运行与调试 81
4.3.5 COM文件的运行与调试 84
4.3.6 使用MASM 6.11下的ML.EXE汇编和连接 87
4.4 汇编语言源程序中的伪指令 88
4.4.1 符号定义伪指令 88
4.4.2 数据定义伪指令 90
4.4.3 定位伪指令与地址计数器 93
4.4.4 段定义伪指令 95
4.4.5 程序开始和结束伪指令 97
4.4.6 简化段定义伪指令 97
4.4.7 处理器选择伪指令 99
4.5 上机实践 99
思考与习题 102
第5章 程序的基本控制结构及设计方法 105
学习目标 105
5.1 程序设计的一般步骤及基本控制结构 105
5.1.1 程序设计的一般步骤 105
5.1.2 算法的表示 105
5.1.3 顺序、分支、循环结构 106
5.2 顺序结构程序设计及常用指令 107
5.2.1 数据传送类指令 107
5.2.2 算术运算类指令 110
5.2.3 逻辑运算类指令 114
5.2.4 移位类指令 116
5.2.5 标志位操作指令 118
5.2.6 顺序结构程序设计示例 118
5.2.7 上机实践 120
5.3 分支结构程序设计及常用指令 120
5.3.1 分支程序的基本结构形式 121
5.3.2 与转移地址有关的寻址方式及无条件转移指令JMP 121
5.3.3 条件转移类指令 123
5.3.4 分支结构程序设计示例 126
5.3.5 上机实践 131
5.4 循环结构程序设计及常用指令 132
5.4.1 循环程序的组成 133
5.4.2 循环程序的结构形式 133
5.4.3 循环控制类指令 134
5.4.4 数据串操作类指令及其重复前缀 136
5.4.5 循环控制的方法及循环结构程序设计示例 140
5.4.6 上机实践 144
思考与习题 146
第6章 子程序设计 149
学习目标 149
6.1 子程序的引出 149
6.1.1 调用程序与子程序 149
6.1.2 堆栈在子程序设计中的作用 149
6.1.3 过程定义伪指令 152
6.1.4 CALL和RET指令 153
6.2 子程序的结构 155
6.2.1 调用程序与子程序在同一代码段内的程序结构 155
6.2.2 调用程序与子程序不在同一代码段内的程序结构 155
6.3 子程序设计方法 156
6.3.1 子程序设计时应注意的几点问题 156
6.3.2 现场的保护与恢复 156
6.3.3 子程序说明文件 157
6.3.4 主程序与子程序之间参数传递的方法 157
6.4 子程序的嵌套与递归 167
6.5 子程序设计示例 169
6.6 上机实践 173
思考与习题 175
第7章 中断及输入/输出程序设计 177
学习目标 177
7.1 简单的输入/输出程序设计 177
7.1.1 接口与端口 177
7.1.2 IN和OUT指令 177
7.1.3 一个发声程序示例 179
7.2 中断 180
7.2.1 中断及中断处理程序 180
7.2.2 中断源与中断分类 181
7.2.3 中断向量表 183
7.2.4 INT和IRET指令 184
7.2.5 中断过程 185
7.2.6 实模式下中断程序设计 187
7.3 BIOS和DOS中断 191
7.3.1 BIOS中断调用及其使用方法 192
7.3.2 DOS功能调用及其使用方法 193
7.4 上机实践 195
思考与习题 196
第8章 高级汇编语言程序设计 198
学习目标 198
8.1 宏汇编 198
8.1.1 宏的定义、调用和展开 198
8.1.2 多次宏调用时标号的处理 200
8.1.3 宏中参数的使用 202
8.1.4 宏库的使用 205
8.1.5 宏与子程序 206
8.2 重复汇编 207
8.2.1 定重复汇编 207
8.2.2 不定重复汇编 208
8.3 条件汇编 209
8.4 上机实践 211
8.5 模块化程序设计 212
8.5.1 模块化分的原则 213
8.5.2 模块间的通信 213
8.5.3 模块化程序设计上机步骤 216
8.5.4 模块化程序设计示例 216
8.6 上机实践 220
思考与习题 220
第3部分 保护模式编程 222
第9章 32位指令及其编程 222
学习目标 222
9.1 32位CPU的内部结构 222
9.1.1 32位CPU内部结构及其功能 222
9.1.2 程序可见的32位寄存器组 223
9.2 80386存储器寻址方式 225
9.2.1 寄存器寻址基本概念 225
9.2.2 存储器寻址方式 226
9.3 32位扩展指令 227
9.3.1 数据传送类指令 228
9.3.2 算术运算类指令 231
9.3.3 逻辑和移位类指令 233
9.3.4 串操作类指令 234
9.3.5 控制转移类指令 235
9.3.6 位操作类指令 236
9.3.7 保护模式类指令 237
9.4 32位指令的程序设计 238
9.4.1 80386编程格式 238
9.4.2 伪指令简化段定义格式 239
9.4.3 简单的32位编程示例 240
思考与习题 243
第10章 保护模式下的存储器管理 246
学习目标 246
10.1 保护模式与实模式的比较 246
10.1.1 实模式寻址特点 246
10.1.2 保护模式寻址特点 247
10.2 虚拟内存管理 247
10.2.1 虚拟地址、线性地址、物理地址的转换过程 248
10.2.2 保护机制 249
10.3 控制寄存器和系统地址寄存器 250
10.3.1 控制寄存器CR0、CR1、CR2、CR3 250
10.3.2 描述符表 251
10.3.3 全局描述符表寄存器GDTR 252
10.3.4 局部描述符表寄存器LDTR 253
10.3.5 中断描述符表寄存器IDTR 253
10.3.6 任务状态段寄存器TR 253
10.4 段式内存管理 254
10.4.1 段的定义及存储段描述符 254
10.4.2 段寄存器与段选择子 256
10.4.3 段描述符高速缓冲寄存器 257
10.5 页式内存管理 258
10.5.1 分页管理机制 258
10.5.2 两级页映射表 258
10.5.3 线性地址到物理地址的转换 260
10.5.4 页转换高速缓存TLB 260
10.5.5 页面映射示例 261
思考与习题 261
第11章 保护模式及其编程 263
学习目标 263
11.1 实模式与保护模式之间的切换 263
11.1.1 两种模式之间的切换 263
11.1.2 头文件 264
11.1.3 从实模式切换到保护模式的编程 268
11.2 控制门 272
11.2.1 系统段描述符 272
11.2.2 门描述符 274
11.3 任务切换 275
11.3.1 任务状态段TSS 275
11.3.2 直接任务切换 277
11.3.3 间接任务切换 278
11.3.4 任务切换的步骤 278
11.3.5 任务内特权级变化的程序转移 279
11.4 中断和异常 281
11.4.1 80386的中断和异常 281
11.4.2 异常类型 282
11.4.3 中断和异常的处理过程 287
11.5 操作系统类指令 291
11.5.1 实模式和任何特权级下可执行的指令 291
11.5.2 实模式及特权级0下可执行的指令 291
11.5.3 只能在保护模式下执行的指令 293
11.6 输入/输出保护 295
11.6.1 输入/输出的保护方法 295
11.6.2 重要标志保护 297
11.7 虚拟8086模式 298
11.7.1 V86模式 298
11.7.2 进入及退出V86模式 299
11.7.3 V86模式下的敏感指令 302
思考与习题 302
附录A BIOS中断调用 304
附录B DOS功能调用(INT 21H) 307
附录C 集成化开发环境PWB 312
参考文献 316