汇编语言教学的实践与思考

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言教学的实践与思考
在计算机及相关专业的专业基础课中,汇编语言有着重要的地位。

它是认识计算机系统的重要途径,是一门实践性很强的课程。

掌握它有助于提高学生对计算机系统工作原理的理解、研究、设计和应用能力。

另外,它也是微机原理、单片机原理、操作系统、编译原理等课程必须的先修课。

但是,在对汇编语言教学过程中,却遇到了困难:许多学生在学习汇编语言的过程中往往感觉找不到头绪,认为汇编语言是一门难学的课程,比较抽象,不像应用型课程非常直观与生动,在学习汇编语言时积极性不高。

通过对汇编语言课程几年的教学实践,我认真思考分析了造成汇编语言难教难学的原因,并探索着找出了解决问题的办法。

一、汇编语言本身的特点使得它难教难学汇编语言属于低级语言,与具体的计算机结构密切相关,编写程序时不仅要考虑待解决问题本身的逻辑,还要考虑计算机硬件资源的使用,另外调试程序也很复杂。

1.与硬件的相关性。

汇编语言硬件依赖性强,它要直接使
用CPU勺资源,相对高级程序设计语言来说,它显得难掌握。

不同类型的CPU有不同的机器指令系统,也就有不同的汇编语言。

所以,除了同系列、不同型号CPU之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如小型机和微机等)
CPU之间的汇编语言程序是无法移植的,也就是说,汇编语言程序的通用性和可移植性比高级语言程序低。

2.编写程序的复杂性。

汇编语言功能有限,又涉及寄存器、内存单元等硬件细节,所以编写程序比较繁琐。

汇编语言是一种面向机器的语言,其汇编指令与机器指令基本上是一一对应的。

所以,汇编指令也同机器指令一样具有功能单一、具体的特点。

要想完成某项任务,就必须安排CPU工作的每一个步骤,这就使得编写汇编语言程序比较繁琐、复杂。

3.调试程序的复杂性。

在通常情况下,调试汇编语言程序要比调试高级语言程序困难。

首先,汇编语言指令涉及到机器资源的细节,在调试过程中,要清楚每个资源的变化情况。

比如在调试分支或者循环结构的程序时,往往要根据前一条指令的执行结果来决定是否发生转移,这时就要清楚前一条指令执行以后标志寄存器中各个标志位的状态。

其次,程序员在编写汇编语言程序时,为了提高资源的利用率,往往会使用各种技巧,而这些技巧完全有可能破坏程序的可读性。

最后,高级语言程序几乎不显式地使用转移语句,但汇编语言程序要用到大量的、各类转移指令,这些跳转指令大大地增加了调试程序的难度。

如果在汇编语言程序中也强调不使用转移指令,那么汇编语言程序就会变成功能单调的顺序程序,这显然是不现实的。

二、学生对学习汇编语言的重要性认识不够
从19世纪80年代开始,伴随着编译器技术的发展,CPU性
能的不断提升,汇编语言的名声却每况愈下,人们开始把这种语言判定为“ dead language ”,认为不再需要这种语言了,学生没有认识到学习汇编语言的重要性,甚至把这门课当成大学教学与时代发展脱钩的典型例子,对它产生了心理上的排斥,失去了学习这门课的兴趣,更谈不上主动地学习。

在教学过程中,我们要纠正学生的错误认识,教育学生汇编语言“低级”并不意味着“无用”。

事实上,正因为汇编语言的“低级”,程序员用汇编语言编写程序时,
才有可能充分发挥自己的聪明才智,对机器内部的各种资源进行合理的安排,编写出运行速度快、指令序列短小的目标程序。

汇编语言在今天已经不再像过去一样被普遍地使用了,但是学习汇编语言会帮助你明白计算机是如何工作的。

在使用高级语言编程时,并不一定非得用汇编语言做什么,而使用汇编语言的经验可以让你明白什么样的代码在机器上运行更加高效。

汇编语言的根本作用在于解释硬件、解释硬件的那些可编程实现的行为。

使用高级语言而不是汇编语言,目的是为了提高编程效率;使用汇编语言而不是高级语言,目的是为了对硬件描述,实现操作系统无关性,应用于各种独特的领域。

三、在教学方面存在的问题及解决方法学校和教师首先应当认识到学习汇编语言的重要性,才能潜心研究提高汇编语言教学质量的方法。

下面从教学形式、教学过程设计和教学方法等方面分析当前汇编语言教学方面存在的问题并给出解决方法。

1.在教学形式方面。

现在许多学校把“汇编语言”与“微机原
理”课程结合起来,作为其中的一个重点内容。

这种教育形式侧重指令系统以及基本汇编语言伪指令、编程方法,与硬件相结合是其最大的优势。

但受限于学时和课程重点,汇编语言的内容未能全面展开。

这种方式适合于偏重硬件和接口应用开发的专业。

对于偏重软件、程序开发方面的专业,应单独作为一门课程。

这种教学形式可以比较全面地掌握指令系统、汇编语言各种程序结构设计、实用的混合编程等,有利于比较深入的学习。

在学校教学中,应根据学生的专业选择适当的教学形式。

2.在教学过程设计方面。

一般的汇编语言教学过程忽视了培养学生的实践能力和解决问题的能力,课堂气氛沉闷,学生学习枯燥。

可考虑从下面三个方面来提高教学效果。

首先,培养学生对汇编语言的兴趣。

在整体的教学设计上,一开始就应当让学生明白为什么要学习汇编语言,继而对汇编语言产生兴趣。

在汇编语言教学的开始,要通过具体的程序,使学生真正认识到汇编语言相对于其他语言特别是高级语言的优点。

比如,计算
z=x+y,用C语言编写程序要短得多,也易于理解,但是比较一下它们各自生成的.exe 文件,就会发现汇编语言的妙处。

C语言编写的源程序经过编译连接以后生成的.exe文件占
用9506 个字节,而汇编语言编写的源程序经汇编连接后生成
的.exe文件只占用640个字节,相差14.85倍。

这样汇编语言的空间效率就很直观了,学生对此也产生了兴趣。

其次,适当调整教学次序。

指令系统是汇编语言中最枯燥的部
分,许多教材为了系统地介绍指令系统,往往将它们集中在一起,并且放在课程的前面。

大量指令一下子呈现在学生面前,学生学得一知半解,不知道指令在编程中的作用到底是什么,记忆不牢固,
学了后面的忘了前面的。

这样往往会导致学生产生厌学情绪,影响教学效果。

在教学时,尽量将指令穿插到其他内容中,先通过具体的程序介绍汇编语言程序的格式,给学生一个总体的印象。

将来学习其他内容的时候(顺序、分支、循环结构以及子程序等等)分散讲解指令,并通过对程序的调试增强对指令的理解,便于学生记忆。

最后,要强调实践环节。

汇编语言是一门实践性很强的学科,只有通过实际编程和上机实践才能掌握程序设计技术,并使其达到较高水平。

教学过程中适当增加上机实践的课时,让学生在实践过程中学习和体会汇编语言。

另外,要让学生掌握debug 的常用命令,学会使用debug 调试程序的方法,引导学生注意程序执行时用到的内存单元、各个寄存器以及标志寄存器中各个位的变化。

这样,有利于学生更好地理解指令,掌握编程方法。

3.在教学方法方面。

由于汇编语言本身的特点导致了学习难度大,我们更要选择适当的教学方法以帮助学生更好的掌握汇编语言。

首先,在汇编语言的学习过程中经常要分析数据在内存中的存放情况(比如讲解数据定义伪指令、中断向量表的作用等),这时,图示法能够达到事半功倍的效果。

有这样一道典型题目:执行下面的程序段后,分析AX中的内容是什么。

TABLE DW 10,20,30,40,50
LEA BX,TABLE
ADD BX,3
MOV AX,
把这道题目呈现给学生时,很多学生想当然地认为,BX中
一开始存放的是TABLE的首地址,也就是指向了第1个数据,加上
3,则指向了第 4 个数据,用寄存器间接寻址得到的数据一定就是40 了。

但是如果画出TABLE在内存中存放的示意图。

就会发现结果是错误的。

TABLE定义为字类型,那么一个数据占用两个字节单元,在内存中以二进制形式存放。

为了方便记数,我们用16 进制形式表示。

通过示意图我们很清楚地看到正确的答案应该是1E00H。

其次,学生学习汇编语言以前已经学过了至少一门高级语言,在学习汇编语言的过程中就可以使用类比法。

比如循环结构的程序由
四个部分组成,分别是初始化部分、工作部分、修改部分和控制部分,我们可以和 C 语言的for 语句进行类比。

for 语句的格式
是:
for(表达式 1 ;表达式2;表达式3)
语句;
如果把汇编语言的四个组成部分放到for 语句中,则变成:for (初始化部分;控制部分;修改部分)工作部分;
这样一比较,循环结构的组成就很容易理解了。

这样做学生既加深了对新知识的理解,又复习了学习过的知识。

再次,利用对比法来形成比较。

讲到“循环程序的效率”这一知识点时,我们知道,选择长度短的指令可以提高程序的效率,例如将寄存器AX清零,可以采用下面两种不同的方法:
MOV AX 0 和XOR AX AX
第一条指令长度为 3 个字节,执行花费 4 个时钟周期,第二条指令长度为 2 个字节,执行花费 2 个时钟周期。

这样对比,就可以直观的得出结论。

另外,对“存储器操作数寻址方式”的讲解也可以使用对比法。

比如完成同一个功能,分别用不同的寻址方式实现,有利于学生对各种寻址方式的理解。

最后,可以利用多媒体课件演示难以理解的内容。

比如讲述汇编语言中寻址方式、子程序调用的堆栈变化过程、模拟中断调用动态过程时,运用多媒体动画教学,可使学生一目了然地看到指令执行时内存及寄存器的变化过程,加深对问题的理解,收到将抽象的问题形象化、复杂的问题简单化、枯燥的问题生动化的效果。

以上从三个方面分析了造成汇编语言课程难教难学的原因,
并提出了一些解决的办法,希望能够起到抛砖引玉的作用。

相关文档
最新文档