本书立足于目前使用为广泛的Intel x8632和x8664系列的CPU、Windows操作系统及Visual Studio 2019开发平台,从汇编语言这种直观和直接的角度,揭示计算机工作的基本原理、C语言语句和函数的处理过程、程序优化的技巧。全书共分为19章。前5章介绍了汇编语言程序设计的基本知识,包括CPU、内存、寻址方式和常用机器指令;第6章至第11章介绍了x8632位控制台应用程序设计,包括顺序和分支、循环、子程序设计、多模块化程序设计;第12章为中断和异常处理;第13章是Win32窗口程序设计;第14章至第17章介绍了x87 FPU、MMX、SSE、AVX程序设计;第18章为x8664位汇编程序设计;第19章为上机操作。本书内容新颖,覆盖面广,重点突出,直观易懂,趣味性强,可供各类高等院校计算机及相关专业作为教材,也可供广大使用汇编语言的工程技术人员参考。
毋庸置疑,现在的IT界很少使用汇编语言开发项目。作为一种程序设计语言,汇编语言似乎销声匿迹。这也让一些人怀疑学习汇编语言的必要性。在阅读本书后,读者完全可以打消这种疑虑了。不论是对后续课程学习、理解计算机的工作原理,还是编写高质量、高效率的应用程序,汇编语言都起着不可或缺的作用。
首先,汇编语言程序设计是计算机类专业的重要专业基础课,是从事计算机研究与应用,特别是软件研究的基础,是计算机人员必须接受的重要的专业基础训练课之一。汇编语言作为机器语言的符号表示,提供了直观、直接学习有关知识的方式。汇编程序可以看成是编译器对高级语言程序编译后的输出产物,也可以看成是在计算机上能直接加工处理的输入对象。因此,汇编语言就是连接高级语言程序和计算机硬件设备的桥梁和枢纽,为深入地理解计算机硬件、操作系统、应用程序之间的交互工作奠定基础。此外,汇编语言对于高级语言程序设计的学习和实践很有帮助。很多人在学习CC语言程序设计时,都会有很多疑问。例如,程序运行中为什么崩溃?程序运行中为什么会出现莫名其妙的结果?函数之间是如何传递参数和返回结果的?递归程序是如何运转的?为什么不返回局部变量的地址?数组越界访问会造成什么后果?指针是如何实现的?地址类型转换和数据类型转换的含义是什么?在C程序设计中,对象构造、对象析构、继承、多态、成员对象的引用、虚函数、类模板和函数模板等是如何实现的?汇编语言是揭开高级程序设计语言工作机制神秘面纱的强有力武器。本书给出了一些C语言程序的反汇编示例,直观展现了C语言语句和函数对应的一个执行系列,进而分析变量的空间分配方法、地址类型转换、数据结构中各组成部分的空间关系、函数参数和结果的传递方法、程序执行流程的转移、递归函数的执行过程等奥秘。这些知识又助于从本质上理解程序执行过程。在编程者深刻把握语句的执行原理后,编写程序时就可以少犯错误,也可发编写出执行效率高且形式优美的程序。
其次,开发的软件运行速度快是一个常规要求。除了在大方面选择性能高的算法外,还需要在很多小方面选择快速的实现方法。在学习汇编语言后,会发现计算机指令系统提供了一些能提高程序运行性能的指令,如串操作指令、单指令多数据流指令。它们比另外一些实现相同功能的指令的速度要快得多。这也就会让人们在使用高级语言开发程序时寻找封装后高性能指令的函数或语句。本书在串操作和数据成组运算上给出了示例,并检测了不同实现方法的运行时间。当然,在实际项目开发中,有人直接利用汇编语言编写部分关键代码以提高系统的性能。汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、IO端口等,且占用内存空间少,执行速度快,是高效的程序设计语言。
后,汇编语言是逆向工程、解密程序、病毒与木马分析和防治的唯一选择。在不支持高级语言开发工具的特定场合下,编写汇编程序是一种必然选择。
本书的特色之一是使用Visual Studio 2019作为汇编语言程序的开发平台。该平台操作简单,与其前辈版本Visual Studio 2010、Visual Studio 2013、Visual Studio 2017等用法相似,可以和CC程序开发无缝衔接,在汇编语言程序中调用C标准库函数、Windows API函数,或者在C程序中调用汇编语言编写的函数。特色之二是根据构建理论,将不同的知识关联起来形成网络,同步促进多种知识的学习。书上给出了一些大家熟悉的有代表性的C程序例子,通过研究这些例子的反汇编代码,由表及里揭示其内在的处理过程、编译技巧,进而加深对机器指令的运行过程和功能的理解,加深对计算机工作原理的理解。书中也给出了一些既用汇编语言又用C语言实现的例子,在学习汇编语言知识后,可以引导编写更高质量的C语言程序。特色之三是内容新颖、覆盖面广。本书介绍了目前使用为广泛的Intel x8632和x8664系列CPU支持指令系统,包括x8632、x87、MMX、SSE、AVX、x8664指令,以及机器指令的编码规则;介绍了Windows操作系统下控制台程序和窗口应用程序的开发;包含了多模块程序设计、C和汇编混合、C内嵌汇编、中断及异常处理程序开发、执行文件结构等内容。特色之四是趣味性强。在完成某一功能时,采用一题多解的策略,采用不同的寻址方式、不同的指令、不同的算法完成相同的任务,充分展现了编程的灵活性。同时,书上也给出了程序自我修改、机器语言编程、程序转移自主控制等特色例子。特色之五是重点突出。Intel CPU的机器指令是非常多的,可编写的程序也非常多,本书并不是指令参考书,也不是编程集锦,未纠缠于一一介绍这些指令和过多地给出程序示例,相信读者对这些知识能够举一反三,融汇贯通。建议不要死记硬背那些机器指令,将大脑降档为一个存储器。随着时间的流逝,这些指令内容都会遗忘,留在脑海里的是基本原理、基本方法和基本技巧。
在编写本书的过程中,得到了华中科技大学计算机科学与技术学院汇编语言程序设计课程组老师们的热情帮助和支持。汇编语言程序设计课程是国*级精品课程。在精品课程建设中,老师们集思广益,群策群力,使我收获颇丰。本书的编写也得到了华中科技大学出版社编辑的帮助,在此一并表示感谢
由于作者水平有限,书中错误在所难免,恳请广大读者批评指正。同时也欢迎使用本书的老师、学生和其他读者,共同探讨汇编语言的教学内容和教学方法等问题。