摘要:结合《微机原理及应用》课程的教学实践,阐述了以16位指令系统作为基础的理由,简述了快速处理32位指令系统的方法,介绍了在宏汇编MASM 6. X IDE环境下调试16位和32位汇编程序的安排,最后,讲述了编写Win32汇编程序的要点、Win32汇编程序集成开发环境下的使用方法。
关键词:汇编语言;指令系统;宏汇编;Win32
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2014)07-1473-03
在《微机原理及应用》课程中,微处理器中的指令系统以及汇编语言编程是很重要的内容,它是微机系统的主要组成部分之一。随着计算机技术的不断发展,微型计算机由16位微处理器早已过度到了32位微处理器,当前,《微机原理及应用》课程的内容应该以32位微机为主,而32位微处理器是基于16位微处理器的基础之上产生与发展的,它兼容了16位微处理器8086的指令集,因此,在阐述32位微处理器指令系统时,必然涉及到16位的指令,相应的汇编语言编程也在发展,教学过程中如何优化处理16位与32位指令系统及相应的汇编语言编程,使学生能够快速地学习与接受32位机的工作原理,提高教学效果,它是《微机原理及应用》课程教学中的一个难点,是一个值得探讨的问题。
1 《微机原理及应用》课程中的指令集
32位微处理器指令系统包括基本指令集、浮点指令集、保护方式指令集以及扩展指令集等。根据浮点运算部件和浮点运算格式,用浮点指令编写浮点运算程序;保护方式指令集通常由系统程序员使用,编写操作系统程序,保护方式一般是由操作系统通过执行初始化程序来设置的;CPU扩展指令集指的是CPU增加的多媒體或者是3D处理指令,这些扩展指令可以提高CPU处理多媒体和3D图形的能力。一般在计算机课程教学中涉及的指令系统主要是基本指令集,因此,该文所讨论的指令系统是指微处理器的基本指令以及应用基本指令进行的汇编语言编程。
2 教学中以16位指令系统作为基础
微处理器的发展过程经历了从经典的16位微处理器8086到80286、80386、80486、Pentium、多核等系列微处理器的演变和应用。在教学中,首先还是要以8086 CPU为基础组织教学,介绍16位CPU的结构及16位的指令系统,理由如下:
第一,8086 CPU的内部结构简单,有利于学生学习与建立微处理器的概念。
8086微处理器的内部主要包括执行单元EU和总线接口单元BIU,它具有中央处理器(CPU)的经典结构,使学生容易建立微处理器的概念。总线接口部件BIU是8086 CPU与外部存储器和I/O端口的接口,它提供了16位双向数据总线和20位地址总线,负责CPU与存储器及I/O端口之间的数据传送操作。执行部件EU从BIU中的指令队列获取指令,对指令进行译码分析并执行,执行指令所需要的操作数和运算结果都是通过总线接口部件与指定的内存单元或外设端口进行传送的。
在一般教材中,高档微处理器的结构则侧重于其他复杂功能块的分析,不易为初学者接受。
第二,8086 CPU内部各组寄存器结构清晰,通过DEBUG调试程序或MASM汇编程序,很容易验证,而且,学生理解8086 CPU内部寄存器组后,很容易理解32位微处理器内部扩充后的寄存器组。
8086 CPU内部分为:8个16位通用寄存器,每个寄存器还有它们各自的专用场合;4个段寄存器都有各自所代表的内存段;16位的指令指针IP用来存放将要执行的下一条指令在当前代码段中的偏移地址,它与代码段寄存器CS联用,以确定下一条指令的物理地址; 16位的标志寄存器(FLAGS)只定义了9位,分为两类,一类用于反映部分指令(例算术运算及逻辑运算指令)执行结果的状态,常用作后续条件转移指令的转移控制条件,另一类为控制标志,用来控制CPU的操作。
如果学生从理论与实践上,理解与认同了8086 CPU内部的寄存器后,一方面对微处理器的工作原理有了较系统的认识,另一方面,对于下一步学习32位微处理器,奠定了坚实的基础。
3 教学中快速处理32位指令系统
由于学生从理论与实践(上机)两方面,已经掌握了16位机的指令系统,如何快速处理32位指令系统,首先,要简单介绍32位CPU内部寄存器的编程结构,比如,通用寄存器扩充到了32位,增加了两个段寄存器(FS、GS)等。然后,着重介绍32位机的寻址方式,32位机与16位机寻址方式绝大部分是相同的,主要是32位机寻址内存方式多,而且灵活,因此,要重点介绍32位机寻址内存的几种方式。
4 在宏汇编MASM 6.X IDE环境下调试程序
MASM 6.X是一个IDE环境(集成开发环境),它将汇编语言源程序的编辑、汇编、执行、调试合为一体,呈现在程序员面前的是一个窗口,使用非常方便。MASM 6.X将汇编程序和调试程序(DEBUG)集成到一起,使程序的开发和调试结合的更紧密。MASM 6.X最具特色的是能够汇编简化段模式的汇编语言源程序,可用于简化段程序的设计及汇编16、32位指令的程序,还提供了类似于高级语言的IF/ELSE分支结构、WHILE和REPEAT/UNTIL循环结构,使编写汇编语言程序和编写高级语言程序一样方便。现在最新的汇编程序MASM32支持32位段操作,可以构造出窗口程序,功能已接近于高级语言程序。
16位汇编语言编程以完整段格式编写,32位汇编语言编程以简化段格式编写,程序不在于多,但具有典型性。由于《微机原理及应用》课程总学时数不可能完全满足教学的需求,所以,在上机学时的分配上,MASM 6.x IDE环境的熟悉与16位汇编语言上机4学时,32位汇编语言上机6学时。
5 在Win32汇编语言集成开发环境下调试程序
Win32汇编语言程序是构筑在Win32 API基础上的。在Win32 API中,包括了大量的函数、结构和消息等,它不仅为应用程序所调用,也是Windows自身的一部分,Windows自身的运行也调用这些API函数。
Win32环境中的API编程接口实际上代替了DOS中的软中断,和DOS的结构相比,Win32的系统功能模块放在Windows的动态链接库(DLL)中,DLL是一种Windows的可执行文件,采用的是和.exe文件同样的PE格式,在PE格式文件头的导出表中,以字符串形式指出了这个DLL能提供的函数列表。应用程序使用字符串类型的函数名来指定要调用的函数。应用程序在使用的时候由Windows自动装入DLL程序,并调用相应的函数。
5.1 Win32汇编语言程序集成开发环境的使用
Win32汇编语言程序集成开发环境下的使用并不复杂,大致过程如下:
1)启动Win32汇编语言程序集成开发环境;
2)汇编语言编程的第一步是建立一个新文件,所以在菜单中选择“File”→“New”建立一个新文件;
3)第二步是进行文件的编辑,编辑包括程序输入、插入、删除、修改和保存,最后生成文件的后缀是.asm。
4)汇编语言编程的第三步是汇编和连接源程序,生成可执行文件。所以在菜单中选择“Project”→“Build All”来完成此工作;
5)在汇编和连接无错误的情况下,会自动生成可执行程序,在菜单中选择“Project”→“Run Program”,执行程序得到结果。
5.2 Win32汇编语言程序的理论教学与上机
Win32汇编语言程序的编写,是一个重要的问题,建议讲解4学时。主要讲解内容:
1)针对简单的Win32汇编语言源程序,讲述有关模式的定义、头文件和库文件的加载、程序段的定义、Win32汇编源程序注释和换行的规定;
2)关于API的说明与调用API;
3)Win32汇编语言程序设计方法和实例。
Win32汇编语言程序的实践教学,教师提供2学时的上机范例,包括机房讲解Win32汇编语言程序集成开发环境。学生自己编程,上机2~4学时,共计6学时左右。
6 结束语
汇编语言程序设计在计算机专业是一门独立的课程,在《微机原理及应用》课程中讲解汇编语言程序设计,由于其内容非常丰富、涉及知识面宽、难度大,教学组织困难,学生难学。我们将《微机原理及应用》课程作为精品课程进行建设,通过不断地学习、教学实践以及编写教材,总结出了自己的认识与体会,教学效果较好。
参考文献:
[1] 李华贵,李鹏. 微机原理与接口技术[M]. 北京:电子工业出版社,2010.
[2] 錢晓捷. 微机原理与接口技术[M]. 北京:机械工业出版社,2008.
[3] 马兴录等. 32位微机原理与接口技术[M]. 北京:化学工业出版社,2009.