《汇编语言》教学改革探索
来源:用户上传
作者:
摘要:本文结合教学中的实际情况,重点围绕《汇编语言》课程教学的現状、内容和课程实验环节的情况,对该课程教学中存在的教学内容、实验考核等问题进行分析,深入探讨推进课程教学、教学方式、实验指导以及考核等改革的有效措施,并就如何培养学生的学习兴趣和提高学生能力等提出具体意见与建议。
关键词:汇编语言;实验教学;教学改革
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2020)02-0128-02
汇编语言是一门计算机低级语言课程,它与硬件息息相关,是组成原理、系统结构等硬件课程的先修课。用汇编语言编写的程序,占用内存空间小,运行速度快,不需要操作系统的参与,可以直接运行在硬件上,在物联网设计、智能家居等应用技术占有重要地位。学生在学习汇编语言的过程中,可以了解计算机程序语言与硬件设计的关联,深入了解计算机硬件的工作机制,以及与之相对应的计算机语言的禁忌,对于高级语言的理解也是大有裨益。
与高级语言相比,指令特点短小简单,但也烦琐,实现复杂程序要涉及很多个方面的指令,学生普遍反映编程效率太低,编程过程太麻烦。另外,各高校的教学中普遍存在“重视软件,轻视硬件”的思想,导致硬件类的课程和汇编语言课程受到越来越多的忽视,学生对硬件的了解相当匮乏。在当今,面对中国要研制自己的芯片的重要时机,我们高校的教学应扭转只注重“软件”形势,加强对“硬件”课程的投入,而与硬件相关的汇编语言也是应当受到重视。
1 汇编语言及其教学现状
汇编语言作为一门独立的课程在诞生之初,一直是各高校计算机相关专业的一门专业必修课[1]。但近年来,很多高校在制定新的培养方案时,都对它进行了调整。有些院校将它由原来的专业必修课调整为专业选修课,课时也进行了相应的调整,大多都是将该课程的学时进行了缩减。有些院校紧跟当前软件的发展趋势,什么软件流行就开设什么课程,这些院校干脆取消了汇编语言课程。以我们学校中南民族大学为例,在新一轮的培养方案制定时,计算机相关的大部分专业将汇编语言课程由原来的专业必修课改为专业选修,并将学时调整为32(理论课时)+12(实验教学课时)学时。
汇编语言本身存在一些缺点,例如指令多样琐碎、指令寻址方式复杂、指令实现功能简单、程序设计效率低、应用场合狭窄等,这些缺点直接导致学生认为汇编语言死板,难于实现复的程序设计,很难从汇编语言的学习过程获得成就感,学生的学习主动性不高。
但大学计算机教育应该注重学生的全面发展,学生只知道软件,对硬件知识缺乏,对计算机的认识只流于表面,不利于学生的日后发展。汇编语言在计算机硬件和软件之间搭建起一座相互连接的桥梁,可以让学生了解软件和硬件的对应关系,对于硬件的工作机制不再是死板的记忆,立足于硬件理解软件程序的编译过程和程序的解释执行过程,对于软件的理解也更深入骨髓[1,2]。
2 提高课程教学质量的措施
在学习一门计算机语言的时候,无论是低级语言还是高级语言,包含的内容都是两大块,即该门语言的本身规范和基于该语言的程序设计的思想。语言是思想方法的载体,是程序设计的实现手段,而程序设计的思想方法是不论是哪种语言它们都是想通的[3]。大学阶段的汇编语言的开设一般都会放在C语言课程的后面,学生已经学习过C语言,对程序设计的思想方法已经有所了解,所以汇编语言的教学应该以汇编语言本身规范为重点。
针对不同的教材和编译环境,汇编语言的教学内容有很大的不同。我校采用的教材为机械工业出版社出版的《8086汇编语言与计算机体系结构》,这门教材内容充分考虑了硬件和软件相结合的问题。为了适应32个理论学时完成教学计划,教学重点也是放在了汇编语言本身的规范问题上,对教学内容进行了调整,数的表示、寻址方式、指令系统、程序结构、过程、串指令、位运算、宏指令为这门课的重点要讲解的内容。
2.1 计算机中数的表示
计算机的主要功能就是数据的加工处理,所需的数据需要存储到计算机系统中。现实生活中的数据各种各样,而这些数据存储到计算机系统的中表示形式却只有一种,那就是二进制数据。此部分内容一定要让学生建立一个清晰的概念,即数据在计算机中的表示是二进制数据。如何将学生们熟悉的数据转换成计算机系统可以识别的二进制数据,是程序设计要考虑的第一个问题。
学生要熟练掌握各种数据的表示方法,并且要善于应用,根据程序设计的需要选择适当的表示方法。对于各种数据各种进制之间的转换要求学生要达到熟练的地步,其中二进制补码、十进制和十六进制的转换为重点内容。
字符的表示部分,要给学生灌输ASCII码是用来输入输出的,二进制数据是用来计算的观点,为后面的汇编语言程序设计设立一个基本的规范。从键盘输入的数据是ASCII码数据,如果这些数据需要进行运算要将其转换成相应的二进制数值。输出时,如果是二进制的数值需要将其转换成ASCII码数据,转换后的数据每个字节传送到输出设备就可以进行输出显示,不需要再进行数据的转换[3]。
2.2 指令寻址方式与汇编指令系统
计算机程序在执行过程中,需要将程序中的指令以及数据从存储器中读取出来,找到这些指令和数据的方式即寻址方式。以8086为例,立即数寻址操作数紧跟在操作码后面,常常用来处理常量数据,对于变量数据则用其他寻址方式来进行设计,包括寄存器寻址、直接寻址、寄存器间接寻址、寄存器寻址、基址寻址、变址寻址、隐含寻址等多种寻址方式。由于寻址方式较多,为了让学生了解最基本的汇编语言规范,对寻址方式的内容进行了调整,讲解几种常用的寻址方式,立即数寻址、寄存器寻址、直接寻址和寄存器间接寻址,以案例的方式让学生掌握什么是寻址方式,以及上述四种寻址方式的表达方式。 汇编语言的要素就是指令,一条完整的汇编指令一般包含三个方面:指令助记符、源操作數和目的操作数。指令助记符是指令要进行什么样的操作的表示,源操作数是参与运算的数据,目的操作数是运算结果的存储地方。指令系统繁杂,这一部分的教学内容放在常用的指令上面,如加、减、乘、除指令,重点讲解这些指令能够完成什么样的运算、指令的格式和指令应用是要注意的事项,以简单的案例让学生掌握汇编语言的指令使用方法[5]。
2.3 程序设计的结构与过程调用
计算机程序的结构主要包括顺序结构、分支结构和循环结构。每一种语言的计算机程序都是从顺序执行开始,从上而下逐条执行,因此顺序结构的流程控制最简单也容易理解。分支结构设计相应跳转指令,让原本顺序执行的程序有选择性地执行,使得程序的主线可以分几条支路进行执行。循环结构也需要设计跳转指令,大多数的设计都是满足条件指令执行循环体内的语言,不满足则跳转至循环体外执行其他语句[6]。分支结构和循环结构是这部分的难点,需要通过多个的案例讲解,让学生明白分支和循环跳转指令的设计。这部分的内容可以将高级语言选择和循环结构的架构,与汇编语言的一一对应,让学生对高级语言有更深入的理解。
模块化程序设计的思想鼓励设计子程序,使得程序有一个主程序多个子程序组成,达到代码共享和程序模块化管理的目的。子程序的设计一般是将需要多次使用的程序片段作为一个模块,供主程序多次调用。子程序的设计通常比较简单与高级语言中的函数的设计原理相同,学生容易理解。这一部分内容的难点在于主程序调用子程序的过程。在过程的调用时,主程序需要提供一些数据给子程序,即参数的传递。参数传递给子程序后,子程序执行完成后,会将结果传递给主程序。汇编语言中有两种参数传递的方式:一是寄存器传递,另一种是堆栈传递。子程序将结果的传递给主程序也有上述两种方式。寄存器传递相对简单些,在讲解过程的时候,以这种方式入手,讲解堆栈的过程调用中作用,然后深入到堆栈在参数和结果传递的中作用。过程的讲解主要是通过案例来进行,以求平方根、求面积、求最大值等比较容易理解的案例来阐述这部分的内容。
2.4 串指令和位运算
80*86中的串是指存储器中连续的字节、字或双字的一个集合。与串指令配套使用的有两个寄存器ESI和EDI,ESI给出源串地址,EDI给出目的串地址。串指令每次处理一个串元素,而串中常常包含的不止一个元素,所以串指令的操作经常采用循环结构[5]。
位运算就是直接对内存中的二进制位进行操作,参与运算的数据每一个二进制位进行一次运算。这部分的包含的内容有逻辑运算和移位运算。
上述两部分的内容重点放在汇编指令本身的讲解和应用,难点在于应用,指令本身相对简单,比较好掌握,难点在于应用部分需要通过案例的方式,让学生掌握这两部分的内容。
2.5 宏指令
宏定义是一个语句行,它是一段语句的简写。一个宏指令在汇编器编译阶段可以解读为其代表的多行语句。之所以需要设计宏指令,为了程序共享或模块化设计的需要。子程序的设计也是为了程序共享或模块化设计,二者的区别在于:子程序调用是在程序运行过程中执行的,只生成一个代码段,调用需要额外的时间开销;宏调用是在汇编过程中完成,N次宏调用就要生成N个代码段,不需要额外的执行时间但是需要较大的内存空间。宏的定义格式比较简单,调用过程只需要参数的匹配即可,但是要注意宏指令的设计时如果有名字域,要对名字域进行本地声明,否则会引起程序的歧义,教学的重点也放在宏指令的内部设计,以及名字域的声明。
3 实验指导和考核问题措施
任何一门计算机语言课程的学习都设置了上机实验课,上机实验课程能够让学生独自进行程序的设计,是他们程序设计的思想得以实现的重要场所[7,8]。我校汇编语言的也有12个学时的6次上机,从教学周的第6周开始,每隔一周上一次实验课。这6次是上机对于学生编程能力的重要锻炼机会,实验的设计和管理就相当重要。实验的内容围绕着教学内容展开,设计的6个实验分别是:顺序结构实验、分支结构实验、循环结构实验、过程编程、串指令实验和宏指令实验。每次实验设计5个题目,让学生必选3个,其余两个可以作为加分选修题目。很多教师注重实践教学的内容,但忽略了实验课程的考核问题。如果没有相应的考核制度,学生会轻视实践教学,出现上机课时玩手机,课下抄袭程序的现象。实验课程的学习通常要持续12个教学周,周期时间长,只有很少的学生可以对它一直有热情,主动去学习,大多数情况下需要以成绩作为驱动器,激励学生完成实验。所以需要建立一套实验课程考核体系。实验课的考核分为考勤、实验结果验收和实验报告3个部分,每个上机实验分数以百分制计算,各部分的占比为20%、50%和30%。实验结果验收时,每个学生需要到老师这里对实验步骤、程序设计的方法等问题进行答辩,根据答辩情况老师给出相应的分数。
实验报告是抄袭的重灾区,对于这个问题我们做了一个小的应用程序对于实验报告的相似性进行一个判断,判读相似性为80%的学生,因为程序设计实验的流程大致相同,对于比例的设定经过多次验证,设置为80%,超过这个阈值的学生需要重做实验报告或者分数给为0。完善的考核体系可以督促学生按时到机房,独立完成实验和对实验结果进行分析,端正学生对实验课程的学习态度,认真对待实验课程,锻炼动手能力。
4 结束语
本文根据多年教学经验,分析了《汇编语言》课程的教学现状,对汇编语言的教学过程中遇到的问题,进行了深入的分析和思考。根据实际情况提出了几点可行的措施,即合理安排教学内容,把教学重点放在汇编语言本身的特点之上,适当忽略程序设计的思想内容,并且需要注重教学实验环节,建立实验教学考核体系,鼓励学生积极动手,培养学生兴趣。《汇编语言》课程的教学还需要广大教师积极探索,引入多种符合实际的教学方法,使汇编语言对计算机专业课程后续的学习发挥应有的作用。
参考文献:
[1] 熊小兵,刘丹.汇编语言程序设计课程改革的几个问题[J].计算机教育,2015(4):11-15.
[2] 刘正红.对汇编语言实验教学的几点看法[J].信息与电脑,2012(6):198-199.
[3] 张佳佳,张广智,宗兆云,等.基于计算思维的汇编语言教学实验设计[J].实验技术与管理,2016,33(12):200-203.
[4] 陈璨,李林,任旭虎.汇编语言在大学生能力培养中的研究与探索[J].实验科学与技术,2017,15(6):172-174+177.
[5] Richard C.Detmer著,郑红,庞毅林,蒋翠玲译.80*86汇编语言与计算机体系结构[M]北京:机械工业出版社,2016:
[6] 王爽. 汇编语言[M].3版.北京: 清华大学出版社, 2013: 150-155.
[7] 姜玥,谈文蓉.民族院校的“汇编语言”课程教学改革探究[J].大连民族大学学报,2017,19(03):274-277.
[8] 张佳佳,张广智,宗兆云,等.基于计算思维的汇编语言教学实验设计[J].实验技术与管理,2016,33(12):200-203.
【通联编辑:王力】
转载注明来源:https://www.xzbu.com/8/view-15128069.htm