成娅辉
摘 要: 计算机语言是计算机科学与技术专业学生必须掌握的一项基本技能。文章结合作者在长期语言教学实践中的经验,把C语言与汇编语言有意识地融合起来,对如何搞好计算机语言教学做了相应的探索,取得了较好的教学效果。
关键词: C语言 汇编语言 案例教学 融合教学
“计算机科学与技术”专业学生在专业学习不同阶段都会学习不同的程序设计语言,为什么要学习这么多种语言?每种语言有什么特点?这是学生常感到困惑的问题。
笔者在长期教学过程中把C语言和汇编语言、机器语言有意识地结合起来讲解,使学生更好地掌握不同计算机语言特点,理解不同计算机语言的不同应用领域,取得一定的经验,同时在教学活动中取得不错的效果,受到学生的欢迎。
一、C语言和汇编语言、机器语言的关系
C语言称之为“高级语言”或“中级语言”,汇编语言、机器语言称之为“低级语言”。初学计算机的学生很难理解为什么这么命名。理解好这些概念,对今后进一步学习其他专业课程十分重要。
在教学过程中,讲解汇编语言时,首先将汇编语言和机器语言的关系告诉学生:计算机其实不认识汇编语言,也不认识C语言,计算机唯一能执行的只是机器语言。
机器语言是用“0”、“1”写成的语言,每条机器语言指令都对应一串“0”和“1”的代码,如果用这种代码编程很不方便,既不方便记忆,又不方便理解和调试。因此采用一系列符号代替这种“0”和“1”写成的机器语言指令,例如:8086CPU中的机器指令1011000000000110,我们就用MOV AL,06H 这种符号代替,后者只是帮助记忆和理解的“助记符”。
我们把用这种助记符写成的指令称之为“汇编语言指令”。汇编语言指令和机器语言指令是一一对应的关系。用“汇编语言指令”写成的程序称为汇编语言源程序,必须“翻译”成“机器语言”才能执行。由于汇编语言指令和机器语言指令是一一对应的关系,因此“翻译”起来比较简单,我们把这个“翻译”的过程称为“汇编”(Assembly)。
使用汇编语言和机器语言的编程必须了解计算机的CPU内部结构,以及硬件接口电路,它和计算机底层密切相关,因此称之为“低级语言”。
同样,计算机也不认识C语言,C语言是用C语言语句编写程序。用“C语言”写成的程序称为C语言源程序,这种用C语言语句编写的源程序必须“翻译”成机器语言才能执行,只是这个“翻译”过程更复杂,翻译出来的机器语言代码更大,我们把这个过程称为“编译”(Compile)。
由于C语言是按照自然语言的特点,同时结合数学表达式编程。基本不用了解底层硬件的结构,可读性强,学习重点在数据结构和算法,所以称之为“高级语言”。
使用其他“高级语言”编程的过程也都一样,都必须把用这种语言编写的计算机“源程序”通过“编译”变成“机器语言”、“目标程序”,才能被计算机认识并执行。
通过这样讲解,学生理解了C语言等“高级语言”和机器语言“低级语言”之间的关系。
二、学习多种计算机语言的原因
我们在教学过程中发现学生学习计算机语言的重点放在学习语言的数据类型、程序结构、语法规则等局部细节上,忽视从总体上把握和理解计算机语言。在实际教学中,我通过讲解汇编语言和C语言的特点,告诉学生不同计算机语言的不同应用场合。
首先,汇编语言是针对CPU的,不同CPU的汇编语言又是不同的。学习起来困难一些,但生成的代码短、程序执行效率高,更适合实时控制、硬件编程。
高级语言如C语言,由于是按照自然语言方式编程,因此程序本身容易读懂。由于不需要了解硬件底层,因此我们更多的是学习如何用计算机实现一些数学算法。
教学过程中为了让学生理解这些概念,我特意采用C语言和汇编语言分别编写一个程序实例,实现显示“I WISH YOU SUCCESS!”(取文件名A)。
两个程序输出结果一样,但用不同语言编写,通过实例对比说明C语言和汇编语言的特点。
C语言源程序:
#include
main()
{printf(“I WISH YOU SUCCESS!”);
}
汇编语言源程序:
DATA SEGMENT
BUF DB 0AH,0DH,I WISH YOU SUCCESS!$
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET BUF
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
这两个程序都实现显示器输出“I WISH YOU SUCCESS!”。
可以看到C语言程序的源程序文件A.C为63个字节,通过编译,可执行文件A.EXE为9489个字节。汇编语言的源程序文件A.ASM为263个字节。通过汇编,可执行文件A.EXE为560个字节。
从这个程序设计实例我们知道,相比较C语言和汇编语言,C语言的源文件小(71个字节),但是可执行文件很大(9515个字节),汇编语言的源文件大(352个字节),但是可执行文件很小(554个字节)。
通过这两个程序设计实例,学生清楚地感受C语言(高级语言)源程序可读性好,容易理解,汇编语言源程序可读性差,难看懂。但从效率来说,同一个程序,汇编语言的目标代码效率远高于C语言。
其实,不同计算机语言有各自特点,也有不同的应用领域。如在实时控制、内存容量很小的情况下编程就应该使用汇编语言,如果算法复杂,要求有较好的用户界面,就要采用C语言或者其他计算机语言。同时计算机语言是发展的,不断会有新语言出现,也不断有语言被淘汰。学生可以根据自己的应用需要,选择学习不同的计算机语言。
认真学好几门计算机语言,对今后实际工作帮助很大,同时再学习新语言会举一反三,学习起来会轻松很多。
三、计算机程序与语言
计算机专业学生最喜欢的是学习各种计算机语言,许多人认为掌握的计算机语言越多,水平越高,不懂得计算机程序和计算机语言的关系。其实计算机领域里有一个最著名的公式:计算机程序=数据结构+算法,这个著名公式里根本没有提到计算机语言。
为了更好地说明计算机程序和语言的关系,我以学生学习程序设计过程中最常见的习题1+2+……+100为实例,使用C语言和汇编语言分别编写一个程序,同时告诉学生:在用计算机解决实际问题的过程中,最重要的是找到用计算机解决这个问题的算法,至于用哪种语言编写是其次的。
C语言源程序:
#include
main()
{int sum=0,i=;
For(i=1;i<=100;i++)
Sum=sum+i;
printf(“%d”,sum);}、
汇编语言源程序:
DATA SEGMENT
RESU DW
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,0
MOV BX,0
NEXT: ADD AX,BX
INC BX
CMP BX,101
JC NEXT
MOV RESU,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
在1+2+……+100这个例子中,关键是知道:sum=sum+i,然后通过改变i的步长,实现编程。至于用汇编语言还是用C语言或者其他语言都可以,不同语言只是使用的语句或者指令不同而已。
通过在课堂上生动地比喻和列举教学实例,学生渐渐理解算法的重要性,知道如果要熟练掌握编程,包括两方面学习,既要学好各种语言的语法规则、数据类型,又要学会根据问题设计出最优秀的算法。
四、结语
搞好计算机程序设计语言教学需要不断根据学生学习中的疑惑探索和实践不同教学方法。在C语言和汇编语言教学过程中,可以融合教学的地方很多,如C语言中的“指针”和汇编语言的“寻址方式”; C语言中的“函数”和汇编语言的“子程序”;C语言中的“移位运算”和汇编语言的“移位指令”区别等。C语言和汇编语言的融合教学可以提高学生的学习兴趣,促使学生积极思考,调动学生的学习积极性和主动性。
参考文献:
[1]潘瑜.论计算机科学与技术专业学生的教育[J].淮南工业学院学,2000(3):133-135.
[2]赵辉,冯东栋.C语言指针教学方法研究[J].福建电脑,2011(4):187-188.
[3]傅篱.计算机结构化程序设计教学探索与实践[J].计算机教育,2009(5):78-80.