“汇编语言程序设计”教学的思考
2009-02-04唐勇廖建明
唐 勇 廖建明
摘要:“汇编语言程序设计”是一门计算机专业学生必修的重要专业基础课。由于汇编语言具有与高级语言不同的特点,给学生的学习带来了一定困难,必须采取多种有效的教学手段,才能达到理想的效果。本文结合多年实际教学经验,系统分析和介绍了本门课程的教学方法,即从让学生了解汇编语言的重要性入手,进而帮助学生形成系统的知识结构,并在教学中灵活运用多种教学手段,最终通过实践教学使学生达到熟练掌握的目的。
关键词:汇编语言;系统的知识结构;教学手段;实践教学
中图分类号:G642 文献标识码:B
“汇编语言程序设计”是计算机教学体系中一门必修的专业基础核心课程。汇编语言可以直接控制计算机硬件,常用于设备驱动程序、实时控制程序等硬件设计开发等方面。在系统软件的底层、大型软件的性能优化、信息安全与计算机病毒的逆向工程等方面的应用上,汇编语言也具有其他高级语言所无法企及的优势。该课程不仅是“计算机组成原理”、“操作系统”、“微机原理与接口”等核心课程的必要先修课,而且对于训练学生掌握程序设计技巧、熟悉上机操作和程序调试技术有着重要作用。从教学的角度出发,我们认为只有激发学生的学习兴趣,教师与学生互动,并采用一些有效的教学手段,才能够收到事半功倍的效果。
1了解汇编语言的重要性
汇编语言具有与高级语言不同的特点,正是这些特点使得汇编语言具有高级语言不可替代的作用,使得汇编语言在计算机领域非常重要。在教学过程中,首先必须向学生详细阐述汇编语言在计算机学科知识体系中的重要作用,充分调动学生的学习热情和求知欲望。
汇编语言与处理器密切相关,每种处理器都有自己的指令系统,对应的汇编语言各不相同。所以,汇编语言程序的通用性、可移植性较差;汇编语言功能有限,又涉及寄存器、主存单元等硬件细节,所以编写程序比较繁琐,调试起来也比较困难。但是汇编语言本质上就是机器语言,是计算机提供给用户的最快最有效的语言,因而容易产生运行速度快、指令序列短小的高效率目标程序,并且汇编语言是能够利用计算机的所有硬件特性并能够直接控制硬件的唯一语言,它可以直接、有效地控制计算机硬件。在很多场景下,我们必须使用汇编语言,例如,机器自检、系统初始化、实际的输入输出设备的操作等;I/O接口电路的初始化程序以及外部设备的低层驱动程序等;计算机系统频繁调用的子程序、动态连接库等。汇编语言在现代计算机应用中仍然是一门不可替代的、非常重要的程序设计语言。
因此,在“汇编语言程序设计”教学中,我们首先让学生充分认识到汇编语言的特点和重要性,学生通过用汇编语言编制程序,可以更清楚地了解计算机是如何完成各种复杂的工作。学生能从根本上认识、理解计算机的工作过程,从而充分地利用机器硬件的全部功能,发挥机器的长处。
2形成系统的知识结构
汇编语言离不开具体的CPU结构以及必要的硬件支持,由于我们的“汇编语言程序设计”课程仍然基于英特尔公司的8086/8088CPU,因此将英特尔公司的系列CPU发展历史作为首先介绍的内容。从英特尔公司的4位机4004,8位机8008、8080与8085,到16位机8086/8088微处理器,详细介绍了它们的内外总线结构。对于16位的80286微处理器,我们重点介绍了80286的实模式与保护模式两种操作模式。对于32位的80386微处理器以及随后英特尔公司推出的80486,Pentium,MMX Pentium,Pentium Pro,Pentium II,Pentium III与Pentium 4等微处理器,介绍了这些微处理器在硬件结构上的突破,以及什么原因让这些CPU新增了若干专用指令。通过对英特尔系列处理器的介绍,学生对以英特尔系列处理器发展为代表的计算机硬件发展脉络有总体的了解,初步建立起计算机技术继承性、发展性的认识,对其中涉及到的相关概念和术语有了初步的了解。
汇编语言的一个重要特点是它起到了软件技术与硬件技术的接口作用,这决定了汇编语言程序设计必须结合其他课程横向学习。从剖析可执行程序的结构出发,以可执行程序的装入为例,分析了DOS操作系统下的PSP段前缀,并简单介绍了Windows操作系统下的PE文件,并在此基础上讲解了计算机从启动到操作系统装入的流程;在讲解中断的时候,给学生介绍了8259A的结构与用法。通过这种方式,让学生明白“汇编语言程序设计”与“操作系统”、“微型计算机接口技术”、“计算机组成原理”等课程的联系,开阔了学生的思维方式与学习方法。
缓冲区溢出漏洞是目前最主要的安全漏洞之一,而利用该漏洞的缓冲区溢出攻击是目前最主要、最具威胁性的网络攻击之一。我们帮助学生利用DEBUG工具,详细分析了这些具有威胁性的程序,让学生从多个角度研究缓冲区溢出的一般规律,引导学生深入分析植入代码的结构组成,总结植入代码的结构特征。并鼓励学生根据威胁代码的特点,尝试提出相对应的防御措施。为“网络安全”等课程打下了基础,让学生融会贯通,学以致用。
通过我们这种注重历史发展与联系其他课程的教学思想,逐步帮助学生形成了系统的知识结构。这有助于学生建立多门课程之间的联系,开阔学生的专业视野,从而调动学生的学习热情,增强学习的积极性与主动性。
3利用多种教学手段进行教学
汇编语言的内容多而杂,不便于记忆,要教给学生正确的学习方法,指导学生如何去学习。让启发式、开放型的教学贯穿教学全过程,充分调动学生学习的积极性和主动性,以利于学生对教学内容的理解和掌握。在教学内容的讲解过程中,针对不同的知识点,可采用或结合不同的教学方法,加深学生的理解,增强记忆。
在介绍英特尔系列的CPU历史时,我们准备了大量直观的照片,展示了从4004、8008、8080、8085到16位微处理器8086/8088等微处理器,对于32位机展示了从80386到80486、Pentium、MMX Pentium、Pentium Pro、Pentium II、Pentium III与Pentium 4等微处理器。为了让学生对当前的计算机有直观的认识,我们用照片展示了当前计算机的主板结构,对照图片逐一介绍了PCI接口、显卡、网卡等各种插卡。学生们对直观的学习非常有兴趣,课堂气氛活跃。
在讲解指令系统时,我们使用动画讲解了指令在CPU中的执行过程。在讲解指令前,我们重点介绍了8086 内部结构,仔细讲解了各个部件的功能,并突出介绍了指令流水线方式。对于典型的指令,我们在结构图上演示了指令执行过程,包括指令队列的变化、指令操作数的来源、物理地址的形成、EU与BIU是如何配合工作的。通过直观的动画,学生基本理解了CPU中指令的执行过程。
在讲解MOV指令时,我们采用图解法讲解了MOV指令操作数的来源,这非常利于学生理解与记忆MOV指令的操作数的来源。图1中矩形框中表示MOV指令的操作数,箭头的起始点表示MOV指令的源操作数,箭头的终止点表示它的目的操作数,两者间如有箭头连接,表示它们是MOV指令源操作数与目的操作数的允许组合方式。通过图解法,学生普遍感到MOV指令的操作数来源好懂易记,并逐步推广到其他的指令学习中。
在讲解存储器操作数的寻址方式时,我们采用逐步分解的方式介绍存储器操作数的四种寻址,并强调了基址、变址、位移量这三个分量的不同组合就形成了不同的寻址方式。8086/8088 CPU各指令中操作数的来源有四种,立即数操作数、寄存器操作数、输入/输出端口操作数、存储器操作数。而存储器操作数又有直接寻址、寄存器间接寻址、基址(变址)寻址、基址变址四种寻址方式,存储器操作数的这些寻址方式易导致学生理解与记忆出错,造成不佳的学习效果。在讲述基址由BX或BP提供,变址SI或DI提供,位移量是一个在汇编期间的常数后,我们在图2中介绍了基址、变址、位移量这三个分量的不同组合构成的不同的寻址方式。通过这种逐步分解的方式,学生很容易就掌握了存储器操作数的四种寻址方式。
从我们采取的多种教学手段收到的良好效果可见,在教学过程中,灵活应用各种教学方法,能够减少学习汇编语言的难度,便于学生学习和掌握相关内容,提高教与学的效率。
4重视实践教学
上机实验是“汇编语言程序设计”的一个重要教学环节。在“汇编语言程序设计”实验中,针对学生对DOS操作环境不熟悉,我们在课堂上重点讲授了相关的DOS命令,使得学生在上机时能够熟练的在DOS环境下进行操作;针对汇编语言上机调试复杂的问题,我们通过耐心讲解,让学生充分认识到,这是一个从源程序到可执行程序的必经过程,通过学生的反复实践,一定能够掌握汇编语言的开发过程,加深对汇编语言的认识,提高程序设计的能力;针对调试工具DEBUG,重点讲解了常用的调试命令,对一些较复杂并且较为不常用的命令,暂时不引入,重点让学生实践,学生通过使用DEBUG工具,深刻体会到了CPU的工作过程,这对于提高学生的学习兴趣,巩固课堂教学内容起到了关键作用。
在合理安排实验教学内容的基础上,我们还将课外科技活动融入到实践教学活动中,其中最为重要的是组织学生参加国家级以及校级的各种电子设计竞赛,在实践中锻炼学生使用汇编语言设计程序的能力。
我们积极指导学生使用汇编语言参加了全国性的关于嵌入式系统的“电子设计竞赛”,这些竞赛项目不但需要参赛者具有深厚的汇编语言程序编程水平,还要求参赛者拥有过硬的硬件基础知识,包括电路分析、模拟电路和数字电路等各方面的专业知识储备。通过竞赛,学生加深了对整个计算机学科知识体系的掌握,并对汇编语言与其它学科的关系有了深入的认识。
我们还组织了较大规模的学生队伍参加电子科技大学“亿利达杯”、“NS杯”等大学生电子设计竞赛,这些竞赛是半开放式的竞赛,在指导教师的指导下,参赛队员利用提供的器件设计并实现了“数字式Q表设计”、“多点温度检测系统设计”、“数字调谐滤波器设计”、“工频标准信号源设计”、“电机转速控制器设计”、“太阳能自动跟踪器设计”、“数字温度表”、“数控电源”、“遥控小车”、“防啸叫话筒”、“智能LED照明”等多个项目。在这个实践过程中,锻炼了学生使用汇编语言与硬件结合的能力,加深理解了汇编语言在控制系统中的作用,培养了学生的创新能力。
5总结
“汇编语言程序设计”是我国高等学校计算机各专业必修的一门主干课程,对于训练学生掌握程序设计方法与技术,从事自主版权计算机芯片设计和系统软件的开发,以及在信息安全、过程控制等多方面的应用,均具有十分重要的作用。由于“汇编语言程序设计”课程自身的特点,学生在学习的过程中总会遇到这样或那样的问题。我们在教学过程中积极主动总结,认真分析学生遇到问题的根本原因,及时帮助学生对问题逐一加以解决。
从我们长期从事“汇编语言程序设计”的教学经验来看,教师要善于采用多种方法及手段,发掘学生渴望新知识、接受能力强的潜能,让学生从了解汇编语言的重要性入手,培养学生的兴趣,进而帮助学生形成系统的知识结构,并在教学中灵活运用多种教学手段,最终通过实践教学,使学生达到熟练掌握“汇编语言程序设计”的目的。
参考文献:
[1] 王正智. 8086/8088宏汇编语言程序设计教程[M]. 北京:电子工业出版社,2002.
[2] 沈美明. IBM-PC汇编语言程序设计[M]. 北京:清华大学出版社,2001.
[3] 殷肖川. 汇编语言程序设计[M]. 北京:清华大学出版社,2005.
[4] Peter Abel. IBM PC汇编语言程序设计(影印)[M]. 北京:清华大学出版社,2006.
[5] Mazidi, Muhammad Ali. 80x86 IBM PC及兼容计算机(卷1和2),汇编语言、设计与接口技术(影印)[M]. 北京:清华大学出版社,2004.
[6] 张英彦. 更新知识观念改革高校教学[J]. 中国高教研究,2006(2):70-71.
[7] 张海燕.“汇编语言程序设计”课程教学方法的探讨[J]. 计算机教育,2008(7):66-67.
[8] 李振宇. 重视汇编语言教学中的实验环节[J]. 实验室科学,2006(6):21-23.