张 学 陆 庆 廖建明
摘要:“汇编语言程序设计”是高等院校计算机专业的必修专业核心课程,具有其他语言无法取代的地位。本文基于“以学生为本”的教学理念,从实验安排、教学方法和考核方式三个方面介绍了作者在多年汇编语言实验教学中的体会。
关键词:汇编语言;实验教学;模仿法;演示法
中图分类号:G642 文献标识码:B
1引言
汇编语言是所有程序设计语言中最原始的语言,它与机器语言最为接近,简言之,汇编语言是符号化的机器语言,通过汇编语言可以直接访问计算机的硬件,如果要深入了解计算机的工作原理和底层细节,就必须学习汇编语言。著名的计算机科学家Donald Knuth坚持推崇汇编语言,并且曾经说过“我坚持认为除非你了解了各种底层细节,否则根本不可能为态度认真的程序员写书。”①汇编语言的地位是任何高级语言都无法取代的。因此,汇编语言程序设计成为计算机专业的必修课程。
然而汇编语言程序设计课程的教学普遍存在诸多问题,已经引起了广大教师的研究与关注,如考文献中的[1][2][3][4][5]等。就目前看来,汇编语言教学大多不能体现“以学生为本”的教学理念,主要表现在对实验教学的重视程度不够。汇编语言程序设计是实践性很强的一门课程,学生只有在程序设计的实践中才能真正掌握。所以我们认为汇编语言教学应该“老师少讲课、学生多动手”,也就是要充分重视实验环节,让学生唱主角,改变传统的以课堂讲授为主的教学模式。
为此,本文进行汇编语言实验教学的研究与探索。下面分别从实验安排、教学方法和考核方式三个方面介绍作者在多年的汇编语言实验教学中的体会。
2精心安排实验
2.1学时安排
目前国内高校的汇编语言程序设计课程大多是基于Intel 8086/8088微处理器的②,总学时一般在60学时左右,实验课学时一般占总学时的1/4到1/3。我们认为60个总学时是比较合理的,但是实验课学时远远不够。事实上,对于任何一种程序设计语言来说,不需要教师讲解太多的内容,关键是让学生多动手。我们认为汇编语言的理论课学时和实验课学时各占总学时的1/2是比较合理的。
2.2实验内容安排
汇编语言的实验课内容应该包括但不限于:
(1) 调试工具DEBUG的使用:汇编语言程序的调试要比高级语言程序的调试困难得多,熟练使用DEBUG是汇编语言程序设计的基本技能。
(2) 汇编语言程序设计的上机过程:汇编语言程序的编辑、汇编、连接、运行和调试是汇编语言实验的必备知识。此外,学生还应当懂得在此过程中所产生的各种文件(.obj、.lst、.crf和.exe等)的用途。
(3) 基本程序结构设计:任何复杂的程序都是由三种基本结构(顺序结构、分支结构和循环结构)组成的,因此,基本程序结构设计训练是编写复杂程序的基础,是汇编语言实验不可缺少的内容。
(4) 子程序设计:所谓子程序,相当于C语言中的函数。子程序是结构化程序的基本组成,子程序设计是开发大型程序的基础,对于培养编程能力十分重要。
(5) 中断调用:操作系统和BIOS(Basic Input Output System)以中断调用的方式为程序员提供了一组功能强大的程序库,屏蔽了复杂的硬件细节,从而极大程度地减轻了程序员的负担。而且,不理解中断系统就不能理解计算机的工作原理。因而学习中断调用是汇编语言实验课的必要内容。
此外,中断服务程序的编写和汇编语言程序与高级语言程序的连接等内容也应该让学生有所了解;在实验学时允许的前提下,也可以安排一个综合性实验。
3选择合适的教学方法
对于实验课,只布置任务、让学生自己做实验的方法并不可取,因为其结果往往是只有少数学生能够达到实验要求,而大多数的学生收获很小,甚至有的把实验课用来玩游戏了。所以,实验课应该有专门的任课教师。当然,从培养学生的创新能力的角度讲,应该尽可能地让学生独立完成任务,但是创新能力的培养有赖于足够的基础知识和基本技能。我们认为汇编语言实验课应该以基础知识和基本技能的学习为主,适当地关注创新能力的培养,在照顾到大多数学生的前提下,给创新能力强的学生提供独立发展的空间。要做好这一点,我们认为有两种十分有效的教学方法:演示法和模仿法。
3.1演示法
在实验课上,我们经常发现有许多学生向老师问同一个问题,如果一一解答,不但使任课教师十分疲惫,而且严重浪费了资源和时间。对于这些共性的问题,可以通过投影仪向学生演示解决问题的办法,所以在实验室中安装投影仪将为实验教学带来极大的方便,目前大多数高校具备这样的硬件条件。特别是对于调试工具DEBUG的使用和汇编语言程序设计的上机过程的学习尤为有效。初学者对于程序的编辑、汇编、连接、改错和调试过程往往不知所措,如果老师从头到尾演示整个过程、让学生一步一步地跟着操作,就能极大地提高学习效率。一次简单的演示往往要胜过千言万语的解释。
3.2模仿法
程序设计对于大多数的初学者来说有一定的难度。对于给定的一个实验题目,许多学生往往感到无从下手。事实上,老师可以把一些经典的程序提供给学生,例如怎样实现分支结构、怎样实现循环结构、怎样使用系统调用、怎样编写子程序、怎样编写中断处理程序等,让学生在读懂之后模仿着编程。模仿的程序多了,编程也就熟练了。通过一段时间的经验积累,就能够编写比较复杂的和具有创造性的程序,正所谓“熟能生巧”。我们在教学中发现这种模仿的方法十分有效。当然要特别注意的是,不能把模仿变成抄袭。
3.3对比法
一般说来,在学习汇编语言之前都要学习C语言。汇编语言与C语言的学习是相辅相成的。老师应该通过对比的方法向学生指出汇编语言与C语言之间的千丝万缕的联系。例如,一块数据区的开始地址为BASE,要寻找的操作数相对于开始地址的偏移量为SI,我们发现几乎所有的学生会把这个操作数写成[BASE+SI],而不会写成BASE[SI],因为第一种写法更直观,而第二种写法令人费解。然而,如果教学生把BASE看成C语言里的数组、把SI看成下标,那么学生就会恍然大悟了。通过对比教学法,能够使学生更深入地理解高级语言中的数据类型、变量、函数、数组、指针等概念的理解,同时也必将大大促进汇编语言的学习。
4改革考核方式
因为“汇编语言程序设计”是实践性很强的一门课程,所以实验课成绩应该在总成绩中占有相当大的比重。我们认为以闭卷考试成绩为主要依据的考核方式是不合适的,甚至可以取消考试、以实验课成绩为主,如果要考,也应该是开卷的。然而由于许多现实困难,目前大多数高校的汇编语言课程的实验课成绩只占很小的比重,这也是学生不重视实验课的重要原因之一。提高实验课成绩所占比重的主要困难在于学生多、抄袭成风、老师负担重、实验条件有限、考核的主观性太强等。尽管面临诸多困难,我们认为实验课成绩应该占到总成绩的1/2。老师可以根据学生的实验表现按五级分制(优、良、中、及格、不及格)或二级分制(通过、不通过)考核。为了减轻教师的负担,可以只针对一个综合性实验(而不是所有的实验)加以考核。
5结束语
本文根据作者多年的教学体会,对汇编语言实验教学进行了深入的思考。从“以学生为本”的教学理念出发,根据汇编语言程序设计课程所具有的实践性强的特点,提出“老师少讲课、学生多动手”的教学模式,主张提高实验课学时和实验课成绩的比重,重视实验教学,并从实验内容、教学方法和考核方式三个方面介绍了作者的想法。然而由于学生过多、资源有限、我国高等教育长期投入不足和体制缺陷等许多现实困难,汇编语言实验教学的改革依然任重道远。
参考文献:
[1] 张全福. 汇编语言程序设计实验教学改革与探索[J]. 教学研究,2005,28(6):545-546.
[2] 周代英,杨晓霞. 汇编语言课程教学方法改革探索[J]. 中国科教创新导刊,2008(6):55-56.
[3] 吴媛,茹庆云,杨富超. 汇编语言程序设计的教学研究[J]. 中国科技信息,2005(14):215.
[4] 邵联合,陈向阳,陈丽萍. 汇编语言生态课堂的构建[J]. 高等理科教育,2008(1):55-57.
[5] 赵雪静. 汇编语言教学方法初探[J]. 中国科教创新导刊,2008(7):33.