本书内容包括基本的汇编语言基础、常用处理器指令和汇编语言伪指令以及顺序、分支、循环、子程序结构,还包括扩展的Windows和DOS编程、与C++语言的混合编程、输入输出指令及编程,并涉及浮点、多媒体及64位指令等方面。
随着计算机技术的发展,国内高校师生希望能够在32位Windows操作系统平台学习汇编语言,但如何面向初学者实施教学却面临诸多难点。于是,我们结合近年来的32位汇编语言教学实践编写了本书。
本书具有以下特色。
1.简单易用的开发环境目前,32位Windows平台的汇编语言编程主要使用MASM32和VisualC++集成化开发系统,但它们都略显复杂和庞大,不适合初学者(本书将此内容安排在第6章和第7章)。为此,本书构建了一个简单易用的开发环境(详见第1章),无需安装和配置,直接复制就可使用。它支持32位Windows控制台和16位DOS环境,提供MASM汇编程序、连接程序、WinDbg和CodeView调试程序及其帮助文档、配套输入输出子程序库及方便操作的批处理文件等。
2.重点明确的教学内容汇编语言的教学目的是从软件角度理解计算机硬件工作原理,为相关课程提供基础知识,同时让读者全面认识程序设计语言,体会低层编程特点,以便更好地应用高级语言。为此,本书不是详尽展开所有处理器指令、全部汇编伪指令,而是选择处理器通用的基本指令和反映汇编语言特色的常用伪指令;没有引出复杂的程序格式,而是侧重编程思想和技术。这样一方面能够降低教学难度、易于学生掌握,另一方面使得教学内容更加实用、便于学生实际应用。
3.突出实践的教学过程本书以约70个示例程序和60个习题程序贯穿教学内容。第1章在介绍必要的寄存器和存储器知识后,就引出汇编语言开发环境,介绍汇编语言的语句格式、源程序框架和开发方法,并利用简单易用的输入输出子程序编写具有显示结果的程序。第2章结合数据编码、常量定义和变量应用,自然地引出常用伪指令。第3章分类学习处理器基本指令,逐渐编写特定要求的程序片段。第4~9章以程序结构为主线,围绕数码转换子程序,结合Windows编程、混合编程、DOS和I/O编程、浮点指令,从简单到复杂逐步编写具有实用价值的应用程序。
4.循序渐进的教学原则为了便于学生理解和掌握,且便于教师实施教学,本书以“循序渐进、难点分散、前后对照”为原则,努力做到“语言浅显、描述详尽、图表准确”。本书内容编排精彩纷呈,例如,将处理器指令和汇编伪指令分散于各个教学内容之中,引出列表文件暂时避开调试程序,用简单的子程序库化解系统调用的烦琐;程序具有交互性和趣味性,适当对比高级语言,并展示底层工作原理;每章都编制丰富的习题,满足课外练习、上机实践和试题组织的需要。
为了更好地服务于广大师生和读者,编者开辟了“大学微机技术系列课程教学辅助网站”。该网站面向“汇编语言程序设计”和“微机原理及接口技术”课程,提供相关教学课件(电子教案)、教学大纲、教材勘误、疑难解答、输入输出子程序库、示例源程序文件等辅助资源,是本教材的动态延伸。
相对于第1版教材,第2版的总体结构和主体内容没有改变,主要针对教学过程中师生反馈的问题增加了更加详尽的讲解。具体来说,修订如下:
1)修改最大的是第4章,增加了示例程序的流程图和说明,使得读者更容易理解汇编语言的特点和程序结构,掌握汇编语言的编程技巧。
2)第2章和第4章特别加入了对各种寻址方式的图示,利于读者理解这些概念。
3)第3章重点展开了MOV指令,让读者清晰地理解指令对不同数据长度(整数类型)的支持。
4)对第1~5章和第9章部分知识点进行补充说明,对全书各个章节中发现的个别错误进行修正。
本书由郑州大学信息工程学院钱晓捷编著,并得到了张青、穆玲玲、关国利、程楠、姚俊婷等同事的帮助,衷心感谢他们的支持。
编者2016年4月
前言
教学建议
第1章汇编语言基础
1.1Intel 80x86系列处理器
1.1.116位80x86处理器
1.1.2IA.32处理器
1.1.3Intel 64处理器
1.2个人计算机系统
1.2.1硬件组成
1.2.2寄存器
1.2.3存储器组织
1.2.4程序设计语言
1.2.5软件系统
1.3汇编语言程序格式
1.3.1指令代码格式
1.3.2语句格式
1.3.3源程序框架
1.3.4开发过程
第1章习题
第2章数据表示和寻址
2.1数据表示
2.1.1数制
2.1.2数值的编码
2.1.3字符的编码
2.2常量表达
2.3变量应用
2.3.1变量定义
2.3.2变量属性
2.4数据寻址方式
2.4.1立即数寻址方式
2.4.2寄存器寻址方式
2.4.3存储器寻址方式
2.4.4各种数据寻址方式的组合
第2章习题
第3章通用数据处理指令
3.1数据传送类指令
3.1.1通用数据传送指令
3.1.2堆栈操作指令
3.1.3其他传送指令
3.2算术运算类指令
3.2.1状态标志
3.2.2加法指令
3.2.3减法指令
3.2.4乘法和除法指令
3.2.5其他运算指令
3.3位操作类指令
3.3.1逻辑运算指令
3.3.2移位指令
第3章习题
第4章程序结构
4.1顺序程序结构
4.2分支程序结构
4.2.1无条件转移指令
4.2.2条件转移指令
4.2.3单分支程序结构
4.2.4双分支程序结构
4.2.5多分支程序结构
4.3循环程序结构
4.3.1循环指令
4.3.2计数控制循环
4.3.3条件控制循环
4.3.4多重循环
第4章习题
第5章模块化程序设计
5.1子程序结构
5.1.1子程序指令
5.1.2子程序设计
5.2参数传递
5.2.1寄存器传递参数
5.2.2共享变量传递参数
5.2.3堆栈传递参数
5.3多模块程序结构
5.3.1源文件包含
5.3.2模块连接
5.3.3子程序库
5.4宏结构
5.4.1宏汇编
5.4.2重复汇编
5.4.3条件汇编
第5章习题
第6章Windows编程
6.1操作系统函数调用
6.1.1动态连接库
6.1.2MASM的过程声明和调用
6.1.3程序退出函数
6.2控制台应用程序
6.2.1控制台输出
6.2.2控制台输入
6.2.3单字符输入
6.3图形窗口应用程序
6.3.1消息窗口
6.3.2结构变量
6.3.3MASM的高级语言特性
6.3.4简单窗口程序
第6章习题
第7章与Visual C++混合编程
7.1嵌入汇编
7.2模块连接
7.2.1约定规则
7.2.2堆栈帧
7.3调用高级语言函数
7.3.1嵌入汇编中调用高级语言函数
7.3.2汇编语言中调用C库函数
7.4使用Visual C++开发环境
7.4.1汇编语言程序的开发过程
7.4.2汇编语言程序的调试过程
第7章习题
第8章DOS环境程序设计
8.1DOS编程
8.1.1实地址存储模型
8.1.2DOS应用程序框架
8.1.3DOS功能调用
8.2串操作类指令
8.2.1串传送指令
8.2.2串检测指令
8.3输入输出程序设计
8.3.1输入输出指令
8.3.2定时器初始化编程
8.3.3扬声器控制编程
8.4中断控制编程
8.4.1中断控制系统
8.4.2内部中断服务程序
8.4.3驻留中断服务程序
第8章习题
第9章 浮点、多媒体及64位指令
9.1 浮点指令
9.1.1实数编码
9.1.2浮点寄存器
9.1.3浮点指令及其编程
9.2 多媒体指令
9.2.1MMX技术
9.2.2SSE技术
9.2.3SSE2技术
9.2.4SSE3技术
9.3 64位指令
9.3.164位方式的运行环境
9.3.264位方式的指令
第9章习题
附录A 调试程序WinDbg
附录B 输入输出子程序库
附录C 32位通用指令列表
附录D MASM伪指令和操作符列表
附录E 列表文件符号说明
附录F 常见汇编错误信息
参考文献