《汇编语言程序设计(第2版)》主要介绍基于80x86的汇编语言程序设计方法和技术,第1章~第10章为主体部分,包括计算机基本组成结构和指令系统,循环、分支、子程序和宏汇编技术的程序设计;第11章为输入输出的一些典型应用,其中基本每章配有一组实验,共有10组实验题供选用和参考。
作者及所在教学团队成员绝大部分为具有博士学位的高校教师,具有多年《汇编语言程序设计》教育和实践经验,本教材力求做到同时面向高校计算机相关专业学生,以及面向计算机领域从业人员,具体说来:
(1)汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。计算机领域从业人员的零售需求量很大。
(2)《汇编语言程序设计》是计算机科学与技术院系所有专业的必修课,但一般课时非常有限(本校32学时),所以内容要精炼,逻辑性和可读性要求高,如果编排合理,全国高等院校计算机相关专业学生的教材需求量也比较大;
(3)此外本教材为教师提供了教学大纲、多媒体课件、课后习题答案等服务资料,方便教学;
刘慧婷 博士,安徽大学计算机科学与技术学院副教授,主要研究项目及领域: 数据挖掘,教学经验丰富。其余作者都为安徽大学计算机科学与技术学院老师。
第1章 汇编语言基础知识 1
1.1 汇编语言简介 1
1.1.1 机器语言与汇编语言 1
1.1.2 汇编语言的组成 2
1.1.3 为什么要学习汇编语言 2
1.2 计算机中数据的表示 2
1.2.1 不同进位计数制及其相互转换 2
1.2.2 二进制数和十六进制数的运算 4
1.2.3 带符号数的补码表示 5
1.2.4 补码的加法和减法 6
1.2.5 无符号数的表示 7
1.2.6 字符的表示 7
1.2.7 基本逻辑运算 8
本章小结 9
习题1 9
第2章 计算机基本原理 10
2.1 计算机系统组成 10
2.2 存储器 11
2.2.1 16位结构的CPU 11
2.2.2 存储器 11
2.2.3 存储器分段 13
2.2.4 逻辑地址 14
2.2.5 CPU对内存的读写操作 15
2.3 中央处理器(CPU)中的寄存器 17
2.3.1 寄存器介绍 17
2.3.2 CS和IP 20
2.3.3 堆栈 20
2.4 外部设备和接口 21
2.5 32位80x86CPU的工作模式 21
习题2 22
实验1 用Debug命令查看寄存器和内存
中的内容 22
第3章 汇编语言程序实例及上机
操作 28
3.1 汇编语言的工作环境 28
3.1.1 汇编语言的系统工作文件 28
3.1.2 进入DOS命令行的方式 29
3.1.3 常用的DOS命令 29
3.2 汇编语言程序实例 31
3.2.1 单个字符的键盘输入与显示输出 31
3.2.2 显示字符串 32
3.3 程序实例的上机步骤 33
3.3.1 编辑——建立ASM源程序文件 33
3.3.2 汇编——产生OBJ二进制目标
文件 34
3.3.3 连接——产生EXE可执行文件 34
3.3.4 LST列表文件 34
3.3.5 程序的运行 36
3.3.6 程序的跟踪和调试 36
3.4 在WIN7系统中执行汇编 39
3.5 几个常用的DOS系统功能调用
(INT 21H) 42
本章小结 44
习题3 44
实验2 上机过程及程序调试 45
第4章 操作数的寻址方式 47
4.1 立即寻址方式 47
4.2 寄存器寻址方式 48
4.3 直接寻址方式 49
4.4 寄存器间接寻址方式 51
4.5 寄存器相对寻址方式 52
4.6 基址变址寻址方式 53
4.7 相对基址变址寻址方式 54
本章小结 55
习题4 56
实验3 不同寻址方式的灵活运用 56
第5章 常用指令系统 61
5.1 数据传送指令 62
5.1.1 通用数据传送指令 62
5.1.2 累加器专用传送指令 65
5.1.3 地址传送指令 67
5.1.4 标志寄存器传送指令 68
5.2 算术运算指令 69
5.2.1 类型扩展指令 69
5.2.2 加法指令 70
5.2.3 减法指令 73
5.2.4 乘法指令 76
5.2.5 除法指令 77
5.2.6 BCD码的十进制调整指令 79
5.3 逻辑与移位指令 81
5.3.1 逻辑指令 81
5.3.2 移位指令 82
5.4 串操作指令 84
5.4.1 MOVS串传送指令 84
5.4.2 CMPS串比较指令 86
5.4.3 SCAS串扫描指令 88
5.4.4 STOS串存入指令 89
5.4.5 LODS从串中取数指令 90
5.5 程序转移指令 91
5.5.1 无条件转移指令与程序的可
重新定位 91
5.5.2 条件转移指令 93
5.5.3 循环指令 96
本章小结 97
习题5 97
实验4 算术及位串处理程序 100
第6章 伪指令与源程序格式 101
6.1 伪指令 101
6.1.1 处理机选择伪指令 101
6.1.2 段定义伪指令 101
6.1.3 程序开始和结束伪指令 103
6.1.4 数据定义与存储器单元分配
伪指令 103
6.1.5 类型属性操作符 105
6.1.6 THIS操作符和LABEL伪操作 105
6.1.7 表达式赋值伪指令“EQU”
和“=” 106
6.1.8 汇编地址计数器$与定位伪指令 106
6.1.9 基数控制伪指令 108
6.1.10 过程定义伪指令 108
6.2 语句格式 109
6.2.1 名字项和操作项 109
6.2.2 表达式和操作符 109
6.3 EXE文件与COM文件 112
6.3.1 程序段前缀PSP 112
6.3.2 COM文件 114
本章小结 115
习题6 115
实验5 伪指令 117
第7章 分支与循环程序设计 119
7.1 分支程序设计 119
7.1.1 分支程序结构 119
7.1.2 单分支程序 120
7.1.3 复合分支程序 121
7.1.4 多分支程序 123
7.2 循环程序设计 125
7.2.1 循环程序结构 125
7.2.2 计数循环程序 126
7.2.3 条件循环程序 127
7.2.4 条件计数循环程序 129
7.2.5 多重循环程序 131
本章小结 132
习题7 132
实验6 分支程序设计 134
实验7 循环程序设计 134
第8章 子程序设计 135
8.1 子程序结构 135
8.1.1 子程序调用指令 135
8.1.2 过程定义与过程结构 136
8.1.3 保存和恢复现场寄存器 138
8.2 子程序的参数传递 138
8.2.1 用寄存器传递参数 139
8.2.2 用变量传递参数 142
8.2.3 用地址表传递参数的通用
子程序 144
8.2.4 用堆栈传递参数的通用子程序 147
8.2.5 用结构变量传递参数的通用
子程序 151
8.3 多模块程序设计 154
8.3.1 多模块之间的参数传递 154
8.3.2 显示十进制数的通用模块 156
8.3.3 C语言程序调用汇编语言
子程序 159
本章小结 160
习题8 160
实验8 子程序设计和多模块程序设计 161
第9章 宏汇编及其他高级伪
操作 163
9.1 宏汇编 163
9.1.1 宏定义、宏调用和宏展开 163
9.1.2 宏定义的嵌套 166
9.1.3 宏定义中使用宏调用 167
9.1.4 带间隔符的实参 167
9.1.5 连接操作符& 168
9.1.6 宏替换操作符% 168
9.1.7 LOCAL伪操作 169
9.1.8 使用宏库文件 170
9.2 其他高级伪操作 173
9.2.1 PURGE伪操作 173
9.2.2 列表伪操作 173
9.2.3 重复汇编 173
9.2.4 条件汇编 176
习题9 178
实验9 宏汇编程序设计 179
第10章 输入/输出和中断 180
10.1 外部设备与输入/输出 180
10.1.1 I/O 端口 180
10.1.2 I/O的数据传送控制方式 182
10.2 中断 184
10.2.1 中断的概念 184
10.2.2 中断向量表 187
10.2.3 中断过程 189
10.2.4 中断调用指令 189
10.3 中断处理程序设计 190
10.3.1 中断处理程序的基本功能 190
10.3.2 中断处理程序设计举例 191
本章小结 193
习题10 193
实验10 中断程序设计 194
第11章 输入/输出应用 195
11.1 可编程定时器 195
11.1.1 可编程定时器工作原理 195
11.1.2 定时器驱动扬声器发声 197
11.1.3 通用发声程序 198
11.1.4 乐曲程序 201
11.2 键盘调用 202
11.2.1 字符码与扫描码 202
11.2.2 键盘中断调用 203
11.2.3 键盘缓冲区 205
11.3 显示器的文本方式显示 206
11.3.1 显示方式 206
11.3.2 显示存储器与直接写屏 208
11.3.3 BIOS调用 209
11.4 显示器的图形方式显示 214
11.4.1 图形存储器 214
11.4.2 直接视频显示 215
11.4.3 BIOS功能视频显示 216
11.5 磁盘文件存取 218
习题11 223
实验11 输入/输出程序设计 223
附录1 80x86指令系统一览 224
附录2 伪操作与操作符 238
附录3 中断向量地址一览 251
附录4 DOS系统功能调用
(INT 21H) 253
附录5 BIOS功能调用 261
附录6 Windows 104键键盘
扫描码 266
参考文献 268