APP下载

汇编语言教学中翻转课堂的运用与实践

2017-07-01吴泽民张剑峰

电气电子教学学报 2017年2期
关键词:汇编语言C语言内化

张 磊, 刘 熹, 郭 晓, 吴泽民, 张剑峰

(解放军理工大学 通信工程学院, 江苏 南京 210007)

汇编语言教学中翻转课堂的运用与实践

张 磊, 刘 熹, 郭 晓, 吴泽民, 张剑峰

(解放军理工大学 通信工程学院, 江苏 南京 210007)

本文针对汇编语言教学效果不佳的现状,探讨了开展翻转课堂教学实践的可行性。首先结合C语言课程的先修内容,部署了学生自主学习阶段的内容。然后,结合计算机系统的运转机理,阐述了如何在课堂内化阶段与学生展开深入探讨和研究。最后,总结了本次教学改革实践的一些经验和教训。

翻转课堂;汇编;C语言;自主学习

0 引言

“计算机与通信硬件基础”是我校通信工程专业一门重要的专业基础课,也是首个软硬件相结合的课程。该课程的学习,对于理解系统概念和软硬件结合的基本原理具有重要的作用。基于x86的汇编语言教学占据了本课程40%的教学时间,但是从以往的教学实践来看,无论是从学生实际编程能力还是考试的成绩来看,教学效果都不尽人意。这反映出该课程的教学模式、教学理念存在一定的问题。

近年来,翻转课堂已成为一种重要的创新教学模式[1]。它是一种全新的、深层次的混合学习模式,该模式不仅是传统课堂教学与在线学习在形式、手段、内容上的深度融合,更是教学理念、教学模式的一种革新。翻转课堂彻底摆脱了“课堂知识传授+课下知识内化”的传统教学形式的束缚,将两者实施的顺序颠倒过来,采用自主学习的方式让学生选择学习资源,自定学习步骤在课前完成知识传授,课堂上则在教师的引导下,开展相应的学习活动,帮助学生完成知识内化。

我们期望在“计算机与通信硬件基础”课程中逐步引入翻转课堂的教学模式,充分体现学生为主体、教师为主导的教改理念。为此,我们首先审视了本课程学生的先修课程,与本课程知识结构紧密关联的有“计算机文化基础”、“数字逻辑电路”和“C语言程序设计”三门课程。通过这三门课程的学习,学生对计算机的基本原理和使用都有了初步的掌握, 同时,也具备了良好的计算机语言概念,只是对计算机底层原理缺乏更深层次上的理解。完全有能力进行“计算机与通信硬件基础”课前的自主学习。据此,我们认为在x86汇编语言教学阶段进行翻转课堂的运用与实践是可行的。

1 自主学习阶段

翻转课堂的典型特征是学习者的自主学习[2]。学习归根结底是由学习者自己去完成,学习者可以决定自己的学习过程、学习进度及采用的学习方法等。这些举措让学生充分地享受学习权利,成为学习的主人。

学生确定了自主学习的方式后,就要选择合适的学习内容,枯燥的指令从何入手呢?既然是学习语言,最好的办法是针对先修过“C语言程序设计”的情况,温故而知新。我们指导学生以对比方式进行自主学习。

1.1 数据类型的学习

数据类型是语言的基本元素,作为高级语言的C语言,存在典型的“char”、“short”、“long”和对应的指针类型等,通过它们表达对物理世界的基本映射。但是汇编语言中,大都是直接以存储单元为指向,几乎无类型而言。为此,课前自主学习阶段我们要求学生从两个方面入手,一个是从宏汇编提供的数据定义伪指令和操作符入手,对比变量类型定义和使用的异同,形成了如表1的对比结果。

表1 数据类型的对比

另一个是从指令入手,讲解CMP、ADD、SUB等指令时如何区分数据类型的,这里的重点是如何区别对待“unsigned”、“signed”数据类型的这个难点。进一步深入变量使用中与各类标志符号(OF、SF以及CF)的关系。

课内阶段则深入讨论8位与16位数据的一些访问机制,从底层硬件的BHE信号、指令中的字节/字的显式或隐式的应用场景,直到宏汇编的“EVEN”伪指令定义的对齐操作。

1.2 循环和跳转指令的学习

循环和跳转指令是编程过程中重要的流程控制指令,C语言有典型的“for”、“do{}while”、“while{}”等指令,首先引导学生在自主学习阶段找出汇编中对应常用的“LOOP”、“LOOPZ”、“LOOPNZ”、“JXCZ”等指令,用这些指令与CX寄存器的赋值指令和自减指令“DEC”结合,实现C语言中常用流程。表2是循环处理简单的对应表格。

表2 循环类型的对应

学生在自学阶段,不仅是对比学习,还需要深入思考一些问题,例如:如果我们常用的是加法循环变量怎么办?如果我们要实现常用的 “break”和“continue”等循环中的异常处理怎么办?这些问题的深入讨论将在课堂内化阶段展开。

字符串处理常常要用到循环,而后面会提到的特殊的循环也完全可以用串操作指令来完成。

1.3 数据传送与寻址方式的定义

数据传送是最简单的指令,但配合出现的七种寻址方式又成为学生以往学习的困难之处。翻转课堂教学可以较好地解决这一难题。为此,我们首先引导学生在自主学习阶段观看我们自行录制的微课视频“RISC和CISC”,了解两种处理器结构的历史渊源,充分了解x86系统在设计时对复杂指令集的指标取向,以及采用的“少量寄存器、大量内存空间”的背景,进而对于复杂寻址方式这个难题有所感悟。其次,通过课前观看“冯诺依曼结构和哈佛结构”的微课视频,学生可重点理解数据传送中可能存在的性能瓶颈问题。

课内阶段,教师一方面直接和学生一起讨论常用数据结构的存储实现,尤其是一维数组、二维数组以及典型的表格等,从而深入理解“变址”、“相对”等命名的含义,以及它们在访问这些数据结构中的作用,另一方面,探讨XCHG指令的原子性的意义,为有兴趣进一步选修“计算机操作系统”的学生奠定信号量的基础。

1.4 串处理指令

串处理指令是汇编语言中比较复杂的指令,但是对比C语言中常用的字符串处理函数,学生不难理解串处理指令的运用场景,初步的成果如表3所示。同时课前的自主学习也为学生运用串处理指令解决实际问题奠定了扎实的基础。

表3 字符串操作对比

2 课堂内化阶段

在翻转课堂中,依据“最近发展区”理论,课前学习的基本概念和针对性练习的知识层次是在学生的实际发展水平之内的,学生只需通过正常的学习就可以完成知识的理解和掌握;而课堂学习活动的问题有一定难度,超出了学生的实际认识水平,学生一般需要通过同伴的协作帮助、教师指导或相关资料的支撑才能顺利完成,这一部分内容的学习培养学生的潜在发展水平[4]。

在课前学习基本指令的基础上,再通过课堂内对学习内容进行强化和提升,有利于学生对知识的理解、掌握和进一步深化。为此,一方面通过直接运用指令编程来加深对X86汇编语言知识的内化;另一方面切入难题讨论,深入理解计算机系统的运转机理。比如,针对前述数据类型中有无符号数的概念,我们在课堂直接以编程题的方式要求学生现场完成,图1代码序列中192和64的比较、-64和64的比较明确给出相同原始数据,不同比较结果的示意。通过编程时补码的运算、跳转指令的选择和动态调试时各标志的不同变化,使得学生切实理解相关指令的内涵和应用场景。此外,课堂上我们就可直接切入,用补码的运算来重点说明有符号数的运算(ADD、SUB)等溢出难题,这里就不做赘述。

在课堂内化阶段,我们还考虑了如何激发学生的编程兴趣,让他们积极开动脑筋,既把枯燥的指令学活,同时又能够对计算机程序设计的问题有深入思考。例如,我们尝试从“如何为AX寄存器清零”这个简单课题入手,发动学生寻找各种可能方式。

图1 有无符号数比较对照图

通过汇编结果我们引导同学们进行讨论。一方面是:这些方法在代码的空间效率上各有什么不同?答案从图2的二进制代码列表就可以一目了然;另一方面是:如何结合我们的总线周期和指令周期来思考代码的时间效率?进一步引导学生在课后和实践环节利用PROTEUS仿真器或者软件编程方法做出测量和评估[6]。这样,也增强了学生的科学探究意识。

图2 寄存器清零代码片段图

3 分析与思考

翻转课堂模式尽管减少了教师在课堂上知识讲授的时间,但是对教师其他方面能力却提出了更高的要求。

(1)教师要加强对教学内容的选择与思考,例如:学生不再会利用汇编语言从事大规模的编程,我们在讲授汇编语言的意义后,通过我们的教学应该便于学生们深入学习其它嵌入式系统以及数字信号处理器,应该帮助学生建立基本的计算机体系结构的知识素养,更快地对程序排错、调整程序性能。

(2)教师要充分把控课堂,对学生要加强课后辅导,保证中师生、生生之间的观点能够产生交流和碰撞。

(张 磊等文)

本次翻转课堂的运用是笔者的第一次教改尝试,实践过程中也发现了一些问题。

(1)学生课前自主学习的深入度不同,导致少部分学生在课堂上无法参与讨论,也就无法获得翻转课堂的收益;

(2)从传统纸质媒介转向灵活的微课视频,学生在自主学习阶段虽然比较容易接受,但若不配合大量作业进行巩固的话,编程阶段的内容易懂但难用难巩固;

(3)如何确定评价体制,目前,翻转课堂教学试验班的学生最终还将和同期传统教学班的学生进行同一试卷库的考试,是否能够体现翻转课堂的价值还有待深入研究。

[1] 何文涛.翻转课堂及其教学实践研究[D]. 新乡:河南师范大学,2014.05.

[2] 曾明星,周清平,蔡国民,等. 软件开发类课程翻转课堂教学模式研究[J]. 上海:实验室研究与探索,33(2):203-209.

[3] 刘贵军.自主学习理论下的教学主体相互关系的研究[D]. 石家庄:河北师范大学,2014.02.

[4] 宋五好.有效教学的形成机制探析[J].太原:教学与管理,33(21):2015.07.

[5] 龚奕利 雷迎春 译 Randal E. Bryant, David O'Hallaron 著,深入理解计算机系统(修订版)[M]北京:中国电力出版社,2004年。

Application of Flipped Classroom in Teaching of Assembly Language

ZHANG Lei, LIU Xi, GUO Xiao, WU Ze-min, ZHANG Jian-feng

(InstituteofCommunicationEngineering,PLAUniversityofScienceandTechnology,Nanjing210007,China)

In order to deal with unsatisfying result of teaching of assembly language, this paper discusses the practicability of flipped classroom. Firstly the author makes self-study arrangements for students based on prerequisite C programming language. Secondly, this paper explains how to carry out discussion and investigation with students in the course in view of the operation mechanism of computer system. At last, some experience in this teaching reform has been summarized.

flipped classroom;assembly; C programming language; self-study

2016-05-09;

2016-09- 30

张 磊(1972-),男,工学博士,教授,主要从事计算机软硬件课程和军事通信网方面的教学和无线传感器网络、嵌入式操作系统、计算机体系结构的研究,E-mail: leizhang@163.com

TP313

A

1008-0686(2017)02-0014-04

猜你喜欢

汇编语言C语言内化
激活中队活力,内化少先队员组织归属感
激活中队活力,内化少先队员组织归属感
基于Visual Studio Code的C语言程序设计实践教学探索
高等学校计算机专业课程教学改革实践——以汇编语言与接口技术课程为例
汇编语言与C语言的混合程序设计技术研究
德鲁大叔内化营销胜过广告
基于C语言的计算机软件编程
提高《汇编语言程序设计》教学效率的思考与实践
高职高专院校C语言程序设计教学改革探索
试论汇编语言与C语言的混合程序设计技术