时间:2023-03-08 15:38:53
序论:速发表网结合其深厚的文秘经验,特别为您筛选了11篇汇编语言程序设计范文。如果您需要更多原创资料,欢迎随时与我们的客服老师联系,希望您能从中汲取灵感和知识!
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)09-2111-02
Teaching Thinking of Assembly Language Programming Course
LUO Xing
(Hanshan Normal University, Hanshan 521041, China)
Abstract: This paper discusses the problem appear in teaching of assembly language programming course, propose some methods to improve student's ability to master the knowledge and learning interest. Discuss the assembly language teaching in Win32 platfrom in the last.
Key words: assembly language programming; teaching improvement
汇编语言程序设计作为一门计算机专业的课程,其存在的合理性在近年受到争议。有些人认为,汇编语言作为一种低级语言,指令繁多,难以掌握。另外,编程效率也不高,一个高级语言用一条语句实现的功能,在汇编语言中需要很多条指令才能实现。此外,汇编语言在时间上和空间上的优势由于高速CPU和大容量存储器的出现,也变得意义不大。
我认为学习汇编语言仍然具有重要意义。可以归纳如下:
1) 可以比较深入了解计算机硬件的底层工作原理,例如:CPU的工作模式,寄存器的概念,内存的寻址方式,中断的工作原理等。
2) 熟悉各种数据表示方法。如各种数制的转化,各种类型的数据在内存中的存储方式。学生在系统学习汇编语言程序设计这门课程后,对二进制,十进制以及十六进制相互间的转换应该非常熟练。对数据在内存中两种排列方式即大端方式(Big Endian,低地址存放高位字节)与小端方式(Little Endian,低地址存放低位字节)有清晰的理解。而这些相关的概念的牢固掌握对高级语言中的数据类型以及计算机网络编程的学习具有很大的帮助。
3) 通过汇编语言编程学习,可以促进对高级编程语言相关概念的理解。高级语言在编译的时候,一般都是先生成汇编代码,然后再生成的二进制代码。所以,通过对比分析汇编代码与高级语言代码的实现方式,对程序的执行效率,数据在内存中存放方式,堆栈的概念,函数的调用及参数传递的方式等都会有进一步的了解。
在教学中,我也遇到一些问题。一方面就是学生的积极性不高。主要原因包括:指令很多,难以记忆。对于几个大类的指令,如果每次课上一类,学生课后如果不进行主动复习,往往到下一次课的时候,就会忘记前面所学的内容或者发生混淆。另外,在学习汇编课程之前,他们已经学过一门高级语言,如C/C++等,汇编语言的学习方式与高级语言的学习方式有所不同,高级语言比较容易上机练习,也容易对程序运行结果验证,对于开发实用软件也相对容易,所以学生的兴趣比较大。而汇编语言一方面涉及到底层的硬件概念,比较难以理解,另一方面上机也比较困难,可以这么说,如果按照课本的顺序讲课,要到差不多讲完课,学生才可以上机完成一个功能比较完整的程序。
2 促进学生对知识的掌握
要解决这些问题,我认为要在学生的知识掌握方式以及学习兴趣的培养上下功夫。对于知识的掌握,除了每次新课内容讲完后,精心给学生布置作业习题之外。还应该注意到由于汇编语言的指令及相关的知识点很多,对于刚接触这门课程的学生一开始往往不大适应,容易混淆前面学过的内容,所以教师及时对所学过知识点进行比较和总结就很有必要。此外还应该定期对学生的学习效果进行检测,从过去的教学经验看,汇编语言这门课程是学生比较容易与教师的教学进度脱离的一门课程,不少学生在一开始由于在掌握知识遇到困难,问题越积越多,最终可能放弃听课。在检测的方法上,可以借助网上考试系统。教师可以自主出题,也可以让系统自动出题。通过分析学生的测试结果,教师可以及时调整教学进度,学生也会有一定的学习压力,使他们花更多时间查补缺漏的知识。
程序设计学习的最佳方法就是上机实践。汇编语言上机练习跟高级语言的上机练习相比,对于学生来说比较困难。一方面是由于一个完整的汇编程序涉及的知识点很多,而教材往往按知识点分类进行编排。所以学生要想在刚开始学习阶段,就编出完整的程序有一定的难度。另一方面,汇编程序的运行结果较难在屏幕上输出,汇编语言只有字符与字符串的输入输出,对于一道简单的算术运算题目,其结果的输出都要通过一大段的转换程序来实现。对于第一个问题,教师可以对教材内容进行选讲,把实验所涉及到的知识点先进行讲解。对于第二个问题, 我认为应该重点培养学生熟练使用调试工具的能力,通过掌握调试工具如DEBUG,CV等的使用,一方面学生可以直接观察程序的运行结果,另一方面,对于程序的逻辑错误也可以进行跟踪、分析以及解决。此外,由于汇编语言作为一种低级语言,编程都由一条条指令进行构造,所以相对繁琐,应尽早让学生应用模块化思路,掌握子程序及宏的使用方法。这样把一些常用功能做成模块,如输入输出功能,以后学生在编程的时候就可以直接调用这些模块,从而专注于实验的其它方面。
3 提高学生的学习积极性
对于如何提高学生的学习兴趣,我认为主要让学生意识到汇编语言的作用。一方面可以引入一些接口技术相关内容,使学生熟练掌握中断的概念以及I/O指令,然后上机编写中断程序,在中断控制器(8259A)进行验证,由于这些实验有按键输入,有屏幕输出,还能直接看到程序控制设备的效果,所以学生兴趣会比较大。此外,教师也可以适当拓展一些知识,如嵌入式编程相关概念,有兴趣的同学可以在课后自主进行学习。另外,由于不少学生对硬盘相关的问题感兴趣,比如硬盘数据的存放方式,数据的修复等。可以引导学生对这些问题进行思考,然后通过汇编语言提供的I/O指令和中断子功能,编程实现对硬盘的MBR,文件分配表等数据结构的读取,备份,修复等功能。教师通过布置一些学生比较感兴趣的课外作业,并适当提供协助,往往能提高学生的学习积极性。
另外,在汇编语言的学习过程中,教师应该有意识引导学生将汇编语言与高级语言的各个对应的部分进行比较。学生在学习汇编语言之前,通常已经学过一门高级语言,如C/C++等。高级语言在编译的时候,一般是先转换成汇编代码,所以它们具有相通性。大部分学生编写应用程序的时候是用高级语言,所以通过比较分析高级语言与低级语言在数据定义,程序流程控制,函数的定义及调用等的对应部分内容,对于学生更好的使用高级语言编写程序是很有帮助的。比如:汇编语言里有分段的概念,一般把变量定义到数据段,把代码定义的代码段。而C语言是把数据与代码都定义在一起,那么C语言编写的程序在编译成可执行文件后,它的全局变量,局部变量的空间是如何分配的。另外,对于动态内存分配,堆与栈的区别在哪里。还有函数的定义与调用,参数的传递顺序是如何的?这些疑问,都可以让学生编写简单的C语言程序,生成可执行文件后,然后通过调试工具进行反汇编进行分析。此外,在利用VC++,Dephi等IDE开发工具进行程序编写时,都会用到里面的调试功能。基本上调试功能都会包括反汇编与内存查看的功能,教师可以引导学生进行这方面的训练,使他们在以后编程时能熟练应用这个工具解决一些疑难问题,例如:内存非法访问,指针的非法引用等。
4 Win32平台下的汇编语言教学思考
目前很多高校在汇编程序设计教学中讲解的是8088/8086 CPU实模式环境,实际上是虚拟8086模式,因为真正的实模式工作DOS下,而现在汇编语言实验环境都是在windows 2000以上。由于现在大部分CPU都是32位以上,并且是工作上保护模式之上,此外这些CPU的寄存器类型以及寻址方式都已经发生较大变化。所以教师有必要对实模式与保护模式在逻辑地址转化为物理地址的方式的差异,还有16位与32位的指令在用法的不同点进行重点讲解。因为汇编语言现在的实际应用基本上采用工作于保护模式的Win32平台,在Windows操作系统控制下,汇编语言虽然不能再直接存取硬件,但是能通过调用系统提供的API函数完成各种功能。其实这里的API函数当于DOS下的中断调用,但是Window API函数无论从数量上、功能上还是易用性上都大大超过了DOS或BIOS的中断调用功能。所以现在在Win32平台下,汇编语言就像高级语言一样,可以方便的开发各种Windows应用程序。有些教师认为,既然在实模式讲解汇编语言很少涉及实用性,那就应该直接迁移到Win32汇编平台,讲解用汇编语言开发的Windows应用程序设计实例,从而提高学生积极性。我认为如果采用这种教学方法,可能会存在以下问题:首先由于上课时间有限,学生需要大量的时间才能熟练掌握各类指令,汇编语言的语法,程序结构等方面的知识。如果过多涉及Windows程序设计实例,对于不熟悉Windows编程机制的学生的来说,又多了一个不小的学习负担,这样子反而影响了汇编语言基础知识的掌握。另外,DOS下的实模式与Window下的保护模式下的编程在本质上并无很大的区别,只要学生熟练掌握各类指令用法,理解16位与32位的指令及寻址方式的区别,逻辑地址与物理地址转换机制等知识,他们就可以通过自主学习,较容易的掌握用汇编语言进行Win32应用程序的开发。对于教师,除了帮学生打好汇编语言的基础,可以适当以课外作业的形式,引入一些汇编语言在不同应用领域的简单实例,如加密与解密,软件的逆向工程等,这些课外作业的完成对学生汇编语言的应用能力的提高将会有不小的帮助。
5 结束语
汇编语言难教难学是教师与学生的共识,但是作为计算机科学中一门低级程序设计语言,通过对它的良好掌握,确实可以促进对计算机软硬件底层的了解,而这又能促进编程能力的提高。作为教师,在教学中应该不断尝新的教学方法,不断积累经验,只有这样,才能把这门课上好。
与其它高级语言相比,汇编语言存在指令繁多、寻址方式多样、程序可读性差、编程效率不高等缺点,这使得学生对该课程的重要性认识不足。此外,学生的学习目的相当务实,有些学生认为即便是在计算机应用场合,使用汇编语言的可能性也很小,所以怕苦怕难,没有学习这门课的积极性。实际上,只有通过学习汇编语言,学生才能深入了解计算机的硬件和软件,从朦胧的计算机世界中走出来,进而理解编译和解释程序,在审视高级语言的时候,才能够透彻地理解最根本的计算机技术[1]。所以,不了解汇编语言, 不仅会导致学生认知水平降低,编程开发手段贫乏,更会导致学生的知识结构失衡。
2实验教学在《汇编语言程序设计》教学中的作用在培养人的科学思维、创新意识,掌握科学方法、提高综合实践能力方面,实践环节有着重要的作用,是课堂理论教学无法替代的。实验课是进行实践教学的重要学习场地,学生通过对实验内容的思考,对课堂上的理论知识进行了巩固;实验过程中的操作,可以发现理论教学的不足;实验过后的心得分析,为以后解决实际问题打下坚实基础。实验还可以将算法的实现和计算机的操作过程相结合,使学生体会到算法的逻辑含义是通过计算机的实际执行过程实现的[2]。
汇编语言与硬件关系密切,通过实验课,学生可以更好地理解cpu、寄存器、存储器、接口及外部设备的工作原理。《汇编语言程序设计》课程的实验是培养学生的动手能力、增强学生的学习兴趣、提高学生阅读、编辑和调试程序能力的关键环节。
3实验教学中存在的问题
3.1教学内容安排方面
计算机语言课程的学习需要理论联系实践,实验课是学好计算机语言的必备条件,汇编语言的学习亦是如此,实验课程开始越早对学生的学习越有利。《汇编语言程序设计》这门课程的教材安排顺序一般是:基础知识、计算机系统的组织、汇编要素、基本指令、程序设计、输入/输出、系统调用、高级汇编语言技术。实验教学往往是配合理论教学进行,通常在理论课程第5~7周后,实验课才得以开设。这样的教学安排效果并不理想,在实验课程开设的前几周不利于学生很好地掌握学习内容,从而对汇编语言产生厌学情绪。
高等院校普遍存在对专业课程的课时进行压缩的现象,使得《汇编语言程序设计》的理论课时和实验课时都有不同程度的压缩,实验课时的压缩相对于理论课时更加严重,导致实验内容的安排不能覆盖该课程的重点,而且重点实验内容也相对浅显,无法进行深入研究。
另外,有些教师围绕课本基础结构部分的知识讲授,没有结合实际应用进行扩展,对实验内容的设计也比较浅显,无法激起学生的兴趣。这些行为都导致了学生对汇编语言的学习兴趣降低甚至放弃。
3.2学生态度不够端正
很多学生认为实验课不重要,实验做得好否对最终的成绩判断没有关联。目前多数院校的学生学习成绩判定, 以期末考试成绩为主,这就使得很多学生重理论、轻实验。另外,汇编语言不像其它高级语言那样应用广泛,学生认为其对就业帮助不大,从思想上轻视汇编语言,对《汇编语言程序设计》的实验课程更是不愿付出精力,甚至出现拷贝代码的现象。
3.3考核体系不明确
汇编语言的实验教学环节没有受到足够的重视,导致没有明确的评价体系。在进行实验课时,有些教师只是布置了相关的实验内容,实验过程没有进行必要的监督和辅导,导致学生对实验教学态度怠慢,出现学生在实验课上玩游戏和课下实验报告抄袭的现象。
4提高汇编语言实验教学效果的措施
4.1合理设置实验内容
实验课的内容按照由浅入深、循序渐进的方式进行,以启发思维为主。对设计型、综合型实验只要能达到实验目的,其实验过程和步骤可以多样,通过实验课复习理论知识,引出欲
讲解的新内容。针对学期初不安排实验的问题,可以尝试开展“先实验后理论”的教学,在实验中理解基础理论,加大实验课的比例并且及早实行开展实验教学,在整个教学过程中实行以“学生动手为主,教师讲解为辅”的教学模式[3]。
4.2引入新的实验教学模式,培养学生学习兴趣
实验教学中要充分调动学生的积极性,照顾不同层次的学生。汇编语言指令繁琐,初始使用时比较抽象,学生对待实验内容往往无从下手,所以任课教师应该先对实验内容进行讲解。起初的实验内容,教师应该进行详细的演示,可以先引导学生“临摹”,避免学生出现无从下手、丧失信心等问题。后面的实验内容可以进行讲解并提示实验方法,但不要求每个学生都按照此方法进行实验,鼓励学生创新,并在考核中给予一定的奖励。每次实验内容,任课教师都要进行总结,以解决学生在实验过程中的“通病”。
《汇编语言程序设计》的实验一般设置16~24学时,存在实验学时偏少的问题。为了尽可能提高实验效率,教师可以提前给学生布置实验内容,给学生留出时间准备。如果在实验课上临时给出实验内容,大多数学生无法按时完成实验目标,会打击学生学习的积极性。对实验内容进行准备后再上机操作,大多数学生就可以在规定的时间内完成实验。学生在上机的过程中获得了成就感,树立了信心,就会产生学习兴趣,并主动在课下花时间钻研有关课程实验的内容。
为了培养学生的团队合作精神,也可以设计一些综合应用实验,让学生分组完成。每组选出一位组长,负责组织学生课下进行实验内容的预习、实验方案的制定和课上组员提出问题的解决方案等工作。教师在进行实验考核时,要对每个组的完成情况进行总结,对于完成较好的组,给予成员一定的加分,以鼓励学生注重团队合作精神,培养学生的学习兴趣。
4.3建立严格的考核体系
《汇编语言程序设计》课程一般需要16~18个教学周才能完成教学任务,在这段时间内,很少有学生能对其一直保持较高的学习热情,大部分学生都是以成绩驱动自己的学习,所以需要一套严谨的实验考核体系,公平公正地评价学生的实验过程[4]。笔者学校的实验课程成绩由学生出勤、预习、实验操作过程和实验报告4部分组成,涵盖了学生实验上机的全过程。各部分的比例按10%、20%、40%、30%的权重计算实验总成绩。除了出勤情况外,预习、实验操作过程和实验报告这3部分按等级评定,每个等级对应的分数为: a(90~100)、b(80~89)、c(70~79)、d(60~69)、e(50);对于前4个等级,教师可根据学生完成的情况给出该等级的加减等级。以a等级为例,a+对应100分,a对应95分,a-对应90分,这样每个等级都有对应的分数,可以做到客观地评价学生的实验过程。
5结语
本文根据笔者的教学实践,分析了《汇编语言程序设计》课程的教学现状,指出了实验教学在《汇编语言程序设计》教学过程中的重要性,并对汇编语言的实验教学进行了深入的分析和思考。根据实际情况提出了几点可行的措施,即合理安排实验内容,引入新的实验教学模式和建立严格的考核体系,从而达到发掘学生潜能、提高实践动手能力、增强学习汇编语言兴趣等目的。《汇编语言程序设计》课程的实验教学还需要广大教师积极探索,引入多种符合实际的教学方法,使汇编语言对计算机专业课程后续的学习发挥应有的作用。
参考文献参考文献:
\[1\]刘正红.对汇编语言实验教学的几点看法[j].信息与电脑,2012(6):198199.
[2]木林.《汇编语言程序设计》实验教学的探讨[j].呼伦贝尔学院学报,2012 (4):9295.
[3]张学,陆庆.汇编语言实验教学的思考[j].教学研究,2009(15):8182.
[4]侯宏霞.提高汇编语言课程实验教学质量的几点思考[j].内蒙古农业大学学报:社会科学版,2011(13):173174.
汇编语言作为一种用助记符表示的面向机器的符号语言,如何认识该课程的作用和地位,如何取得更好的教学效果?在长期从事该课程的教学过程中,笔者尝试各种提高该课程教学质量的探索,有些体会,供大家参考。
1 目前《汇编语言程序设计课程》的教学状况
汇编语言是面向机器的一种符号语言,它与机器的结构密切相关,是直接针对CPU、内存和I/O端口编程的程序设计语言。而目前的各种高级语言和网络应用开发工具很多程序几乎可以自动生成。然而机器语言、汇编语言和高级语言的程序设计语言体系仍然是计算机技术的基础,也是计算机技术的重要知识体系之一。对于计算机及其相关专业的学生以及计算机爱好者来说,汇编语言程序设计是需要掌握的重要专业基础知识之一。可由于汇编语言面向机器的特点,不仅需要硬件知识的配合,而且它有大量的语法规则需要记忆,加之上机调试单调且容易出错,导致了大部分同学对于《汇编语言程序设计》课程的畏难情绪,学生初学阶段普遍反映该课程难学,很多学生在学习过程中感觉比较难入手。
2 教学方法探讨
2.1 合理组织课程内容
教学过程中为了让学生掌握所学知识并用于程序开发,在课程教学中把握教材的难点和重点尤为关键。
(1)基础知识的教学。
主要包括计算机硬件和指令系统的教学。对计算机硬件基础知识的理解和掌握程度直接影响学生对汇编语言地理解和掌握,其中包括CPU内部的构成、总线的作用、寄存器的设置和用途以及内存的使用等是较难理解的部分,在实际教学中,可将相关内容融汇在一起来进行教学。通过应用如:图片和动画等形象化的方法将这些比较抽象的知识以较容易理解的方式展现出来。作为编程的指令系统对汇编语言程序设计而言是很重要的一部分内容,在进行该部分内容教学时,可以尽量通过演示程序来进行讲解,解释各条指令的运用方法、效果等,同时也可以适当应用动画等方式演示指令的执行过程。
(2)程序控制结构的教学。
程序控制结构是程序设计教学中的重点,汇编语言中的选择结构和循环程序结构程序设计则是此部分的难点。为了使学生更好地掌握,在教学过程中,可选择部分典型的例题,如:解决汉诺塔问题和阶乘的计算等。
2.2 教学手段上采用传统教学与多媒体教学相结合
在教学过程中我们可以有选择地使用多媒体教学,例如:用动画模拟汇编语言中寻址方式、子程序调用的堆栈变化过程、中断调用过程等。运用多媒体教学,增强学生的直观感,加深对问题的。在讲用汇编语言指令编程序的内容时,采用传统的教学方法,教会学生如何思考、推理,如何用指令实现算法,培养学生的抽象思维、逻辑推理能力。传统教学方法与多媒体教学相结合,将有助于提高学生的理解能力及综合思维能力。
2.3 随堂写一些小程序增强记忆
在课堂上多加练习编写小程序段会提高学生对指令的记忆及理解掌握。经过几年的教学发现,课堂上练习少了以后,很多同学往往出现在编写程序时有些指令写不出来或不会用相关指令来组织程序。在课堂上练习,使学生可以增强记忆,对指令的使用方法有了进一步了解,能够运用自如。
2.4 注重案例教学
案例教学法在当前面向各个层次学生的教学过程中已得到广泛应用,具体是指教师需要根据课程教学目标与内容的要求,选择相关典型的实例并组织学生学习、组织学生讨论从而最大程度调动学生的创造性思维的教学方法。其具体执行有两种形式。
(1)案例讲解。
案例讲解需要在理论知识讲授之后进行,通过案例讲解辅助,达到加深学生理解的目标。
(2)案例分析法。
案例分析方法的重点在于讨论和分析,其主要目的是培养学生的创造性思维。案例的选择应注意培养学生理解知识,提高学生分析问题和解决问题的能力。在汇编语言程序设计的教学中综合运用案例讲解法和分析法,能够使学生尽快理解汇编语言程序设计的本质特征并迅速掌握编程方法。
2.5 注重实验内容的实用性和趣味性
把实验实践环节与理论教学相融合,用实践教学促进学科理论知识学习,激发学生学习兴趣。对于任何一门计算机语言课程来说,实验都是教学中非常重要的一个环节,实验可以加深对理论知识的理解,提高学生的实践动手能力。为了避免传统的程序三大结构、数据组织与数值计算、代码转换和数制转换等方面的枯燥无味的实验,应将实验内容和实际应用相结合,如将汇编语言和计算机的系统维护等实际相联系,用汇编语言编写简单的设备驱动程序等等,增加图形化的实验内容等方法和手段,使实验变得实用有趣,增强学生动手的积极性和提高学生的动手能力。
2.6 突出重点和难点
另外,在教学过程中,加强传统的教学方法也是重要的,如在教学过程中要突出重点和难点;课堂上多做练习,课后注意答疑、辅导。
如:讲解指令系统时部分指令应结合指令编码(即机器指令)来介绍,这样学生更容易理解和接受。
例如:讲解转移指令中段间转移直接寻址和段间转移间接寻址问题,如果只列出样例:
段间直接寻址:jmp far ptr target1
段间间接寻址:jmp dword ptr addr [bx]
学生很难理解,具体怎么实现跳转。但是如果结合指令编码来讲解上述两条转移指令则效果会有很大改进。
如:
段间转移直接寻址指令编码需要5个字节,如图1所示。
也就是说,上例中Jmp far ptr target1 的target1给出的是转移地址,即包括段地址和偏移地址。
而段间转移间接寻址的指令编码是2~4字节,如图2所示。
中图分类号:G642文献标识码:A文章编号:1009-3044(2011)10-2459-03
Research on Teaching Method of Assembly Language and Programming
HE Li-xin, WANG Kun-lun, LIU Deng-sheng, WU Xiao-qin, TU Jing
(Key Laboratory of Net work and Intelligent Information Processing, Hefei University, Hefei 230601, China)
Abstract: At present,it is very hard to get a satisfied effect of teaching. This paper discusses how to get a better effect on teaching of assembly language by four facets. The four facets include that interesting the students in studying the course, and declining the difficulty of the course, and improving the teaching of experiment, and that a reasonable method of assessment is established. Practice proves the efficiency of this method.
Key words: assembly language; case methods of teaching; methods of assessment
《汇编语言程序设计》是高等院校计算机软、硬件及应用专业的专业基础(核心)课,它不仅是计算机原理、接口技术及操作系统等其它核心课程的先行课,而且对训练学生掌握程序设计技术、加深对计算机工作原理的理解有非常重要的作用。 在实际应用当中,可以使用汇编语言进行计算机系统维护、操作系统维护、操作系统分析、反病毒分析,还可以直接被用于嵌入式软件开发之中,更为重要是在与硬件直接打交道时汇编语言是唯一的选择。因此,搞好《汇编语言程序设计》课程的教学很重要,如何搞好该课程教学值得广大教师们探讨和总结。
1 现状分析
目前,汇编语言课程教学存在的如下问题:
1)绝大多数同学对汇编语言课程的目的认识不够,且错误地认为汇编语言已经过时,没有用,从而对这门课程的学习没有兴趣。
绝大多数学生把汇编语言作为一门纯粹的编程语言课程来对待,这是一个较大的误区,这从思想上和意识上把汇编语言放到一个普通的程序设计软件的位置,这样势必难以达到较好的教学效果。而本课程的一个主要目的就是让学生学习与认识基本存储控制思想、底层设备操纵方法、系统输入输出特点等内容,为学生在高层应用与底层的系统结构组织与实现之间架设一座桥梁,使他们能够建立一个完整的系统思想体系,为将来更好地应用和发展打下一个良好的基础[1]。
另外,目前直接用汇编语言编写软件的情况的确不多,所以有不少学生都错误地认为在高级语言盛行的时代汇编语言已经过时且在企业的实际应用中没有用途,因此对这门课程没有兴趣。
2)汇编语言难学,挫伤了学生对该课程的学习热情。
由于汇编语言程序设计涉及到计算机底层硬件,学习内容枯燥,需要记忆的内容繁多,起步比较困难,不像计算机高级语言起步容易并在现在的应用程序设计中占有绝对的优势,相对于汇编语言,高级语言接近人类的自然语言,易学易用,很多功能用高级语言里只要一条语句就可实现,而用汇编语言则要好几条甚至几十条语句才能实现,这在很大程度上挫伤了学生对该课程的学习热情。
3)实验内容枯燥无味,实验考核方法不够好,实验课效果差。
当前绝大多数学校的实验与实践环节的组织对学生学习汇编语言没有起到太大的帮助,汇编语言实验内容仍然停留在程序三大结构、数据组织与数值计算、代码转换和数制转换等方面,这会导致学生对本课程实验和实践环节没有兴趣,不能激发学生的学习热情。另外,很多实验课基本上是学生做实验,有问题请教老师,教师指导,实验课结束就意味着同学们都通过了该实验这种方式进行的。很显然这种方式对自我要求不高的学生没有任何监督力,实验课教学效果差是很自然的事情。
4)课程考核方法不够完善,对学习过程的考核不够严谨。
传统的考核方法是按照期末考试占70%,平时成绩占30%来计算总评成绩的,有点甚至直接用期末考试成绩代替总评成绩。显然这些方法对学习过程的表现考虑不够,这就导致有些平时不爱学习的同学,经常采取考试之前突击学习、押题等临时抱佛脚的方法来应付,这样的学习方式有时能侥幸通过考试,但很显然学到的知识不牢固,不全面,考过之后很快就会忘记的。
2 问题的解决方案
1)引领学生认识汇编语言课程的重要性,结合企业对汇编语言人才的需求和实例激发学生学习汇编语言的兴趣。
人们常说“兴趣是最好的老师”,事实的确如此,当学生们对课程产生了兴趣时他们会很主动地去学习,遇到困难会积极思考。为了激发学生的学习兴趣,作者在教学中使用了如下方法:
第一、强调《汇编语言》课程的重要性。《汇编语言》是高等院校计算机软、硬件及应用专业的专业基础(核心)课,它不仅是计算机原理、接口技术及操作系统等其它核心课程的先行课,而且对训练学生掌握程序设计技术、加深对计算机工作原理的理解有非常重要的作用。同时也是我们学习高级语言的利器[2]。
第二、介绍汇编语言在计算机系统维护等方面的实际应用,并选择有代表性的问题现场演示,让学生亲身体会到汇编语言的用途。虽然目前用汇编语言编写软件的情况的确不多。但是在实际应用中可以使用汇编语言进行计算机系统维护、操作系统维护、操作系统分析、反病毒分析,另外在一些嵌入式软件开发中有时还需要用到汇编语言,更为重要是在与硬件直接打交道时汇编语言是唯一的选择。
第三、用与生活中密切相关的实例现场演示,激发兴趣。
演示事先准备好的用汇编语言开发的与日常生活密切相关的应用实例,如:交通灯系统,空调单暖温度控制器,以及银行排队系统等等。使学生亲身体会到汇编语言的用途,从而彻底扭转学生们的编语言没有用的思想,激发学生学习汇编语言的兴趣。
第四、强调企业中需要懂汇编语言的人才。空口无凭,可以打开百度或Google的网页,输入“汇编语言 招聘”进行搜索就会发现的确有不少企业在招聘懂汇编的高级人才且待遇丰厚。亲眼见到上述企业的招聘广告,学生会深刻体会到《汇编语言程序设计》决非无用课程。
教学的实践表明:当学生明白了该课程的重要性和学习该课程的目的,学生们就会觉得学好该课程是很有必要的;而当学生们亲眼见到汇编语言在计算机维护等方面的实际应用和用汇编语言开发的与生活中密切相关的应用实例的演示时,他们就会体会到汇编语言的用途,激起他们的兴趣;最后当学生们看到网上不少企业在招聘懂汇编的高级人才且待遇丰厚时,学生们就会真正感受到汇编语言课程的魅力,激起他们更大的学习兴趣。
2)通过合理安排教学内容和充分利用多媒体教学的优势等方法降低汇编语言学习的难度,提高教学效果。
有了学习兴趣固然是好事,但如果在学习过程中遇到的困难太多或太大都会挫伤学生的学习热情。
而要想学习好一门课程,首先要选择一本好的教材。我们选择教材的原则是:结构清晰、主线特出,内容要有一定的深度和广度,所选例题要有代表性。根据该原则,我们选用普通高等教育“九五” 国家教委重点教材(沈美明,温冬婵 编著.《80X86汇编语言程序设计》. 北京:清华大学出版社, 2001.7)作为本课程的教材[3],该教材也得到了全国广大汇编语言教师的认可。经过多年的教学以及和学生的交流中我们发现,如果直接按照该教材的顺序教学效果不是很好。为了提高教学效果,作者在教学过程中做了如下四方面的改进。
第一,合理调整课程内容的先后顺序,将枯燥无味、需要大量记忆的内容分散到多个章节中讲授。例如:本书第三章 80x86的指令系统和寻址方式,这一章的指令太多,内容太杂,枯燥无味,要记忆的内容多。 若将该章中的串处理指令、控制转移指令等放到第五章的循环与分支程序设计中结合例题讲解效果更好,而将与子程序相关的指令放到第六章讲更合适,因为经过这样调换后,不仅避免了指令集中讲解时的指令太多,太枯燥,难记忆等问题,而且刚刚讲到的指令很快就能在例题中得到应用,学生对指令的理解和掌握会更加深入。第六章的dos系统功能调用内容也应该放到第五章中穿插讲授,这样提前的目的是为了让学生在实验中使用dos系统功能调用,因为上到第五章时就要求学生上机动手编写程序并用到这些知识点。
第二,充分利用计算机综合处理教学中的文字、声音、图象、图形、动画等教学信息,进一步优化《汇编语言程序设计》多媒体教学课件,从而降低汇编语言的学习难度。例如:初学者对于用汇编语言编写程序往往较难入门,可以首先对问题进行分析,用多媒体动画形式画出流程图,并用动画形式将每一步流程图与相应的实现该步骤的汇编指令一一对应起来,教学实践表明这样学生入门起来就要容易得多;再如:在子程序递归调用的讲解中,堆栈中的数据变化是学习的难点,很多学生被搞糊涂了,此时若将指令的逐条执行与相应的堆栈内数据变化情况采用动画的形式表现出来,学生就很容易理解这样难点内容了。像这样的例子还很多,由于篇幅有限,在此就不再列举了。
第三,抓住汇编语言的教学主线(即存储控制思想)进行教学。 汇编语言不像其他程序设计语言采用抽象了的数据,它采储存取控制的方式组对数据进行组织和操作,这既是汇编语言和其他程序设计语言的不同之处,同时也是这也体现出汇编语言与计算机硬件和操作系统之间的有着紧密联系,因此,汇编语言课程的教学主线是存储控制,该主线贯穿于整个教学过程。牢牢把握该主线,有利于掌握汇编语言程序设计的思想精髓和更好地抓住汇编语言面向机器的特点。
第四,采用案例教学法[4]进行教学。在教学当中,我经常使用案例教学法,教学效果很好。案例教学法就是教师使用与教学内容密切相关的实际案例来解决教学中的各种问题,以提高学生思考问题、分析问题和解决问题的能力,培养学生浓厚的学习兴趣的一种教学方法。运用这种教学方法,关键在于教师要准备大量与教学内容紧密相关的案例,并有计划、有意识、灵活地运用到教学实践中去,以取得预期的效果和目的。
3)增强实验内容的实用性和趣味性,增加汇编语言与高级语言混合编程的教学内容,建立合理可行的实验制度和考核方法。
对于任何一门计算机语言课程来说,实验都是教学中非常重要的一个环节,实验可以加深对理论知识的理解,提高学生的实践动手能力。
为了避免传统的程序三大结构、数据组织与数值计算、代码转换和数制转换等方面的枯燥无味的实验,我们将实验内容和实际应用相结合,如将汇编语言和计算机的系统维护等实际相联系,用汇编语言编写简单的设备驱动程序等等,增加图形化的实验内容等方法和手段,使实验变得实用有趣,增强学生动手的积极性和提高学生的动手能力。
另外,在实验中还要增加汇编语言与高级语言混合编程的教学内容。高级语言在软件开发中比汇编语言的使用要广泛的多,但是汇编语言有它自己独特的优点:占用空间小,速度快,可以与硬件直接打交道,而且与硬件直接打交道时汇编语言也是唯一的选择。因此要使汇编语言具有更多更好的应用性,就必须增加汇编语言与高级语言混合编程的教学内容,以引导学生在今后的实际应用程序开发中合理使用汇编语言开发出高效率的软件。
实验制度和考核方法的建立有利于进一步提高实验课的学习效果,实验课应使学生做到实验前预习,实验后总结,实验中逐个通过的方法。实验前预习是为了让学生在实验前对实验题目进行分析,查找相关资料,做好充分的准备以便保证学生在规定时间内完成实验;实验中逐个提高的方法是对每个完成实验的同学进行单独提3至4个问题,让其回答,只有回答正确才算该实验通过,这样做的主要目的是防止作弊和查找学生薄弱点;实验后总结则是总结经验和不足之处,达到进一步加深对相关知识点的理解和应用。上述三个环节在实验考核中分别占30%、40%和30%。教学实践表明建立实验制度和考核方法可以在很大程度上促进学生学习。
4)建立既注重期末考试结果又注重平时学习过程的课程考核方法
每门课程学习结束都需要对学生进行考核,有些同学平时不爱学习,经常采取考试之前突击学习、押题等临时抱佛脚的方法来应付,这样的学习方式有时能侥幸通过考试,但很显然学到的知识不牢固,不全面,考过之后很快就会忘记的。
为了防止这种现象的产生,在教学中采用“N+2”的考核方法,其中的“N”是教学过程中的考核次数或项目数,“N+2”中的“2”中的“1”是期末考试,另一个“1”是课堂笔记。针对每门课程, N不小于3且不大于5,过程考核可采用的形式有:作业、平时表现、单元(阶段)测试、期中考试、课程论文、课程实验、综合性实验等。一般来说课堂笔记占总分比例不得超过10%,期末考试占总分比例范围为40%~50%,实验占20%,其他的根据实际需要灵活选择。在这种考核方法下,那些临时抱佛脚的同学即便在期末考试中考了六七十分,但也会由于平时成绩不理想也无法通过该课程的考核,也就是说这种考核方法既注重期末考试结果又注重平时学习过程,因此那些原本平时不爱学习的同学在这种考核制度的要求下也不得不抓紧时间学习了。实践表明该考核方法的确行之有效,平时学习的同学越来越多了,知识的掌握程度有了明显的提高,补考的人数显著下降,有些班级甚至没有人需要补考。
3 结束语
本文是作者将自己在教学过程中如何激发学生学习兴趣,通过适当的方法和手段降低课程学习难度,重视和严格要求实验教学,建立合理可行的课程教学制度和考核方法,从而达到改善教学效果的一些方法做了初步探讨,作者深知要想取得更好的教学效果还需要广大教师付出更多的努力,进行更多的探索和广泛的交流。
参考文献:
[1] 陈晓东.《汇编语言》教学方法探讨[J].山西农业大学学报,2006,5(6):70-71.
1.前言
汇编语言是我们理解整个计算机系统的最佳起点。人们往往认为汇编语言的应用范围很小,因而忽视了它的重要性。其实汇编语言对学习计算机科学与技术的人是非常重要的。所有程序,不论用何种语言进行编制,只有转成机器指令,运用机器的逻辑功能,功能才得以实现。
汇编语言直接a描述机器指令,比机器指令更容易记忆和理解。通过学习和使用汇编语言,我们才能够感知、体会、理解机器的逻辑功能,这样不仅可以为理解各种软件系统的原理打下技术理论基础,而且可以为掌握硬件系统的原理打下实践应用基础。
2.教学中存在的问题
当前高级语言的发展非常迅速,各种开发工具层出不穷,其功能也越来越强大。高级语言进行程序设计的可操作性越来越强,许多非计算机专业人员在不了解计算机的结构、没掌握计算机相关的专业理论和各种计算机语言具体编程等情况下,同样能很好地使用高级语言。所以,高级语言的发展弱化了汇编语言的地位,这使部分高职学生觉得汇编语言已不重要了,学不好没有多大的关系。所以,思想认识上的不重视,导致了部分学生学不好这门课程。
《汇编语言程序设计》的学习需要一定的英语知识。高职学生的英语基础普遍差,据有关职业教育方面的统计资料显示:在高职高专院校中60%的学生英语基础差;30%的学生有一定的基础,但对英语学习不感兴趣;10%的学生英语基础较好。实际上,普通高职高专院校学生英语的基础情况比统计的更严峻。这就为他们学习这一课程带来了一定的障碍。
针对这一系列的情况,笔者根据教学经验,总结了在高职院校教《汇编语言程序设计》的一些心得,希望对大家有所帮助。
3.注重课堂教学
3.1优化教学内容。
本课程涉及内容较多,教师应在讲课之前先对课本内容进行优化。并不是课本上所罗列的内容都需要讲,教师要有选择性讲解:对学生有用的而课本上讲得不全面的要补充讲解,而对学生用处不大的可以不讲或一带而过,争取做到“少而精”。
3.2让学生充分认识到该课程的重要性,提高学生的学习的兴趣。
“兴趣是最好的老师”,如何让学生对本课程感兴趣?笔者认为关键是把握好开学第一堂课。在学生刚接触本课程时,教师不要急于介绍理论知识,而是要强调该课程的实际应用,通过介绍汇编语言的特点和汇编语言在一些典型系统开发中的具体应用来激发学生的学习兴趣。
目前对单片机的灵活编程已经应用到各个领域,无论是尖端科技,如军事、通信、能源、机器人、交通、IT,还是现代工业、农业,如仪器仪表、汽车电子系统、家用电器、玩具、个人信息终端等诸多领域,都离不开单片机。而单片机的编程里大部分都使用了汇编语言,汇编语言的易用和灵活的特性,使得汇编语言将继续占有独特的地位,其适用的领域要求执行效率高、反应快,如操作系统内核、工业控制、实时系统、家用电器的计算机控制功能等。在讲述其重要性和应用领域时,教师应结合一些身边的、具体的实例,如电梯升降的控制程序和广场的大型喷泉的控制程序均是由汇编语言编写的,学生的兴趣会被这些实例极大地调动起来。
3.3注重实践环节。
在计算机相关专业的教学领域,实验教学是培养学生学习能力、实践能力、思考能力、创新能力的重要环节和有效途径。学生在学习汇编语言这门课程中产生的困难,来自于他们对所学知识缺乏必要的感性认识,没有得到充分的实践。
计算机在很多方面不同于其他学科,尤其是与硬件有密切关系的课程。由于汇编语言课程与硬件操作有着密切关系,因此实验环节在整个教学活动中占据了举足轻重的地位。汇编语言的实验对培养学生的动手能力和学习兴趣,提高学生阅读、编辑和调试程序的能力,有着不可替代的重要作用。学生通过实验能深入了解CPU、存储器、接口及外部设备的工作特性,对数据在计算机中的表达和传送产生感性认识,在实验中学生能对汇编语言有更好的理解、掌握,从感性认识上升到理论认识。
4.改进教学方法
4.1对照教学法。
在讲汇编语言时,教师可以和其它语言对照讲解,比如C语言。C语言作为一门基础和先驱课程,在此时起到了很好的借鉴作用,由于大部分学生对C语言掌握得较好,基于语言的相通性,在汇编语言的相关教学中教师若以C语言作为对照展开讲解,将会收到很好的教学效果,也能增进各科之间的知识和方法上的联系。下面笔者结合教学实践,列举一些应用对照教学法的实例。
MOV指令是8088指令系统中首要讲解的一个指令,也是汇编程序设计中使用最频繁的指令,教师应强调对操作数的要求。有几点我们可以用C语言来对比解释:
传送过程。其传送过程类似于C语言中的赋值,只是在这里是给寄存器或存储单元赋值,其实C语言中的变量名本身就是一个符号地址,汇编程度的赋值最终应对应到存储器的某些存储单元。
两操作数的类型匹配问题。该内容在C语言中已作了强调,汇编中类型匹配问题也是一个重点。与C语言类似,汇编语言操作数的位数要保持一致,只是在8088中常用的类型为字节和字。
强制类型转换。C语言中用到了该知识,学生也已掌握,那么汇编语言中又如何实现呢?很自然地我们就可以引出“BYTE PTR”和“WORD PTR”这两个操作符。
4.2互动式和启发式教学。
高职学生的课堂气氛一般比较活跃,他们非常喜欢教师引导、提问,喜欢回答问题。所以教师应利用这一特点在上课过程中设计一些有意义的提问,利用提问将要讲的知识点引出来,避免平铺直叙地讲解知识点,这样让学生带着问题来学习知识点,会起到事半功倍的作用。例如,在讲解编程部分的循环结构时,笔者先举了这样一个例子:求1+2+3+……+100的和。学生立刻就说出结果为5050。笔者接着问:加到1000呢?这样很多学生饶有兴趣地听讲。可见,教师所选的题目要由浅入深,要能激发学生的学习兴趣,要想办法让学生变被动学习为主动学习。
课堂练习也是互动式教学一个非常重要的方法。在讲解完某一个例题后,教师可以出一道类似的习题让学生在课上完成,请学生上讲台在黑板上写出解题步骤并进行讲解。例如刚学习了用循环的方法求1+2+3+……+100的和,教师可以让学生练习一道2+4+6+……+100的和。这样可以检验学生的掌握情况,找到学生理解错误的地方,从而对症下药。就学生理解错误的知识点再进行讲解,这样除了可以让学生当堂能够掌握所学的知识点,还能让其做到举一反三。
4.3实例教学法。
由于本课程是一门比较抽象的课程,因此教师在课堂讲授中应该尽量用一些通俗易懂的例子进行教学。
例如在讲解汇编中存储器地址分段的概念时,为了便于学生理解,教师可以借助平时生活的居民楼,进行举例。一个小区有多个居民楼,如一号楼、二号楼等,每个楼里有多个室,如101室、102室等。我们可将楼号比作段基值,每个楼里的房间比作偏移地址,很显然一号楼的101和二号楼的101是不一样的。这个例子可以使学生易于理解分段的概念。
再如在讲解中断的概念时有很多例子可举。把教师上课比作CPU正在处理的事,门外有学生打报告,教师就暂停正在处理的事情让学生进来,等学生进来后接着讲课。这样学生很容易就能掌握中断的概念。
教师可以将难理解的知识点与日常生活中的小事相联系,这样既可以使学生学到扎实的理论知识,又不会使学生学得吃力。
5.充分发挥多媒体教学的作用
汇编语言指令多、变化多,相对其他可编程语言来说源程序长而复杂,一个简单的问题解决至少要几十行,多则上百行,教师讲解例题时如果板书,就要花去大部分时间。如何解决这个问题呢?多媒体能够提高教学效果,扩大教学范围,延伸教师的教育功能。教师应在课前准备讲解的程序,上课时直接操作计算机,一边讲解指令的格式及算法,一边将指令使用前后的情况、程序的效果等通过投影仪展示给学生。计算机教学还可借助网上丰富的资源、图文并茂的生动界面、多姿多彩的影像资料,这些可使教学具有感受性、新颖性、可组合性、可扩充性,使学生的思维更加具有发散性,更容易培养学生的创新思维。
6.结语
笔者对汇编语言课程的教学内容和教学方法进行了探讨,这些教学方法促进了课程的建设与发展,为学生学好后续课程打下了一个良好的基础。摸索一条适合高职学生需要的、有效的教学方法,使高职学生能更好地、更快地掌握汇编语言程序设计,培养学生的分析问题、解决问题和实际操作能力,我们在汇编语言课程教学中需要继续探索研究的目标。
1课程的现状
汇编语言不同于其它高级语言,必须要求编程人员有一定的硬件基础,如对CPU的结构、CPU与存储器等部件的数据传送过程必须要有基本的了解,这样才能学好这门课程。在教学过程中,我们发现学生对高级语言编程学习积极性高,对汇编语言课程缺乏兴趣,因为课程本身指令复杂,规定繁多,再加上学习汇编指令前对CPU的相关工作过程理解不透,导致学生厌学,又由于本课程面对的低年级学生只有高级语言的基础,习惯于高级语言的自然表达,初次接触计算机硬件知识心理上有恐惧感,更难以适应繁杂的低级语言。
针对本课程的特点,对教学内容、环节、过程等进行了精心设计,下面就教学方法的设计、实践教学方法、课程考核形式等方面进行的一系列改革进行详细探讨。
2教学方法设计改革
为了避免学生因指令复杂,规定繁多、难度大而对该课程产生畏惧的学习心理,教师有必要对教学内容进行合理组织,对教学过程进行精心的设计。
2.1利用FLASH技术,使教学难点容易理解
在多年的教学过程中,我发现学生在学习CPU结构这章节中,对介绍的CPU由哪些寄存器(名称、大小)构成,各个寄存器的含义,用途,CPU与存储器等部件的数据传送过程,会觉得很抽象,多数同学都是采用死记硬背的方式,这章节是第二章节的内容,也是能否学好该课程关键的一章,如果理解不深,这无疑为后续的学习,特别是寻址方式的学习埋下了隐患。
针对这个问题,教师有必要对教学过程进行精心的设计。
在这章节中我们利用FLASH技术,把各种寻址方式下传送指令的CPU与存储器等部件的数据传送过程以动画形式展现给学生,使得复杂,抽象的过程变得直观,学生理解比较容易,也加深了对寻址方式的记忆。
2.2对比法教学
目前计算机专业的课程设置中,《汇编程序语言的程序设计》课程通常是学习完C语言课程之后开始学习的。所以在教学中可以采用对比法来讲解课程,对某些语法知识点和程序设计过程我们可以以C语言和汇编语言对应分析。
例如在介绍寄存器时,由于在一般的c语言程序中并没有直接使用到寄存器。因此,我们使用vC++6.0环境下的调试工具显示一个c语言程序及其对应的机器码,让学生看到编写汇编程序寄存器的用途,加深了学生对汇编语言程序的理解。
int m=5,n=6,c;
004010E8 mov dword ptr [ebp-4],5
004010EF mov dword ptr [ebp-8],6
c=m+n;
004010F6 mov eax,dword ptr [ebp-4]
004010F9 add eax,dword ptr [ebp-8]
004010FC mov dword ptr [ebp-0Ch],eax
在介绍语法知识时,比如变量的定义:
C语言中的变量定义形式如下:
int c1,c2=0;
汇编语言的变量定义形式如下:
cl DW ?
c2 DW 0 转贴于
2.3抽象概念的比喻教学法
在对段地址和偏移地址的讲解过程中,可以采用比喻法,把操作数比喻成学生,把教室的房间号比喻成段地址,教室内每个座位编个号,编号就是偏移地址,要想到教室把某个学生找到,就要找到相应的教室号,再到对应的座位号找到这个学生,同理,要想把主存中的操作数找到就要找到段地址和相应的偏移地址,另外要让学生知道每个教室里的座位号都是从0号开始编号的,也就是每个段里的偏移地址如果不特别指定,也是从0号开始编号的。
3实践教学改革
3.1增强实验环节,做一些实际项目
程序设计对于大多数的初学者来说有一定的难度。对于给定的一个实验题目,许多学生往往感到无从下手。目前的上机实验时间往往很短,常常是学生才刚刚有点入门,实验环节就结束了;且课外实践环节几乎没有,导致学生即使课内学的再好也不会应用。
在实验设计方面可以先把一些经典的程序提供给学生,例如分支结构的设计、循环结构的设计等,让学生在写出C语言程序之后再设计汇编程序,找出两者编程思维的区别。这样通过一段时间的经验积累,就能够编写比较复杂的的程序,由于上机时间有限,可以每次实验课之后布置一些题目供学生选择思考,让学生课外分组来设计这些程序,题目的类型可以是研讨型的让学生从更多的角度去思考上机实验过的题目,编写出不同的程序;另一种为编程型,
例如可以设置这2道题目,音乐小键盘、贪吃蛇游戏等,以加强同学们的编程能力的训练。
3.2采用与高级语言混合编程
目前越来越多的场合要使用汇编语言和高级语言进行混合编程,因此在教学时应强调汇编语言和C/C++的混合编程,并且这样也可以为今后嵌入式系统软件开发的学习打下坚实的软硬件基础。
在实验课中可以借助 Visual C++开发工具,采用内联汇编的方式,在 C/C++源程序中嵌入汇编指令序列完成一定的功能,并让学生设置断点然后跟踪执行,同时注意观察寄存器的内容和变量的值。这样可以一方面让同学们熟练掌握两种语言的切换使用,另一方面让他们感受到两种语言各有特点。例如可以利用汇编语言处理高级语言中不方便处理的一些问题。
4课程考核形式改革
因为“汇编语言程序设计”是实践性很强的一门课程,所以实验课成绩应该在总成绩中占有相当大的比重。目前大多数高校的汇编语言课程的实验课成绩只占很小的比重,即理论知识往往占课程期末考核总成绩的70%~80%,这样往往会导致学生不得不将大量的精力放在理论知识的学习中,结果只会造就大批的应试高手。在教学中,我们遇到过有的学生考试试卷能考90分以上,却连最基本的计算机操作都不能动手。今后这门课程的考核,实验课成绩应该提高到占总成绩的1/2。老师在实验中应该营造出互动气氛,检查每个学生的完成情况同时做好记录,根据学生的实际动手情况给出他们的平时实验成绩,而不是只依据交上来的实验报告,这样也能杜绝抄袭之风。
5结束语
通过教学改革的实践,在一定程度上提高了他们对本课程的学习积极性,又降低了学习难度。良好的教学效果是永远追求的目标,在今后的教学中,我们还需要不断进行探索、研究和尝试,不断更新观念,发现自身教学过程中的问题,找到解决办法,提高教学效果。
参考文献
[1] 王成耀.80x86汇编语言程序设计[M].北京:人民邮电出版社,2008(第2版).
社会竞争日益激烈,快速变化的社会环境对人才的综合素质提出更高要求,强调适应能力和设计应用能力的提高。为了提升我国高等教育的水平,尽快与国际高等教育接轨,近年来国家加大了对教育科研的投入,加强对高等教育的管理监督,强调对学生动手能力和创新能力的培养[1]。计算机作为现代工作生活必不可少的工具,人们的创新思想和设计理念都需要借助计算机来实现,各个专业的学生都需要具备一定的程序设计能力,因此大多数理工科专业的学生在整个本科学习过程中会选修两门以上程序设计方面的课程。如何合理地安排课程和实验内容,提高学生的程序设计能力,对培养高素质的综合人才具有重要意义。目前大学课程的改革偏重于课程内容以及课程设置方面的改革,而对教学实施改革的力度还不够[2]。
1程序设计能力的培养
程序设计能力的培养,首先是培养学生的设计能力,如何分析问题,提出解决方案;如何表达自己的设计思想,进而完善设计思路。设计能力的培养与具体的程序实现没有太大关系,然而却是程序设计的基础。因此,程序设计能力应该由两大部分组成:
第一部分,也是基础部分,分析问题,表达并细化解决思路的能力。这一部分与课程内容的联系较为松散,却是能力培养的基础。
第二部分,是与课程密切相关的编程实现和调试程序的能力。学生用课程中所学的某种编程语言,例如汇编语言或C语言,实现自己的设计思想,并实际动手上机,调试运行程序,解决具体问题。
目前课程内容设置以及教师的授课均偏重于第二部分,课堂上多讲授具体指令的功能及应用,大多数例题程序只有十多条,至多几十条指令,并且教师在课堂授课时大多直接给出正确的程序,而不是向学生演示分析问题、设计流程、编写程序、最后调试修改程序的整个程序设计过程。其结果就是,面对程序设计题目时,学生大多直接开始编写程序,而不是整理设计思路。盲目编写的程序往往逻辑混乱,缺乏调试经验的学生无法调试得到正确结果,打击了学生学习的自信心和积极性。因此在课堂教学活动中,应该强化对学生分析设计能力的培养,通过例题和课堂问答,详细演示整个分析、修改,最后完成流程设计的过程,不要直接给出答案。大多情况下,引导学生完成的流程与例题的答案有所不同,分析两者,改变学生始终希望有标准答案的习惯。有了流程后,引导学生用所学指令编写程序,利用多媒体教学手段,向学生演示整个调试修改程序的过程,强调分析问题、整理设计流程的重要性,改变学生忽略流程设计,直接编写程序的“恶习”。
基金项目:重庆市高等教育教学改革研究项目(0634170);重庆大学教学改革项目(教200617)。
作者简介:胡青(1975-),女,重庆人,讲师,硕士,研究方向为模式识别和智能系统。
实际应用中,人们分析解决问题时,多采用从大到小,从上到下逐渐细化的方法。然而在教学过程中,学生很难接受这种方法,面对一个稍微复杂的具体问题时,学生大多无从下手,不知道如何开始分析。“汇编语言程序设计”课程在整个本科教育体系中属于基础教育,开设时间较早,大多开设于大学二年级,这也就意味着,本课程主要面向低年级的,独立思考能力相对较差的学生。这类学生可以解决具体的小问题,对于稍微大一点的问题,就不知道如何进行分析。针对这种情况,培养学生思维分析能力时,适宜采取从小到大的方法,逐步引导学生适应分析方法,示例最好选择学生熟悉的事务,如学生成绩管理等。从一个具体的小功能出发,如统计某高考学生的总分,配合课程进度,逐步添加功能。例如学习分支结构及相应指令后,就可以统计某个学生不及格的课程门数,到课程结束时可以完成一个具有基本功能的学生成绩管理系统。最后再引导学生用从大到小,从上到下的方法分析设计学生成绩管理系统的功能,使学生了解熟悉这种分析方法。
第二部分程序设计能力的培养,要使学生适应计算机的“思维”方法。计算机中使用二进制,数据的储存、运算、传输都采用二进制。这就需要教师耐心引导,通过大量的例子和演示,使学生能够切换到计算机的“思维”方法,而不是继续停留在传统的纸笔方式。贯穿整个程序设计的是数据流,从哪里得到原始数据,对这个数据做何种处理,结果存放到哪里。调试验证程序的过程就是修改待处理数据,观察数据处理的结果是否正确,修改指令直到结果正确的过程。与其他非计算机类的课程相比,“汇编语言程序设计”课程有其特殊性,程序设计是一个调试修改错误,最终得到“正确”程序的过程,而其他非计算机类的大多数课程都要求一次得到正确结果,不允许出现错误,这就导致学生下意识追求直接写出“正确”程序,而不是调试程序。教材上的例题以及教师授课时都直接给出最终的程序,省略中间的调试修改过程,在一定程度上也加深了学生的这种倾向,刚接触程序设计的学生往往有重指令、轻数据、忽略调试的倾向。因此充分利用多媒体手段,在课堂上引导学生动手编程,演示调试修改过程,通过实际的例题说明观察数据,调试修改程序的方法,对培养学生调试修改程序的意识和能力是及其必要和有效的。
2教学及实验改革的实践
2.1增设习题课
“汇编程序设计”课程是实践性很强的课程,都配有一定的实验课程,教师对实验课的重要性已有了足够的认识,然而强调实验课程对学生动手能力的培养[3],在一定程度上忽略了课堂教学对学生“动脑”能力的锻炼。课堂教学不能局限于程序指令或语法规则的讲授,固定不变的“静态”内容更多需要学生记忆,而不是理解和应用。理论教学活动以教师为主体,而习题课应以学生为主,教师起辅助引导作用,习题课侧重于“动态”思维能力的培养。
例如任何一本程序设计入门的教材都将程序设计分成了3种基本结构,即顺序结构、分支结构和循环结构,掌握这3种结构的设计调试是整个程序设计的基础。介绍相关指令和程序结构后,在习题课上,通过具体的例子,引导学生分析问题,提出解决问题的流程,使用所学的指令和结构编程实现。利用多媒体手段,演示程序的调试修改过程,设计调试数据,调试学生编写的程序,引导学生自己发现解决错误,整个过程中注意与学生的互动。多个简单的例子组合起来就形成了一个稍微复杂的问题,通过前面分步的分析,学生对这个问题已经熟悉了解,不会产生畏难情绪,之后再通过一个类似的问题,引导学生自行分析实现一个稍具规模的程序,可以有效地增强学生的自信心。习题课中要注意黑板与多媒体手段的结合,强调以学生为主体,教师引导提示。通过习题课使学生对如何分析设计调试程序有了直观认识后,再经过实验环节,加深学生的理解和应用,最终达到培养学生能力的目的。
2.2实验内容的改革
实验环节作为理论教学的补充,一直处于辅助地位,一般针对理论教学的章节安排设置实验内容,而理论教学中各个章节的知识点都是相对独立的,这就直接导致实验内容相互间联系松散,甚至各自独立。根据各章节的知识点安排实验内容,每次实验都只要求学生编写一小段程序,锻炼检查学生对具体知识点的掌握,前后实验之间联系较为松散,到课程结束时,学生编写过多个实验程序,但每个程序都只有几十行代码,很难将各个知识点融会贯通,灵活运用,更加无法体会模块化设计的必要性和设计思想。因此设置实验内容时,应该加强实验间的联系,每次实验都给出需要综合应用所学知识点的题目,随着课程的进展,实验内容也从简单到复杂,到课程结束时,学生应该能够进行一定规模的程序设计。表1列出了本课程的综合应用实验题目,共分7次实验,每次实验4学时,每次实验均布置1~2道针对该次实验知识点的一般应用题,外加综合应用前面所学知识的综合应用题。这样的实验设置可以帮助学生融会贯通所学知识,并能有效地改变学生忽略平时学习,期末集中突击的现象。
表1 “汇编语言程序设计”课程综合实验设置
实验名称综合实验题目
实验1简单程序实验编程实现下列无符号数运算,结果放在变量X中,X=(84÷6+5)*7-100
实验2分支程序实验无符号字节型变量X取值范围为[0,200],编程实现如下函数f(X),结果存放在变量Y中。
f(X)= X/20≤X≤50
(X÷6+10)*7-1050
5*X 100
实验3循环程序实验无符号字节型变量X取值范围为[0,200],编程实现如下函数f(X),结果存放在变量Y中。
f(X)= 0+1+2+…+X0≤X≤50
(X÷6+10)*7-1050
5*X 100
实验4子程序实验编写一个子程序实现实验3中综合题的函数功能
实验5DOS功能调用实验从键盘输入X的值,并将f(X)结果显示在屏幕上
实验6图形功能实验在屏幕上画出f(X)函数的图形
实验7文件输入输出实验从键盘输入X的值,共输入10次,将f(X)的结果显示在屏幕上,并且将X和f(X)的值写入文本文件OUT.TXT
2.3实验过程管理的改革
同理论课相比,实验课的管理相对要松散一些。实验课中学生迟到、早退、旷课、代人签到等现象屡见不鲜。近年来我们加强了对实验环节的管理和监督,规范实验报告的要求,要求教师批改每份报告,并给出评分等级。然而在实际执行过程中发现,学生抄袭报告现象较为严重,不少学生在实验前并没有完成预习工作。由于批改工作量较大,一个教师要批改几十甚至上百学生的实验报告,不少教师采取“粗放式”的批改办法,实验报告制度在当前情况下形式大于实效。
计算机类课程的实验有其特殊性,学生更容易复制抄袭,并且教师很难在短时间内通过阅读报告检查出程序的错误,发现抄袭报告的学生,也就很难合理公平地评定出实验成绩,这在一定程度上打击了学生独立完成实验的积极性。实验成绩的评定既要重视实验结果,更要重视实验过程[4],只有建立相应的管理机制杜绝抄袭现象,才能促使学生踏踏实实地完成平时的实验,进而达到锻炼培养学生动手能力的目的。每次实验都布置具体的实验任务,设定截止日期,要求学生在截止日期前将自己编写的程序通过电子邮件发送给指导教师。教师直接运行程序,检查学生实验的完成情况,可以有效地提高批改速度和正确率,再利用计算机软件比较学生提交的程序,相似度达到一定程度就可判定为抄袭,对于认定为相互抄袭的学生,该次实验均判定为不合格,这样既可以减轻教师批改报告的工作量,也可以较为客观准确地评定出学生的实验情况,对改变当前抄袭报告的现象能起到积极作用。
通过实际的教学活动发现,习题课上学生注意力比较集中,大部分同学都能跟随教师的指导积极参与。同以往相比,上过习题课后,实验课中提问的学生人数明显增加,不少学生询问如何调试,而不是直接请求教师帮助解决问题。采用上述措施后,抄袭实验报告的现象依然存在,但人数有所下降。说明上述改革措施,对培养学生综合应用能力和调动学生的学习主动性起到了积极作用。
3结束语
随着计算机技术的快速发展,计算机已经深入人们生产、工作、生活的各个方面,良好的计算机应用和设计能力是高素质人才应该具备的基本能力。本文针对“汇编语言程序设计”课程的特点,对该课程的教学方法、内容和管理模式进行了改革实践,这些措施对提高学生程序设计能力起到了积极作用。希望课程建设经验能够对其他相似课程的改革起到参考借鉴作用。
参考文献:
[1] 教育部. 国家教育事业发展“十一五”规划纲要[Z]. 2008.
[2] 周建平. 大学课程改革的“深度”缺失与觉醒[J]. 江苏高教,2009(1):71-73.
[3] 李丽滨,卢宇. 高校计算机实验教学改革的思考与探索[J]. 辽宁教育研究,2002(9):52-53.
[4] 刘建英. 计算机硬件开发性实验教学之我见[J]. 高等理科教育,2007(4):105-107.
Reform in Teaching and Experiments of Course “Assembly Language Program Desgin”
HU Qing, YOU Ji-yuan, SHI Xin
关键词:汇编语言程序设计;实验平台;教学改革
中图分类号:G642
文献标识码:B
1教材系列化建设
我们以CCC2002为依据,参考IEEE-CS&ACM 制定的计算机课程指南,阅读大量的国内外相关优秀教材,结合课程组科研实践成果,按照系列化建设的思路,先后编写完成了《Intel 80x86/Pentium汇编语言程序设计》、《汇编语言程序设计(从DOS到Windows)》、《Windows汇编语言程序设计教程》、《Windows汇编语言程序设计实验指导》等4本教材。其中1本被评为2006年北京市高等教育精品教材,1本被列为2007年“普通高等教育“十一五”国家级教材规划”,2本作为2007年北京高等教育精品教材建设项目。通过编写、使用这些教材,为教学内容改革奠定了坚实的基础。
2教学内容及教学方法改革
在教学内容和方法上加强与“微机原理与接口技术”、“计算机组织与结构”、“操作系统”等课程间的联系,有利于各门课程之间的融会贯通。教学内容体现课程的时代性和先进性,以32位汇编语言及Windows编程环境的内容为主,从16位实模式转换到32位保护模式,结合丰富的应用性实例,使所学知识与目前主流的应用环境相结合,为学生的创新能力奠定基础。
为实现教学模式从“教学型”向“研究型”的转变,需要充分研究学生的认知过程,掌握认知规律。根据“汇编语言程序设计”课程本身的理论抽象性和鲜明应用性,课程组以建构主义理论为基础,探索并改进教学方法。在教学设计中体现以学生为中心、以教师为主导的思想,采用重点难点精讲、对比教学、形象教学、重视实验等方法,用多媒体手段、典型实例来展现抽象的编程概念。采用现代化网络教育技术建立了课程网站及网络教室,加强师生互动,拓展了交流空间。
例如,在多门专业课中均涉及到“中断”概念,在汇编语言程序设计课程中以编程实例将它具体化,使学生对抽象的理论概念有了直接的认识,从软件和硬件两个角度加深了对中断机制底层的深层次理解,提高了学习兴趣。
又如学生难于理解间接寻址方式,但学生在学习本课程时已有了C语言知识,在教学中就把间接寻址方式与C语言的指针类比,通过与先前知识的衔接,经过对比学习,使学生建构、衍生出更深层次的信息,很容易对新知识消化。对于较难理解的程序转移地址的形成,采用动画方式帮助学生理解,并通过CASE结构程序设计实践巩固。把宏指令与过程及高级语言的函数对比,学生很快掌握了其设计方法,他们通过主动对知识的处理和转化,又总结出“宏实际更像高级语言的预定义,用到它的地方都会有它一份拷贝,所以宏可能让你的真正代码量剧增”。
通过精心组织教学,选择与实际应用密切结合的教学案例,在课堂上和网络支撑平台上增加总结和讨论环节,鼓励学生主动反思,从而调整个体的认知,帮助学生实现在原有认知基础上新知识的整合,在融合了多门课程知识的基础上,形成系统的知识观念,提高综合应用和创新能力。
3构建先进的实验平台
在微机系统的教学和实验内容上,Windows操作系统及32位保护模式已成为汇编语言的发展趋势。然而,目前Windows环境下还没有一种专门用于汇编语言的主流开发工具,而底层汇编语言编程所面向的硬件型号和接口又存在巨大差异。为此,课程组开展了改革汇编语言程序设计实验环境的探索,编写了《Windows汇编语言程序设计实验指导》教材,构建了新型的实验环境,采用Microsoft Visual C/C++集成开发工具来编写、调试汇编程序(见下图),使汇编程序的编辑、编译、连接、调试等过程均与C/C++程序一致,减轻了学生学习负担,提高了C/C++与汇编混合语言编程能力。应用虚拟机软件技术,使汇编语言编程面向虚拟的、统一的硬件及其接口,保证了实验环境的统一性,提高了实验效率。
4开设体现前沿性、先进性的汇编语言实验
汇编语言程序设计是一门实践性很强的课程。课程组跟踪计算机软硬件技术的最新发展,对国内外的相关课程教学及实践进行了深入的调研,结合在科研实践中取得的部分成果,开设出一系列具有鲜明应用特色的验证型、综合型和创新型的层次实验,并写进《Windows汇编语言程序设计实验指导》教材中,进一步巩固理论教学内容。
图 VC集成环境下的汇编语言调试
验证型实验以掌握单元知识为目标,着重训练基础编程能力,如数据块操作、数据显示、字符串排序、素数判断、有序数组合并等。
综合型以融合本课程知识为主,如多模块程序设计、中断程序设计、线程同步、文件管理等。
创新型以设计具有应用背景的实验为主,培养学生对计算机知识体系的融会贯通及创新能力。如数据库管理系统设计、全屏幕编辑器设计、缓冲区溢出实验、读取硬盘序列号、硬盘DMA等。
基于个体的差异性,学生可以按照自己的能力和兴趣选做部分或全部实验,充分发挥了学生的主观能动性。这种强调自主学习的教学过程和方法,有效地促进了学生自我认知的发展和新知建构。通过实践环节,提高了学生的程序设计能力,为学习后续专业课程,设计硬件驱动、性能优化、代码对抗等底层系统级软件打下坚实基础,培养了学生的创新能力。
参考文献
[l] 李未. 提高教育质量,培养创新人才[J]. 计算机教育,2008,(1).
中图分类号:TP313 文献标识码:B 文章编号:1002-2422(2008)03-0086-02
设计的I/O子程序库包括16位版本和32位版本,可分别应用于16位和32位汇编语言应用程序,提供的子程序功能包括不同数制和字符串的输入与显示,状态标志的显示,满足汇编语言程序设计的通常要求。
1 设计方案
1.1子程序功能需求
根据在汇编语言程序设计中的通常要求,子程序所提供的功能主要包括键盘输入和显示器显示,输入和显示的内容可以是不同的数制与字符串格式。如表1所示。
1.2子程序库结构
为了方便整个子程序库的设计,设计了一些通用予程序。在实现提供给用户使用的子程序时,充分利用这些通用子程序,简化了子程序的代码编写,减少了子程序库的长度。主要子程序之间的关系如图1所示。
字符输入和显示子程序READC、DISPC是整个子程序库输入输出的基础。利用这两个子程序实现了字符串输入和显示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同数制数据输入和显示的基础:通过调用READMSG读入字符串,然后调用字符串转换子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分别将字符串转换为不同数制的数据,从而实现了不同数制输入的子程序READBIN、READHEX、READUI、READSI等;通过调用DISPMSG显示字符串,然后调用数据转换字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分别将字符串转换为不同数制的数据,从而实现了显示不同数制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
设计的16位和32位的子程序库提供的子程序功能都是相同的,区别在于16位的字符输入子程序是利用DOS系统调用实现的,而32位的字符输入子程序是利用WIN-DOWS API函数实现的。其他子程序则可以通用。
各个子程序汇编后,由库管理工具LIB.EXE生成16位子程序库I/O16.LIB和32位子程序库I/O32.LIB。
1.3参数传递
汇编语言子程序的参数传递可以采用寄存器传递,共享内存变量和堆栈传递三种方法。堆栈传递参数时,可以用MASM提供的伪指令PROTO来声明子程序,用INVOKE来调用子程序。这两个伪指令在声明和调用子程序时相对于CALL指令和PROC伪指令要简洁得多。使用堆栈传递参数也是高级语言通常使用的子程序传递参数的方法,用堆栈传递参数的子程序可以被高级语言调用。子程序的返回参数也遵循高级语言子程序的规范,采用寄存器EAX返回子程序的出口参数。
1.4宏命令
1 汇编语言程序设计教学存在的问题
目前,汇编语言课程教学过程中存在以下问题。
1.1 教学内容相对陈旧,缺乏实用性
目前,很多高校的汇编语言教学还是基于十六位机,多采用清华大学出版的沈美明《ibm pc汇编语言程序设计》一书。其中,cpu内寄存器主要是16位,内存空间只有1mb,且只能在实模式下进行内存管理。而在目前的计算机技术发展环境下,内存空间以gb计算,传统的16位汇编语言教学模式明显滞后于现今的主流技术,学生学习时会觉得学过即淘汰,学习积极性较低[1]。
1.2 教学方法基本上还是采用常规的灌输式的教学方法
课堂讲授按照书本一章一节进行,知识点相对零散且枯燥乏味,难以在学生脑海中建立对语言的整体认识。特别是对于掌握了计算机基础知识和计算机语言知识的学生,在讲授汇编语言程序设计时仍延用常规的方法,不利于学生掌握大型汇编语言程序设计方法。
1.3 实验环节重视不够,实验教学方法单一
目前的实验安排都是围绕如何消化课堂内容展开,实验环节相对孤立且模仿性强,难于锻炼学生的综合问题解决能力;实验课只是布置任务让学生自己做,较少关注创新思维的培养。
2 教学改革措施
针对汇编语言程序设计教学中存在的问题,从以下方面进行了教学改革尝试。
2.1 更新教学内容
为了适应硬件系统32位大环境,让学生学有目标,需要更新汇编语言的教学内容。在16位汇编语言基础上,适当增加32位汇编语言程序设计内容,具体包括:编程结构、寻址方式和指令系统。编程结构是汇编语言程序设计的着陆点。当前,winxp等主流操作系统都工作在保护模式下,在讲授实模式编程结构基础上,再介绍保护模式的编程结构,学生会感觉新颖实用。其次,32位汇编语言的寻址方式类型和操作数位数都大为增加。再次,32位汇编语言的指令系统多达300多条指令,其源代码的数量、速度、占用的内存资源都有了质的飞跃。因此,学习32位汇编,可以深入了解操作系统运行细节,并增加学生的学习兴趣。
2.2 案例教学法的使用
常规灌输式的教学方法下,教师对语法规则和指令系统逐个进行讲解,学生仅仅是被动、机械和强制的记忆,学习后面知识点时,容易忘记前面相关知识点。而使用案例教学法,通过简单实例引出枯燥的语法规则和指令系统,让学生即学即用,便于知识的前后衔接和呼应。案例教学的主要步骤包括:(1)案例设计和准备;(2)章节重点难点讲解;(2)学生分析案例;(4)教师分析和总结案例;(5)上机验证并完善案例。在不断变化和扩充的案例中,使学生有充分的空间思考所学内容,也易于引出新知识点,使得教学内容具有连贯性,有利于学生提高自信心并系统理解和掌握汇编语言。
2.3 精心安排实验及实验教学方法[2]
汇编语言的实验内容主要包括以下内容:调试工具debug的适用、汇编语言程序设计的上机过程、基本程序结构设计、子程序设计和中断调用,此外还可以让学生了解汇编语言与高级语言的连接,时间允许的情况下,还可以设计综合实验。实验教学中,可以采取演示法、模仿法和对比法相结合的教学模式。老师借助多媒体演示工具,将实验步骤从头到尾讲解一遍,学生跟着操作,可以极大提高学习效率。模仿方法下,老师将一些经典程序介绍给学生,学生在读懂后模仿编程,一段时间积累经验后,就可以编写较复杂的程序。另外,可以将汇编语言与c语言联系起来,对比其异同,促进学生对两种语言的理解。
中图分类号:G642
文献标识码:B
文章编号:1672-5913(2008)06-0019-03
1教学现状及存在问题
在目前汇编语言的教学过程中,普遍存在的问题就是主流的微型计算机已经进入了64位时代,多任务的操作系统取代了DOS,而绝大多数高校汇编语言程序设计课程仍然是单任务操作系统(DOS)下的8086汇编语言,给学生的印象是跟不上时展的步伐。加之,汇编语言和机器的体系结构结合紧密,使用者需要对计算机的组成、硬件的控制和指令的解释过程有比较清晰的掌握;程序的移植性不好;指令众多,且同种类型的操作(算术、逻辑、转移等)要根据操作数和状态标志选择不同的指令(如无符号的运算与带符号的运算、条件转移等);运算中要根据数据长度悬而选择不同的寄存器;程序的编译调试比较麻烦;编写出吸引人们感官的程序比较困难。因此,学生在汇编语言的学习中容易产生厌烦情绪。有的学校减少了汇编语言的课时,还有的学校甚至干脆取消了这门课程。
2“汇编语言”课程的地位
汇编语言机器级在高层机器和低层机器间扮演了承上启下的角色,是计算机及相关专业学生需要掌握的重要专业基础知识之一。
从应用场合来看,汇编语言是能够利用计算机所有硬件资源并能直接控制硬件的唯一计算机语言,也是除机器语言之外最接近计算机硬件的编程语言。汇编语言程序产生的代码精简、运行效率高,具有高级语言不可比的“时空”优势;汇编语言在一些应用如嵌入式系统和工业控制中,汇编语言最最佳的甚至是唯一选择的开发语言。在一些实际的应用系统中,人们往往会用汇编语言来彻底重写某些经常调用的过程以期获得更高的性能。
汇编语言为“计算机组成原理”、“计算机接口与通信”、“操作系统”、“高级语言程序设计”等相关课程提供了必要的基础知识,如图1所示。
图1 汇编语言和其它课程的关系
从人才培养方面来看,计算机专业的学生不应仅仅满足于利用他人开发的软件和工具来解决实际问题,还应具备分析、研究原有软件系统,改进、完善、提高原有系统功能的能力。汇编语言的教学将使学生受到更严密、更系统的程序设计及思维方法的训练,为深入分析、研究、开发软件系统打下良好基础。
3加强实践教学
为了提高汇编语言教学的效果,笔者认为应该从以下几个方面入手。
(1) 清理认识上的误区。在上第一堂课时,用一个课
时来讲汇编语言的特点及其应用场合、它和高级语言区别、其难点在哪里、本课程该如何展开等内容,从而打消学生畏难和轻视的思想。
(2) 要充分利用好计算机辅助教学(CAI)的优势,要让课件“动”起来。目前普通本科计算机专业的教学大都采用了CAI教学,但大都是播放课件(如PPT),实质上是用鼠标代替了粉笔、屏幕代替了黑板。而且由于播放的速度远快于板书,学生反映根本来不及仔细理解有关内容,效果反而不如板书。多媒体教学提供了视觉、声音的特殊效果,在对重点、难点问题的讲授中要充分利用多媒体教学的优势。如讲授指令ADD AX,[2000H],如果是静态的课件,就是一句“这是一条加法指令,把累加器的内容和逻辑地址为2000H存储单元的内容相加,运算结果送回累加器”。而动态的课件会先画出一个模型计算机,然后演示该指令解释的全过程:从CPU内存中取出指令、译码、数据寻址(从寄存器和内存中取得操作数)、启动ALU运算、保存结果到累加器和影响状态标志寄器。每一步都要图示化出数据的变化和走向以及相应的控制时序。在声音和显示控制的程序设计教学中,更应展示多媒体教学的风采。多媒体教学丰富的动感效果能极大地增加学生对指令的感性认识,增强他们学习的兴趣。当然,制作这样的课件耗时耗力,学校应该切实加大对CAI教学的支持力度。
(3) 在汇编语言的教学中要加强和高级语言的比较教学。在学习汇编语言时,学生一般都具有了C语言程序设计的知识。在汇编语言程序设计的教学过程中,应该比较这两种语言的编程特点、程序代码空间、运行速度等,以加深学生对这两种语言的理解。如在讲授基址变址寻址方式中,可以用C语言和汇编语言分别实现对数组运算的实例来阐述。要加强高级语言(C语言)和汇编语言的混合编程的教学,充分阐述C语言结构化设计和汇编语言对机器低层(存储器、寄存器、中断处理、I/O)控制的优点。这样即可充分调动学生的学习积极性,也可以培养学生解决具体应用的能力。
(4) 加强操作系统相关知识的渗透和虚拟模式下的编程教学。目前操作系统的核心部分是用汇编语言来实现的,如对CPU本身的初始化(包括定时器、中断、I/0端口等的初始化);系统引导启动程序的完成;在处理器的控制下从实模式进入保护模式,实现虚拟存储器的管理和多任务的调度。将该部分引入到教学中是有必要的,能加强学生对操作系统中内核引导启动与驻留、保护模式和实模式的切换、多任务的调度等知识的理解。在讲授操作系统对程序的引导和进程的调用时,适当介绍计算机病毒的机理,以提高学生的学习兴趣并扩展知识面。
(5) 要切实抓好实验教学环节。课堂主体教学和一般作业很难让学生真正领会本课程涵盖的概念、原理、方法和技巧等。经验表明,学习并真正掌握汇编语言程序设计的最好方式是充分实践。实验教学和课堂主体教学“两手都要硬”,在课时分配上达到1:1。
4建立实验教学平台
传统的汇编语言上机实验一般是在DOS环境下的进行,如图2所示。而DOS逐步被淘汰,目前流行使用Windows操作系统平台,学生对DOS的使用相对陌生。尽管Windows保留了DOS的工作方式,可以切换到DOS提示符下操作,但是对建立文件夹(目录)、进入文件夹(目录)、删除文件等操作,学生们常返回到Windows环境中来完成,显然会影响上机的效率和增加编程的繁琐,同时也不利于WIN32虚拟模式下的教学。
图2 汇编语言程序开发的传统操作过程
因此,必须建立基于Windows操作系统的W32汇编语言集成实验环境,该环境是一个集编辑、编译、连接、程序调试和帮助于一体的实验平台。笔者主持的课题组经过系统的调研、编程和测试已开发出一个汇编语言集成编译系统,该系统已成功应用到本课程的实验教学中,效果较好。系统的运行界面如图3所示。
其次,要精心编写实验指导书和安排实验内容,组织好课程设计。结合目前广泛使用的PC机的Intel 80x86指令系统来开展教学,通过在集成环境下汇编语言的上机实训,加深学生对指令系统和汇编语言程序设计的认识和理解。实验的内容可以组织如下:
(1) 指令系统。用DEBUG调试工具来熟悉指令功能和寻址方式,掌握简单程序的调试。通过实验了解CPU的组成,熟悉8086/8088寄存器组、8086/8088存储器组织、8086/8088标志位的意义。
(2) 汇编语言程序设计。包括顺序程序设计、循环程序设计、分支程序设计、子程序设计和宏汇编程序设计等实验。掌握各种程序结构的设计方法,了解宏汇编、条件汇编和模块化程序设计等汇编语言程序的概念,掌握宏汇编程序设计的基本方法。
(3) 输入输出与中断。包括输入输出程序设计、中断处理程序编写、常用系统中断(如时钟显示、键盘和显示器、使用鼠标的程序设计)控制等实验。
(4) Win32汇编语言程序设计。包括32位微处理器与32位指令、保护模式下的32位汇编语言程序设计等实验。
(5) 汇编语言与C/C++的混合编程。主要包括C/C++程序与汇编语言程序的连接、嵌入汇编与模块调用等。
图3 汇编语言集成开发环境
参考文献
[1] 沈美明. IBM-PC汇编语言程序设计[M]. 北京:清华大学出版社,2001.
[2] KIP R. IRVINE. Assembly Language for the IBM-PC[M]. Prentic Hall INC,1993.
[3] 李学干. 计算机系统的体系机构[[M]. 北京:清华大学出版社,2006.
[4] 金海溶. 用实验方法改革汇编语言的教学[J]. 计算机教育,2006,(1):36-37.