王志岗 黄玮 王春东
摘 要: 结合实际教学经历探索了汇编语言课程教学的若干改革方法,目的是使得学生通过汇编语言的学习提高系统能力和实践能力。主要包括:开课前详细介绍汇编语言课程的意义和价值,重点讲授汇编语言与其他专业课程的联系,对比其他语言进行讲授并增强课堂的实践环节。这些方法和措施明显地提高了学生学习汇编语言的兴趣,证明了教学改革的有效性。
关键词: 汇编语言; 系统; 实践; 教学改革
中图分类号:G642.0 文献标识码:A 文章编号:1006-8228(2020)03-70-03
Discussion on teaching reform on assembly language
Wang Zhigang, Huang Wei, Wang Chundong
(Tianjin University of Technology School of Computer Science and Engineering, Tianjin 300384, China)
Abstract: Combined with the actual teaching experience, this paper explores some reform methods of assembly language teaching, aiming to improve the system ability and practical ability of students through the learning of assembly language. It mainly includes: introducing the significance and value of assembly language course in detail before the beginning of the course, focusing on the connection between assembly language and other professional courses, teaching with the comparison to other languages and enhancing the practice in classroom. These methods and measures obviously improve students' interest in learning assembly language, which proves the effectiveness of the teaching reform.
Key words: assembly language; system; practice; teaching reform
0 引言
汇编语言是大学计算机专业以及自动化和机電相关专业一门重要的专业基础课程。汇编语言表面看与C++和Java语言一样都涉及到程序设计方法和技巧,但是从计算机系统的整体观点出发,汇编语言与其他高级编程语言有很大的不同,能够让学生灵活掌握其中的核心知识有不小的难度和挑战。首先,汇编语言与计算机的硬件紧密相关,必须掌握足够的硬件知识和系统结构才能用汇编语言编写程序。其次,汇编语言程序的表达方式也完全与机器行为对应,这不同于高级程序设计语言的程序结构中普遍存在的基于数学形式的表达方式。最后,汇编语言在信息技术高速发展的今天应用范围日渐缩小,尤其距离一些高大上的计算机技术看似比较遥远,由此造成很多学生对汇编语言很陌生,甚至有些学生在学习该门课程之前没有听说过汇编语言。因此,作为教师在课时有限且教学内容繁杂的背景下让学生理解汇编语言核心思想,掌握汇编语言的基本程序设计技巧是比较困难的。
目前在我国的大部分计算机相关专业设置的汇编语言课程中,基本上都是讲授以8086系列兼容机的汇编指令,主要内容包括介绍8086系列机器的基本结构和硬件元素,基本的汇编程序结构和指令使用方法以及实现一些基本算法的编程技巧。由于8086和80386等系列计算机距离我们日常生活日趋遥远,学生普遍不能理解学习这样的课程有何实际应用环境和价值。因此我们尝试做一些汇编语言课程的教学改革,根据教育部提出的计算机专业教学要求,重点改善当前教学中普遍存在的1~2个突出问题。教育部计算机专业教学指导分委员会对计算机专业学生的能力培养和实践教学体系开展了研究,提出:①在教学中必须树立学生的系统观,培养学生的系统能力,使学生学会站在不同层面把握不同层次的系统,并全面考虑系统各部分及其与外界的逻辑与联系,完成一定规模的系统设计;②计算机专业基本能力包括计算思维能力、算法设计与分析能力、程序设计与实现能力以及系统能力,其中系统能力占总能力的 75%,包括系统认知、系统设计、系统开发和系统应用能力[1-3]。由此可知,教育部对计算机相关专业的教学要求非常明确地突出培养学生的系统能力。之前我们的教学重点主要放在了汇编语言指令的使用和程序设计技巧,而忽视了系统能力的培养,没有将汇编语言放在一个大计算机系统里讲授[4]。尤其是汇编语言与计算机系统中的底层硬件和包括高级编程语言的系统和应用软件到底有何种关系是我们教学的一大盲区。基于以上分析,我们在课堂上对教授内容重点做了一些调整和补充。
1 教学问题和改革措施
在实际的汇编语言教学中,我们根据学生的教学反映和教育部对计算机专业的要求,对教学方法作了如下调整和改进。
1.1 明确汇编语言课程的意义
我们在该课程的第一节课就花了一定的时间向学生详细讲述汇编语言的意义和重要性。首先,计算机系统主要包括底层的硬件、操作系统为代表的系统软件和应用软件。汇编语言不同于其他C++等高级编程语言,它的操作对象是计算机系统的各种硬件完全不同于其他高级语言对数据结构进行操作,因此掌握好汇编语言对理解计算机基于硬件的底层工作原理有很大帮助[5]。汇编语言的几乎每一条指令都与能够在裸机直接运行的机器指令一一对应,所以如果读懂汇编程序就能很好地理解机器工作的流程和体会计算机不同与人类的思维方式。其次,各种高级编程语言(包括C以及Java语言)最终都要编译为与汇编指令一一对应的机器指令来执行,有些高级语言程序调试过程中难以解决的错误和问题需要将程序代码反汇编才更容易发现问题,这对提高学生调试高级语言程序的能力大有裨益。此外,由高级语言编写的很多大型程序经常会遇到效率瓶颈,如果将程序中频繁运行的核心部分直接写为汇编语言并执行,就能大大提高运行效率。最后,学好汇编语言有助于理解操作系统的一些设计思想和理念。总而言之,在课程的开始我们尽力让学生充分理解汇编语言在计算机系统中的承上启下作用,在学生的心目中为该课程树立一个重要的形象。
1.2 突出体现汇编语言与其他课程的联系以及对比
目前国内大多数院校的计算机专业都将汇编语言与微机原理类似课程编排成一门课进行讲授,这样做的好处是将汇编语言与硬件紧密结合在一起,使得学生明确汇编语言的运行平台,同时避免单纯地学习汇编语言编程技巧脱离语言的产生基础。
作者所在专业将汇编语言作为单独一门课,我们在讲授汇编语言指令规则以外,重点讲授了汇编语言与高级程序设计语言(以C语言为主要对比)的联系和对比,以及与系统软件操作系统的部分联系。在讲授很多汇编语言指令的时候,我们都详细的讲所讲授的汇编指令与实现同样或类似功能的C语言指令做对比,比较它们在书写方式、完成功能和使用方法上相同和不同以及联系,如果在时间允许的情况下在前面的基础上进一步分析它们各自的优缺点。比如在讲授汇编语言的循环指令loop时,考虑到学生已经在C语言中系统学习过循环for语句的原理和运行机制,而汇编语言的循环语句与C语言相比原理相同,不同之处主要在于如何直接使用寄存器完成循环和循环变量使用方式,因此我们讲授的重点放在与C语言不同的地方,并将汇编语言循环语句与C语言的for语句进行详细对比,从而避免了不必要的重复性教学。①C语言中循环变量可以是任何变量名不需要关心它存在哪里,而汇编语言中循环变量必须存放于CX寄存器中;②C语言循环变量可以最初设置为循环次数然后递减或者初始设为0然后递加,循环变量的加法或减法都由程序员编写,而汇编语言循环变量CX的初始值必须是循环次数,机器规定loop语句的循环方式必须为循环变量CX逐次递减不需要程序员来编写;③C语言的for语句通常需要程序员指定循环结束的标准,而loop指令是程序自动根据CX值是否为0来判断循环继续运行或终止完全不需要程序指定。④for语句循环变量初始值设置通常位于for语句内部,而loop指令的循环变量CX初始值设置,必须在循环体开始前完成。
为了让学生更清晰地建立起loop指令与C语言循环语句的关系,我们在课堂上随机用一段学生较为熟悉的C语言循环代码,将其改写为汇编语言代码,通过这些示例使得学生在大脑里清晰地建立了已经熟悉的C语言与汇编语言的对应关系,逐步改变了一些学生对汇编语言陌生而认为难学的固有观念。
我们在讲授包括寻址方式等其他汇编指令时也大量采用了重点强调汇编语言与C语言关联和区别的教学方法,通过将一些C语言教材上简单的代码改写为汇编代码让学生熟悉汇编语言的编写技巧和规范。
1.3 增强课堂的实践环节
以往的教学中都会安排一定学时的实验课,学生通过上机练习来巩固知识。但因为实验课教师一人面对很多学生,没有足够的时间指导和解答每个学生在上机过程出现的问题和产生的疑惑,尤其针对一个上机作业,通常学生会遇到很多共同或类似的问题,这会导致教师要为同样的一个问题给很多学生分别解答,效率较低。
我们充分利用每一堂讲授课程来让学生有更多机会了解实践中的共性问题。每次在上机课前,我们都会在课堂上提前提示学生需要注意的重点问题,并且用书上的类似习题程序由教师在课堂上使用笔记本编译运行,演示实验中每一个步骤,然后请其中一位或多位同学上台面对所有其他同学练习操作,如果出现操作错误或其他问题,教师会当场指导解答,同时提示注意此问题。在课堂上教师和学生共同参与的实际操作演示过程中,我们发现了很多问题,例如汇编语言需要在命令行里输入命令来进行编译连接运行,这对于当今只熟悉图形界面操作的学生需要一定时间的适应。通过这个过程,我们的实验课的效率明显提高,教师也有更多的时间来帮助每位学生解答更加个性化的问题。
2 结束语
通过上述教学改革措施,我们发现学生对于汇编语言的基本概念、基本编程技巧有更充分的理解和掌握,并且我们将此课程和其他专业课程更加清晰地联系起来,这有助于让学生理解计算机硬件的结构和工作原理,也帮助学生有效复习和加深理解已学过程序设计很多知识。学生通过这门课的学习,理解了汇编语言与计算机系统中硬件和高层软件的关系,从而拥有了一个更加全面完善的计算机系统概念,显著提高了教育部要求培养的系统能力。实践证明,我们的教学改革措施对提高汇编语言课程的教学水平有一定的实际应用价值。我们将在今后的教学活动中尝试将这些教学改革方法应用到更多的计算机专业课程教学中。
参考文献(References):
[1] 教育部高等學校计算机科学与技术专业教学指导委员会.高等学校计算机科学与技术专业发展战略研究报告及规范[M].清华大学出版社,2006.
[2] 教育部高等学校计算机科学与技术专业教学指导委员会.高等学校计算机科学与技术专业人才专业能力构成与培养[M].机械工业出版社,2010.
[3] 王志英,周兴社,袁春风等.计算机专业学生系统能力培养和系统课程体系设置研究[J].计算机教育,2013.9:1-6
[4] 何健,苏守宝,莫晓晖.计算机专业基于系统观的汇编语言课程教学探讨[J].计算机教育,2017.9:98-101
[5] 张晓亚,唐东成,黎钰珍等.汇编语言程序设计的重要性[J].电子技术,2017.6.