开篇:润墨网以专业的文秘视角,为您筛选了一篇问题牵引的汇编语言教学实践范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:没有问题就是最大的问题。培养学生发现问题、提出问题、解决问题的能力是教学改革的重要内容。本文介绍了汇编语言教学活动中提出的系列问题,通过教师的示范、引导和鼓励,在轻松和谐的师生交流环境中将知识学习和思维能力培养有机的统一起来。
关键词:汇编语言;寄存器;思维能力;建构主义
中图分类号:G642文献标识码:B
1引言
没有问题就是最大的问题。没有问题的安逸如同没有引爆的地雷一样危险。在满堂灌输、不与学生交流和沟通的教学模式下,学生只是被动的接收知识,其发现问题的能力、提出问题的勇气、解决问题的追求、寻根问底的态度在悄无声息的受到摧残。久而久之,学生成为了一个无所思无所想的机械,失去了思维的活力、想象的活力、创造的活力。
问题的提出是解决问题的开始。围绕某一知识点提出一系列的问题,在师生互动中解决这些问题,能够将知识学习和能力培养有机的结合在一起。这种教学方法是建构主义理论实践的具体体现。建构主义认为认识是一种以主体已有的知识、经验、认知结构、心理结构等为基础的主动建构过程,坚信知识是由认知主体主动建构的结果,学习是认知主体的一个意义建构的过程,教学是培养学生主体性的创造活动,是引导学生从原有的知识经验中生长出新的知识经验的过程,教师应是学生主动建构意义的促进者、合作者和指导者。
本文以汇编语言的最基础内容――寄存器教学实践为例,介绍教学过程中提出的一系列问题。通过问题的牵引,教师与学生、学生与学生之间的互动,将有关知识组织组成网络,开阔学生的眼界,培养学生主动求知的技能、态度与习惯。
2数据寄存器教学中问的问题
数据寄存器是学习汇编语言时学生最早接触的内容,单纯的介绍有哪些寄存器(名称、大小),各个寄存器的含义(常用用法),学生们会觉得寄存器很抽象,既不知道寄存器有何实际用途,也不知道如何使用寄存器。我们通过系列问题的牵引,从不同角度不同侧面来解读寄存器,将新知识和已有知识组织成一个网络。
(1) 为什么要设置寄存器?
通过“CPU执行一个加法指令”的具体应用场景来引导学生回答。CPU要执行一个加法操作,就需要从内存取两个操作数,CPU能够一次性地取来两个操作数吗?答案是不能,地址总线、数据总线上一次只能加载一个单元的地址和数据。先取到的数据放在何处呢?类比生活中车站、超市的寄存处,学生能自然而然的接受寄存器的概念。
(2)CPU的执行部件中有哪些寄存器呢?32位的寄存器是什么含义?
这些问题的回答是寄存器教学的基本内容,在汇编语言教材上都有较详细的介绍。但是我们在教学时对有些内容进行了简化,避免一次性引入过多的概念。
(3) 寄存器为何能记住0、1呢?
直接回答该问题已超出了本门课程的范畴。但为了激发同学们的好奇心,有必要提出该问题。同时指出计算机组成原理将会回答该问题,使学生感受课程间的一些联系。
(4) 如何使用寄存器?
用一个指令实例说明一种给寄存器赋值的方法。例如:MOV EAX, 12345678H。之后,一个接着一个地提出写完成某功能的指令问题。遵循循序渐进、由浅入深的原则,使学生能够模仿实践(学生自己写指令)、能够在和已有知识关联中给出答案,在问答互动和鼓励中,建立信心,巩固所学知识、开启灵活应用之门,开阔思路和眼界。
① 如何将EAX的低16位全部置成0?
② 如何将EAX的低8~15位全部置成1?
③ 有无其他将EAX的低16位全部置成0的方法?
④ 如何将EAX的高16位全部置成0?
⑤ 如何将EAX的第30位置成0?
⑥ 如何将EAX的第30位置成1?
在此过程中,一方面使学生记牢32位寄存器、16位寄存器、8位寄存器之间的相互关系,另一方面调动学生积极性,思考实现各功能的办法。教师作为引导者只是进行必要的启发提醒。与此同时,同学们看到了算术运算(减法)、逻辑运算(XOR、AND、OR)、移位操作、数据传送(借助其他寄存器)等方法的指令。建立实现某一种功能的指令多样性概念,破除指令写法僵化单一的迷信。在应用中熟悉了指令的功能和写法,在写指令的过程中强化了记忆。
(5) 通用寄存器又为何给予特定含义的名称?
我们以一个生活场景来进行类比,讲解通用性与常用性的关系。饮水的杯子作为一种容器,它可以用来装可乐、装牛奶、葡萄酒,这就是容器的通用性,但我们一般只有它来喝水,即常用性。“葡萄美酒夜光杯”,用茶杯喝红葡萄酒就难显现品酒的情趣和情调。类比CPU里要计算一组连续数的和,涉及到和、加法的次数、加数的位置等信息的存放,需要不同的寄存器。各种信息分别存放到什么寄存器中?从寄存器的通用性角度来看,可用累加器EAX来保存计数值,用计数器ECX来保存和等。同时指出不需要这样标新立异,而要注重约定俗成,注意程序的可读性和可理解性。当然,也可以指出在某些指令中是要专用某些寄存器的。
计算机作为人类史上的杰出人造产物,其设计之中有很多优美的地方,值得我们品味和欣赏、借鉴和学习,其中寄存器的命名、指令的命名都能很好地表达“望文生义”的理念。解读这些理念是对学生欣赏能力的一个熏陶,也是人文和科技和谐统一的具体体现。
(6) 寄存器在什么时候使用呢?
虽然前面已从原理上分析了寄存器存在的必要性,但在一般的C语言程序中并没有直接使用到寄存器。因此,我们使用VC++6.0环境下的调试工具显示一个C语言程序及其对应的机器码,如图1所示,很清楚地展现寄存器在被不停地使用着,寄存器这些程序运行必不可少的幕后英雄走上了前台。学生能够初步看到编译器的杰作。
在阅读“z=x+y; a[x]=100”等语句对应的机器指令时,请同学猜测各指令的功能。在机器指令的单步执行中,观察寄存器的变化,在互动中巩固前面所学知识,极大地消除了对汇编语言、指令、寄存器等的神秘感。
(7) 能否现在动手体会一下所学内容呢?
从学习寄存器开始就可以使用调试工具来写一些指令,然后执行这些指令,观察指令的执行结果,并不需要有完整的程序才能使用调试工具。调试器TD的用法在文献[5]中有较详细的介绍。
(8) 如何理解寄存器中0、1的含义?
学生在前面课程的学习中,从宏观的角度建立了计算机程序复杂、应用灵活、表象丰富的概念。而在汇编语言课程中,将从微观的角度揭示计算机工作简单、呆板的一面。在学习汇编语言之时,学生要转变观点,以机器的角度去考虑问题,把自己当成一个CPU,理解计算机工作的本质。这会引发许多值得深思的问题。
首先,让学生牢固建立计算机世界是0、1世界的观点,认识计算机是一个编码的世界,人世间的万事万物映射到计算机中都是0、1,就如丰富多彩的物质世界只由有限化学元素组成一样。复杂的对象由简单的元素排列组合而成。其次,建立计算机(CPU)是机械工作的观点,它是按部就班的处理指令,当根据CS:EIP取出指令后,才依序确定指令各成份的含义,进行解释和操作,改变EIP,就会看到指令都发生了变化。这也就是说,0和1代表的含义和作用是在程序运行时才体现出来的,具有动态性和角色转换性,例如对于文件拷贝程序、病毒程序而言,被拷贝或感染的程序只是作为一个数据对象;而在运行时,指令的各组成成份依其位置起到操作码、地址码、操作数等作用。第三,计算机并不关心0、1串对应现实世界对象的含义,而只是机械的处理;而对于编程者和程序阅读者,他们会关心各对象代表的含义,他们达成一致性的理解是得益于对象出现的场景和双方的约定,这也是人们编写和阅读程序的基础。
3其他寄存器教学中问的问题
与数据寄存器教学一样,我们也通过一系列问题来引导学生思考,学生在思考中寻求问题的答案,逐步加深对计算机工作基本原理的理解。
(1) 指令的地址放在何处?
(2) 改变EIP的值,TD代码区有何变化?TD的数据区有无变化?
(3)C语言程序变量的定义和处理语句是混在一起的,在其对应的机器语言程序中,它们所占空间在一起吗?
从取指令、EIP自动更新的方法、计算机基本的工作过程分析,不难给出其答案。将数据所占的存储空间与指令所占的存储空间分开,又是编译器编译时的功劳。该问题的解答自然会引出分段的概念。
(4) 在指令中出现的地址能够是物理地址吗?有必要是物理地址吗?
(5) 在调度程序运行时,指令之间的相对位置会发生变化吗?
(6) 能用16位的寄存器存放20位的段开始位置的物理地址吗?
(7) 段从内存的何处开始?段的首地址放在何处?
教学实践表明,学生在一个一个问题中受到了启发,问问题和解答问题的能力和习惯逐步得到了强化,课堂充满了活力和生机,激发了探究式学习的热情。
4结束语
学习过程中最大的问题是没有问题。一个无所思无所想的机械是没有创造活力的。兴趣是最好的老师,而体现兴趣的一个重要方面就是心中存有“为什么、是什么、怎么样、行不行、可以吗”等问题。示范、引导、鼓励学生从多角度多视野来问问题,培养学生细致入微的观察能力,深刻全面的分析能力,使学生逐步养成主动求知的态度与习惯,这都将为创新活动奠定良好的基础。
参考文献:
[1] 江珊. 没有问题就是最大的问题[M]. 北京:新华出版社,2009.
[2] 张建伟,陈琦. 从认知主义到建构主义[J]. 北京师范大学学报:社会科学版,1996(4):75-82.
[3] 王晓茜. 建构主义教学论探析[J]. 科学探索,2006(11):30-31.
[4] 陈威. 建构主义学习理论综述[J]. 学术交流,2007(3):175-177.
[5] 许向阳. 80X86汇编语言程序设计上机指南[M]. 武汉:华中科技大学出版社,2007.