《高级汇编语言程序设计实用教程(第2版)/高等院校信息技术规划教材》介绍基于80x86汇编语言程序设计的技术和方法,内容包括80x86指令系统、寻址方式、宏指令与伪指令、汇编语言格式与程序结构、分支程序设计、循环程序设计、子程序设计、宏汇编技术、系统功能调用与使用方法、高级语言与汇编语言的调用接口、汇编语言程序调试方法、逆向工程与反汇编等。本书注重实践,突出应用,在系统地介绍汇编语言程序设计方法和技术的基础上,通过大量的实例,培养学生分析问题和解决问题的能力;各章均附有单元测试,部分章有单元实验,便于学生上机实践和课后练习。本书可作为高等院校计算机及电子信息类专业学生汇编语言程序设计课程的教材,也可作为相关领域的工程技术人员的参考书。
Foreword2009年,我们编写了《汇编语言程序设计实用教程》教材。教材出版后,得到了许多高校的认可,受到了专家和师生的好评。在此,对一直支持我们工作的各位专家、教师和读者表示衷心的感谢!
“汇编语言程序设计”是高校计算机科学与技术、软件工程、网络工程、电子工程等专业必修的核心课程之一。本书在第1版的基础上,根据师生反馈意见和微机技术发展,添加了第9章逆向工程与反汇编。本书以实用为目标,重视实验以及习题的环节,使学习者在学习理论的同时,能够根据教程提供的单元实验进行实际动手能力的培养,能够根据教程提供的标准化单元测试题对所学知识进一步加深理解。本书形成了学习知识、复习测试和操作技能互相融合的整体。
本书源于教学实践,积累了一线任课教师的教学经验,具有以下特点。
充分体现知识内容的基础性和系统性,以突出“实用”为目标。
知识内容具有系统性、完整性和实用性。
本书配有单元实验,并提供实验参考程序(单元实验均在MASM6.11和MASMPlus上调试成功),以提高学生综合程序设计能力。
本书配有单元测试,有不同难易程度的标准化习题,并附有参考答案,供教师和学生进行测试和练习。
本书内容的组织方式深入浅出,循序渐近,选用内容丰富的应用实例,对基本概念、基本技术与方法的阐述准确明晰,通俗易懂。
本书可作为各类高等学校本科计算机各专业教材以及工科专业教学参考书,也可作为高等学校成人教育的培训或自学参考书。
本书由任向民、王克朝、王喜德、冯阿芳编写,其中,第1~3章、第4.1~4.7节由任向民编写,第4.8节、第4章单元实验及单元测试、第5章、附录A~G由冯阿芳编写,第6章、第9章由王克朝编写,第7章、第8章由王喜德编写,最后由任向民、王克朝、王喜德、冯阿芳统稿、定稿。
再版工作得到了清华大学出版社的大力支持和帮助,在此表示衷心的感谢。由于编者时间仓促和水平所限,书中难免有欠妥之处,敬请广大专家、读者不吝批评指正。
编者2015年2月
第1章微型计算机系统1
1.1微型计算机系统硬件结构1
1.1.1微型计算机系统的基本组成1
1.1.2微型计算机系统的系统结构3
1.1.3微型计算机系统的性能指标4
1.1.4微型计算机系统的性能评价5
1.28086/8088微处理器6
1.2.18086/8088微处理器的结构6
1.2.28086/8088的寄存器8
1.2.38086/8088的存储器组织11
1.380x86系列微处理器简介14
1.3.180286处理器14
1.3.280386处理器15
1.3.380486处理器17
1.3.4奔腾及以上处理器18
1.4微型计算机软件系统19
1.5计算机硬件系统和软件系统之间的关系19
单元测试120
第2章程序设计基础24
2.1程序设计语言24
2.1.1机器语言24
2.1.2汇编语言24
2.1.3高级程序设计语言25
2.1.44GL语言27
2.1.5程序设计语言的比较27
2.2结构化程序设计28◆高级汇编语言程序设计实用教程(第2版)目录2.2.1结构化程序设计思想28
2.2.2结构化程序设计方法29
2.2.3面向对象程序设计简介30
2.3程序设计风格30
2.3.1程序设计风格的概念30
2.3.2良好的程序设计风格31
2.4程序设计的基本过程32
单元测试233
第3章指令系统36
3.1指令系统概述36
3.1.1机器指令格式36
3.1.2寻址技术37
3.1.3立即寻址37
3.1.4寄存器寻址38
3.1.5存储器寻址方式38
3.28086/8088指令系统42
3.2.1数据传送指令42
3.2.2算术运算指令48
3.2.3逻辑运算和移位指令52
3.2.4处理器控制指令57
3.380x86指令系统58
3.3.180286指令系统58
3.3.280386指令系统60
3.3.380486指令系统66
3.3.4Pentium指令系统67
单元测试368
第4章汇编语言74
4.1汇编语言语句74
4.1.1汇编语言语句分类74
4.1.2汇编语言语句格式74
4.2符号定义语句75
4.2.1等值语句75
4.2.2等号语句76
4.2.3解除定义语句76
4.3数据定义语句76
4.4汇编语言数据表示与运算符78
4.4.1常数78
4.4.2变量79
4.4.3标号80
4.4.4表达式80
4.5其他伪指令语句86
4.5.1段结构伪指令86
4.5.2完整段定义伪指令89
4.5.3过程定义伪指令90
4.5.4模块定义伪指令90
4.5.580x86指令集选择伪指令91
4.5.6简化段定义伪指令92
4.6宏指令94
4.6.1宏指令定义、调用及展开94
4.6.2宏操作符96
4.6.3LOCAL伪指令99
4.7重复汇编与条件汇编100
4.7.1重复汇编100
4.7.2条件汇编102
4.8常用的DEBUG命令104
4.8.1DEBUG程序的调用104
4.8.2DEBUG的主要命令105
单元实验汇编语言程序的调试与运行111
实验1MASM使用方法111
实验2DEBUG命令113
单元测试4115
第5章汇编语言程序设计基本技术123
5.1顺序程序设计123
5.2分支程序设计125
5.2.1转移指令126
5.2.2双分支结构程序设计129
5.2.3多分支结构程序设计131
5.3循环程序设计135
5.3.1循环控制指令135
5.3.2串操作指令136
5.3.3循环程序结构141
5.3.4循环控制方法142
5.3.5多重循环程序设计146
5.4子程序设计148
5.4.1子程序定义148
5.4.2子程序的调用和返回149
5.4.3子程序的参数传递153
5.4.4子程序嵌套与递归157
单元实验汇编语言程序设计160
实验1顺序程序设计160
实验2分支程序设计161
实验3循环程序设计(一)163
实验4循环程序设计(二)164
实验5子程序设计165
单元测试5166
第6章系统功能调用175
6.1系统功能调用概述175
6.2DOS系统功能调用177
6.2.1常用DOS系统功能调用177
6.2.2DOS系统功能调用实例185
6.3BIOS系统功能调用191
6.3.1BIOS系统功能调用概述191
6.3.2BIOS系统功能调用实例193
单元实验系统功能调用195
单元测试6201
第7章汇编语言与高级语言接口204
7.1混合编程204
7.2C/C++的嵌入式汇编205
7.2.1在C/C++程序中嵌入汇编语句206
7.2.2在嵌入式汇编中访问C/C++的数据209
7.2.3用汇编语言程序段编写C函数210
7.2.4汇编程序调用C/C++函数213
7.3用C/C++调用汇编214
7.3.1接口214
7.3.2调用汇编模块216
单元实验混合编程225
实验1在C/C++中嵌入汇编225
实验2使用模块连接方式编程227
单元测试7229
第8章综合程序设计233
8.1显示程序设计233
8.1.1显示程序概述233
8.1.2显示程序设计实例237
8.2键盘输入/输出程序设计241
8.2.1键盘输入/输出程序概述241
8.2.2键盘输入/输出程序设计实例243
8.3文件管理246
8.3.1文件管理概述246
8.3.2文件管理程序设计实例251
单元实验综合程序设计254
实验1显示程序设计254
实验2输入/输出程序设计258
实验3文件存取程序设计264
单元测试8269
第9章逆向工程与反汇编273
9.1逆向工程与反汇编概述273
9.1.1反汇编的概念273
9.1.2反汇编的应用场景274
9.1.3反汇编的方法275
9.1.4基本的反汇编算法275
9.1.5软件逆向工程275
9.2常用逆向工程与反汇编工具276
9.2.1分类工具277
9.2.2摘要工具278
9.2.3反汇编器279
9.3反汇编程序中函数的理解280
9.3.1概述280
9.3.2函数调用约定282
9.3.3函数参数286
9.3.4函数的局部变量290
9.3.5函数的返回值291
9.3.6函数原型的还原291
9.4反汇编程序中数据结构的理解294
9.4.1数组294
9.4.2结构体299
9.5反汇编程序中分支语句的理解304
9.5.1if分支语句305
9.5.2switch分支语句306
9.6反汇编程序中循环语句的理解308
9.6.1for循环语句308
9.6.2while/do…while循环语句310
9.7综合实例313
单元测试9322
附录A单元测试参考答案325
附录B80x86指令集339
附录C伪指令简表345
附录DDEBUG命令表348
附录EASCII码表350
附录FDOS系统功能调用表(INT 21H)352
附录GBIOS中断355
参考文献358