汇编语言在大学生能力培养中的研究与探索

2017-04-10 13:40任旭虎
实验科学与技术 2017年6期
关键词:汇编语言电子设计C语言

陈 璨,李 林,任旭虎

谈到汇编语言,可能很多人首先想到的就是它的缺点:语句抽象、编程效率低,晦涩难懂、调试困难、不易维护[1-2];可移植性差,语法规则非常复杂、指令繁多不易记忆、学起来枯燥无味;是一门实际应用中已被诸如C、C++、JAVA及其他可视化编程语言所取代的 “低级”语言。而对于汇编语言的优点却很少有人提及,提到的仅仅是:汇编语言实时性强、代码效率高、运行速度快、节约内存空间[3-5]。因此,业界许多学者和 “专家”认为学习汇编语言没有用,从而形成了汇编语言已是“明日黄花”不再满足现在编程需要的印象。

与之相应的是随着高等教育改革步伐的加快和受 “就业率”这个指挥棒的驱使,许多高校大大缩减汇编语言学时,有的高校甚至直接取消汇编语言这门课程,将C语言作为计算机、电子、自动化等电类专业的一门专业基础课程,更有许多教师单纯地强调C语言是一门最接近底层的语言,是一门 “硬件编程语言”。然而结合自身的成长经历和多年的实践教学经验,本文认为此举真是 “得不偿失,毁人不倦”!汇编语言不但不能被抛弃、压缩学时,反而应当作为一门非常重要的专业基础课程,尤其是对于电类专业的学生来说,汇编语言就像高等数学、大学英语等课程一样重要。正因为认识到汇编语言在培养学生实践动手能力和宏观思维能力方面具有先天的优势,本文在电子设计竞赛赛前培训过程中创造性地引入汇编语言学习和训练,取得了一定的成绩。

1 汇编语言的特点和优势

汇编语言是介于硬件和软件之间的一门编程语言,在电类专业学生掌握专业技能、提高实践动手能力等方面具有明显的优势[6-8],主要表现在以下几个方面。

1)汇编语言向下能够直接操作硬件。

汇编语言是一种符号化的机器语言,一条汇编指令就对应一个机器码,每一步执行什么动作都很清楚[4]。汇编语言可以直接操作处理器的内部寄存器、各个外设、外部I/O端口以及各种外围电路,编程者能够彻底理解和感受到 “数字逻辑”里面的 “0”“1”和电路课程里面的电平电压之间的对应关系。通过汇编语言的学习使用,能够让学生将以前所学课程贯穿起来,建立自身的知识体系。

2)汇编语言向上可以理解软件。

汇编语言能够让编程者更好地理解高级语言,尤其是高级语言中的C语言。例如汇编语言对于内存的操作都是基于内存地址的,而C语言的难点就是指针概念。指针应用中最难以理解的就是指针这个抽象概念和实际内存单元之间逻辑映射关系是如何建立的,而这些恰恰是在汇编语言学习中容易理解和掌握的一件事情。同样,对于C语言中的数据类型、形参和实参、函数调用、全局变量、局部变量等概念及操作,都可以用汇编语言中的一些操作建立联系。把这些抽象概念和过程通过汇编语言形成一个具体的映像,深度剖析,这样才能真正地学会、学好和用好C语言。有了汇编语言的基础,那些面向对象的编程语言学习起来就更加得心应手。

3)建立软硬结合的编程体系、遵循循序渐进的学习规律。

如前所述,在使用汇编语言的时候,能够感知计算机的运行过程和原理,从而能够对计算机硬件和应用程序之间的联系形成一个清晰的认识,即向上理解软件,向下直接操作硬件[8]。这也是最能够锻炼编程者编程思维逻辑的,只有这样,学习者才能形成一个软硬兼备的编程知识体系,这是学习任何高级语言都无法完成和实现的,相对于复杂的高级语言,汇编语言的指令操作更为直接,从汇编开始学习计算机相关知识更符合循序渐进的学习规律。因此,对于电类专业的学生,学习和掌握汇编语言是非常重要的。

2 汇编语言在学生能力培养方面的探索

用汇编语言编写实际应用程序,需要编程者彻底掌握以下5个方面内容:1)系统的硬件资源;2)软件的功能需求;3)实现软件功能所需要的子程序模块;4)软件的执行流程 (例如,系统启动后第一步干啥、第二步干什么……;系统会在什么时候产生中断,中断服务程序应该做些什么工作……);5)程序的执行效率。经过以上5个方面的锻炼,编程者的宏观思维能力会在无形中得以提升,这些是其他高级语言所不具备的。本文认为用汇编语言编写过大的应用程序的人做任何事情都会显得思路清晰、条理分明[9-10]。在此列举两个在教学中发现的比较典型的例子。

1)2012年山东省大学生电子设计竞赛,其中测量电参数的题目需要用到FFT运算,某团队的学生采用了C8051F120单片机作为控制核心,并用C51语言编写控制程序。学生在程序里开辟了4个2 KB的int型数组作为FFT运算处理的缓存,程序编写完通过keil环境编译后没有发现任何语法错误,但实际运行时程序就 “跑飞”,就这个错误该队学生整整调试了一天却找不出任何问题,从而放弃了最终比赛。用过这款单片机的都知道C8051F120单片的RAM空间只有8 448 Byte,而该队学生仅用于FFT运算的缓存就有4×2 K×2=16 KB。如果有过汇编语言的编程经验,在最初做方案时把这些底层的硬件资源和软件需求一并考虑进去,适当地把缓存空间改小,问题就可迎刃而解。

2)2013年全国大学生电子设计竞赛赛前培训期间,指导老师要求学生用单片机测量一个直流电压,并通过液晶显示器把测量结果显示出来,同时指导老师给出了AD和液晶显示器的程序例程。某团队学生在搭建好硬件电路后,分别利用指导老师给的例程进行测试,AD和液晶显示器工作正常;但将两个例程整合到一起后,调试不成功,要么只有AD工作,要么是液晶显示器上显示乱码。后来发现学生将指导老师的两个例程都导进了自己新建立的工程里面,把原来例程的主函数 (main函数)分别改为 “main1” 和 “main2”并在自己的主函数里面调用main1和main2。用汇编语言编写过单片机应用程序的人都很清楚单片机主程序其实是在不停地循环执行,上述改动后其实就只有一个函数一直在循环执行。如果学生有汇编语言设计基础,就不容易犯这样的低级错误[11-12]。

基于此,在2014年山东省大学生电子设计竞赛赛前培训的单片机训练部分,本文改变了以往一开始就让学生利用C51开发C8051F120单片机程序的培训方法,改为先由指导教师集中讲解MCS51单片机结构和指令集 (只讲知识点);然后让学生利用两周的时间去熟悉各条指令,并用汇编语言编写并调试了数码管动态显示、直流电压信号采集、矩阵键盘扫描并利用串口传输键码、方波信号频率测量等几个功能相对复杂的程序;最后再由指导教师讲解C8051F120单片机和C51程序开发。经过一个暑假的训练,指导教师反映效果良好,学生有了汇编语言和原有计算机C语言基础后,C51入门较快,对C8051F120单片机内部资源了解清楚,编写的程序思路清晰。在接近培训尾声的实战训练中,学生对题目的理解程度、软硬件设计方案及题目的完成度明显高于往年。同时在2014年山东省大学生电子设计竞赛中中国石油大学 (华东)学生的获奖级别、获奖率明显高于往年,学校的参赛质量名列山东省大学生电子设计竞赛的前茅。

3 对汇编语言的重新认识和定位

经过前面的论述,可知汇编语言在培养学生实践动手能力、逻辑思维能力、宏观思维能力以及其他方面的能力都具有十分重要的作用,因此有必要重新认识汇编语言并给予准确定位[13-16]。

1)汇编语言在电类专业中的基础地位不可轻易动摇。

汇编语言是培养学生理解硬件资源的语言,是学习和理解其他高级程序设计语言的基础,是计算机组成原理、接口与通信技术、计算机控制技术和数据采集等许多专业课的前导课程,是必要的基础知识,起着承上启下的作用。汇编语言课程,依然应该是高校计算机及其相关专业学生的必修课[8]。说汇编语言是 “低级”语言,并不意味着汇编语言会被更高级语言所取代,相反,这里的 “低级”应该当 “基础”讲[7],在学生能力培养中的 “基础”地位是不能轻易动摇的。

2)要抛弃汇编语言无用之说。

虽然随着半导体技术、编程技术的不断发展,在实际工程应用中确实很少看到汇编语言的身影,但这并不能说明汇编语言没用,已被其他高级语言所取代。嵌入式系统的底层驱动、计算机的BIOS不都还是用汇编语言来实现的吗?如果汇编语言真的没用,为什么每年的双选会场上还是有那么多知名企业要求应聘者掌握汇编语言和用汇编语言编程呢?汇编语言有用,只是熟练掌握的人太少。

汇编语言的教学模式和教学态度需要尽早改变。目前各高校普遍反映汇编语言教学存在 “教师难教、学生难学”的现象,但不能因此而放弃汇编语言教学和学习,动摇其基础地位。相反,应当积极寻找有效途径来改变这种现状。例如,在教学模式上抛弃以往那种单纯的、枯燥无味的指令讲解,相应的利用动画形式来展示指令在CPU中的执行过程,同时以功能相对完善、具有一定实用价值、贴近生活实际的程序片段作为案例进行分析,以此来活跃课堂气氛;同样,作为理论课教师需要改变汇编语言的教学观念和态度,不要把自己的兴趣爱好和个人价值取向贯穿于教学中,要告诉学生学习汇编语言的目的不是用它去找工作,而是通过汇编语言的系统学习和应用能够提高其自身的各方面能力,就像我们学习了高等数学,在实际工作中并不一定需要你天天去做微积分,但是它在我们各方面能力培养中奠定的基础是不容忽视的。

4 结束语

汇编语言是一门直接操作底层硬件的编程语言,在计算机的发展历程中有着不可磨灭的贡献。本文认为虽然不能倡导学生天天用汇编,但要让学生会用汇编,理解汇编,知道汇编的精华。在高等教育中,汇编语言是计算机、通信、电子和自动化等电类专业的一门非常重要的基础课程,起到承上启下的作用,在学生实践动手能力、逻辑思维能力、宏观思维能力的培养方面有着举足轻重的地位。

[1]张富贵,黄海松,吕敬堂,等.单片机设计性实验与工程实践能力的培养[J].实验技术与管理,2011,28(2):135-138.

[2]赵月静,陈继荣,张永弟.单片机原理及应用课程创新实践教学改革[J].实验技术与管理,2013,30(1):176-179.

[3]穆洪伟.汇编语言魅力不减当年——MCU汇编语言的“工程”化[J].电子世界,2012(8):77-79.

[4]黄勤,李楠,胡青,等.计算机硬件技术基础课程体系优化及实践[J].实验室研究与探索,2011,30(10):290-292.

[5]庞新法.汇编语言授课方法[J].价值工程,2014(22):200-201.

[6]熊书明,王良民,曾宇,等.基于程序设计的 “汇编语言”课程教学方法[J].电气电子教学学报,2013,35(6):66-68.

[7]王志军.微机原理教学中几个问题的探讨[J].计算机教育,2010(7):64-66.

[8]许家瑞.构建创新实验教学体系的探索与实践[J].实验技术与管理,2009(5):1-4.

[9]张雪兰.汇编语言程序设计[M].北京:北京理工大学出版社,2001.

[10]陈依依.计算机汇编语言特点分析[J].山东大学学报,2013(5):67-69.

[11]陈国良,董荣胜.计算思维与大学计算机基础教育[J].中国大学教学,2011(1):7-11,32.

[12]于庆梅,毛镠,冯国富,等.汇编语言程序设计课程微实验教学模式探讨[J].计算机教育,2014(22):111-114.

[13]刁红军,杨季文.汇编语言实验教学与实践[J].计算机教育,2015(15):97-99.

[14]安杨,赵波.“汇编语言程序设计”课程教学改革的研究[J].电气电子教学学报,2007,29(6):7-9.

[15]刘道文.高校非计算机专业计算思维能力培养策略研究与实践[J].计算机教育,2013(13):39-43.

[16]刘光蓉.以计算思维能力培养为导向的C程序设计实验教学[J].实验技术与管理,2013,30(1):154-156.

猜你喜欢
汇编语言电子设计C语言
高职机电专业学生电子设计竞赛心理问题调查与分析
基于Visual Studio Code的C语言程序设计实践教学探索
高等学校计算机专业课程教学改革实践——以汇编语言与接口技术课程为例
汇编语言与C语言的混合程序设计技术研究
基于Multisim仿真软件的三人表决器电子设计制作——以中学生创新能力培养为例
基于C语言的计算机软件编程
提高《汇编语言程序设计》教学效率的思考与实践
高职高专院校C语言程序设计教学改革探索
降压型直流开关稳压电源——2016江苏省大学生电子设计竞赛A题解析
关于电子设计自动化技术的研究