随着计算机技术的发展,国内高校师生希望能够在Windows操作系统平台学习32位汇编语言,但如何面向初学者实施教学却面临诸多难点。于是,我们结合近年来的32位汇编语言教学实践编写了本书。
本书具有以下特色。
Windows平台的32位汇编语言编程可以使用MASM32开发包或微软Visual Studio集成开发环境,但它们有些复杂和庞大,不适合初学者(在第6章和第7章予以简介)。为此,本书构建了一个简单易用的开发环境(详见第1章),无须安装和配置,直接复制即可使用。它支持32位、64位Windows控制台和16位DOS环境,提供MASM和NASM汇编程序、连接程序,以及本书配套的输入/输出子程序库和方便操作的批处理文件等。
汇编语言的教学目的是从软件角度理解计算机硬件工作原理,为相关课程提供基础知识,同时让读者全面认识程序设计语言,体会低层编程特点,以便更好地应用高级语言。为此,本书不是详尽展开所有处理器指令、全部汇编伪指令,而是选择处理器通用的基本指令和反映汇编语言特色的常用伪指令;没有引出复杂的程序格式,而是侧重编程思想和技术。这样一方面能够降低教学难度、易于学生掌握,另一方面使得教学内容更加实用、便于学生实际应用。
本书以约70个示例程序和约60个习题程序贯穿教学内容。第1章在介绍必要的寄存器和存储器知识后,就引出汇编语言开发环境,介绍汇编语言的语句格式、源程序框架和开发方法,并利用简单易用的输入/输出子程序编写具有显示结果的程序。第2章结合数据编码、常量定义和变量应用,自然地引出常用伪指令。第3章分类学习处理器基本指令,逐渐编写符合特定要求的程序片段。第4~9章以程序结构为主线,围绕数码转换子程序,结合Windows编程、混合编程、DOS和I/O编程、浮点和多媒体指令,从简单到复杂逐步编写具有实用价值的应用程序。
为了便于学生理解和掌握,且便于教师实施教学,本书以“循序渐进、难点分散、前后对照”为原则,努力做到“语言浅显、描述详尽、图表准确”。本书内容编排精彩纷呈,例如,将处理器指令和汇编伪指令分散于各个教学内容之中,引出列表文件暂时避开调试程序,用简单的子程序库化解系统调用的烦琐;程序具有交互性和趣味性,适当对比高级语言,并展示底层工作原理;每章都包含丰富的习题,满足课外练习、上机实践和试题组织的需要。
相对于前两版教材,第3版主要结合互联网时代的教学特点,增加了对NASM汇编程序的支持并修改与之相关的内容,添加了调用C语言标准函数实现键盘输入和显示输出的若干示例,补充了Visual Studio开发环境、多媒体指令编程和64位指令编程,更新了调试程序WinDbg版本,修订了前两版中的错误。具体来说,修订内容如下。
1)在第1章、第2章、第5章、第8章、第9章以旁白插叙的方式增加使用NASM汇编程序的内容;增写附录G,从对比MASM角度介绍NASM汇编程序的使用与特点,并简要介绍Linux平台的汇编语言编程方法。
2)添加例1-2以及例3-8、例4-9的C语言程序,说明如何调用C语言标准函数实现键盘输入和显示输出。这样,书中很多例题程序中的人机交互部分都可以改用C语言函数实现。
3)增写7.5节,介绍Visual Studio Community 2019和2022(免费版)开发环境。
4)增写9.2.5节和9.3.3节,分别补充多媒体指令编程和64位指令编程。
5)为同时适用于NASM汇编语法,程序代码做了如下修改。
● 变量定义byte、word、dword和qword改用db、dw、dd和dq。
● 等号“=”伪指令改为等价“equ”伪指令。
● 不使用操作符sizeof、lengthof获得字符个数或数组元素个数,改用通过当前地址“$”计算,等价于符号常量count表示。
● 代码段中,原使用变量名(±常量)访问变量值,现均添加地址操作符“[ ]”(中括号)。
6)为配合教育部-华为“智能基座”项目,增写附录H简介64位ARM汇编语言。
对使用过前两版教材的师生来说,应注意配合教材的软件包有更新。主要是不再集成CodeView和WinDbg调试程序,增添了NASM汇编程序(及配合使用的IO32N.INC、NMAKE32.BAT)、64位汇编语言开发软件,略微改动了IO32.INC、MAKE32.BAT等文件。另外,例题程序也按照修订内容进行了相应更新。
本书由郑州大学计算机与人工智能学院钱晓捷主编,穆玲玲主要增补了有关NASM汇编程序部分,张行进老师主要增补了混合编程部分,全书仍由钱晓捷统稿,并得到张青、张大伟等同事的帮助。
编者
2023年7月