时间:2022-12-28 12:54:50
导语:在汇编语言程序设计的撰写旅程中,学习并吸收他人佳作的精髓是一条宝贵的路径,好期刊汇集了九篇优秀范文,愿这些内容能够启发您的创作灵感,引领您探索更多的创作可能。
程序设计在高校计算机及相关专业的课程中是最主要的基础课,而汇编语言程序设计又是程序设计的基础,并且是微机原理、操作系统、编译原理和系统结构等主要课程的基础课,是一门软硬件相结合、理论联系实践的课程。如果没有汇编语言程序设计作为基础,想要学深学透后续课程是十分困难的。学好汇编语言可以更好地深入理解和掌握计算机的硬件构成和工作机理,为进行计算机相关的应用和研究奠定基础[1,2]。因为汇编语言是接近于计算机硬件的低级语言,它是联系高级语言和计算机系统的桥梁,对于例如变量参数等在高级语言不容易理解的概念,用汇编语言讲述则很清楚,而且对于理解计算机原理帮助较大。但是由于汇编语言是面向机器的一种语言,很多学生在学习过程中感觉比较难入手。
汇编语言作为一种用助记符表示的面向机器的符号语言,如何认识该课程的作用和地位,如何取得更好的教学效果?在长期从事该课程的教学过程中,笔者尝试各种提高该课程教学质量的探索,有些体会,供大家参考。
1 目前《汇编语言程序设计课程》的教学状况
汇编语言是面向机器的一种符号语言,它与机器的结构密切相关,是直接针对CPU、内存和I/O端口编程的程序设计语言。而目前的各种高级语言和网络应用开发工具很多程序几乎可以自动生成。然而机器语言、汇编语言和高级语言的程序设计语言体系仍然是计算机技术的基础,也是计算机技术的重要知识体系之一。对于计算机及其相关专业的学生以及计算机爱好者来说,汇编语言程序设计是需要掌握的重要专业基础知识之一。可由于汇编语言面向机器的特点,不仅需要硬件知识的配合,而且它有大量的语法规则需要记忆,加之上机调试单调且容易出错,导致了大部分同学对于《汇编语言程序设计》课程的畏难情绪,学生初学阶段普遍反映该课程难学,很多学生在学习过程中感觉比较难入手。
2 教学方法探讨
2.1 合理组织课程内容
教学过程中为了让学生掌握所学知识并用于程序开发,在课程教学中把握教材的难点和重点尤为关键。
(1)基础知识的教学。
主要包括计算机硬件和指令系统的教学。对计算机硬件基础知识的理解和掌握程度直接影响学生对汇编语言地理解和掌握,其中包括CPU内部的构成、总线的作用、寄存器的设置和用途以及内存的使用等是较难理解的部分,在实际教学中,可将相关内容融汇在一起来进行教学。通过应用如:图片和动画等形象化的方法将这些比较抽象的知识以较容易理解的方式展现出来。作为编程的指令系统对汇编语言程序设计而言是很重要的一部分内容,在进行该部分内容教学时,可以尽量通过演示程序来进行讲解,解释各条指令的运用方法、效果等,同时也可以适当应用动画等方式演示指令的执行过程。
(2)程序控制结构的教学。
程序控制结构是程序设计教学中的重点,汇编语言中的选择结构和循环程序结构程序设计则是此部分的难点。为了使学生更好地掌握,在教学过程中,可选择部分典型的例题,如:解决汉诺塔问题和阶乘的计算等。
2.2 教学手段上采用传统教学与多媒体教学相结合
在教学过程中我们可以有选择地使用多媒体教学,例如:用动画模拟汇编语言中寻址方式、子程序调用的堆栈变化过程、中断调用过程等。运用多媒体教学,增强学生的直观感,加深对问题的。在讲用汇编语言指令编程序的内容时,采用传统的教学方法,教会学生如何思考、推理,如何用指令实现算法,培养学生的抽象思维、逻辑推理能力。传统教学方法与多媒体教学相结合,将有助于提高学生的理解能力及综合思维能力。
2.3 随堂写一些小程序增强记忆
在课堂上多加练习编写小程序段会提高学生对指令的记忆及理解掌握。经过几年的教学发现,课堂上练习少了以后,很多同学往往出现在编写程序时有些指令写不出来或不会用相关指令来组织程序。在课堂上练习,使学生可以增强记忆,对指令的使用方法有了进一步了解,能够运用自如。
2.4 注重案例教学
案例教学法在当前面向各个层次学生的教学过程中已得到广泛应用,具体是指教师需要根据课程教学目标与内容的要求,选择相关典型的实例并组织学生学习、组织学生讨论从而最大程度调动学生的创造性思维的教学方法。其具体执行有两种形式。
(1)案例讲解。
案例讲解需要在理论知识讲授之后进行,通过案例讲解辅助,达到加深学生理解的目标。
(2)案例分析法。
案例分析方法的重点在于讨论和分析,其主要目的是培养学生的创造性思维。案例的选择应注意培养学生理解知识,提高学生分析问题和解决问题的能力。在汇编语言程序设计的教学中综合运用案例讲解法和分析法,能够使学生尽快理解汇编语言程序设计的本质特征并迅速掌握编程方法。
2.5 注重实验内容的实用性和趣味性
把实验实践环节与理论教学相融合,用实践教学促进学科理论知识学习,激发学生学习兴趣。对于任何一门计算机语言课程来说,实验都是教学中非常重要的一个环节,实验可以加深对理论知识的理解,提高学生的实践动手能力。为了避免传统的程序三大结构、数据组织与数值计算、代码转换和数制转换等方面的枯燥无味的实验,应将实验内容和实际应用相结合,如将汇编语言和计算机的系统维护等实际相联系,用汇编语言编写简单的设备驱动程序等等,增加图形化的实验内容等方法和手段,使实验变得实用有趣,增强学生动手的积极性和提高学生的动手能力。
2.6 突出重点和难点
另外,在教学过程中,加强传统的教学方法也是重要的,如在教学过程中要突出重点和难点;课堂上多做练习,课后注意答疑、辅导。
如:讲解指令系统时部分指令应结合指令编码(即机器指令)来介绍,这样学生更容易理解和接受。
例如:讲解转移指令中段间转移直接寻址和段间转移间接寻址问题,如果只列出样例:
段间直接寻址:jmp far ptr target1
段间间接寻址:jmp dword ptr addr [bx]
学生很难理解,具体怎么实现跳转。但是如果结合指令编码来讲解上述两条转移指令则效果会有很大改进。
如:
段间转移直接寻址指令编码需要5个字节,如图1所示。
也就是说,上例中Jmp far ptr target1 的target1给出的是转移地址,即包括段地址和偏移地址。
而段间转移间接寻址的指令编码是2~4字节,如图2所示。
指令中由MOD和R/M确定的双字存储单元中的内容分别送入IP寄存器和CS段寄存器,完成转移。
关键词:汇编语言程序设计; 教学方法; 内联编程
1课程的现状
汇编语言不同于其它高级语言,必须要求编程人员有一定的硬件基础,如对CPU的结构、CPU与存储器等部件的数据传送过程必须要有基本的了解,这样才能学好这门课程。在教学过程中,我们发现学生对高级语言编程学习积极性高,对汇编语言课程缺乏兴趣,因为课程本身指令复杂,规定繁多,再加上学习汇编指令前对CPU的相关工作过程理解不透,导致学生厌学,又由于本课程面对的低年级学生只有高级语言的基础,习惯于高级语言的自然表达,初次接触计算机硬件知识心理上有恐惧感,更难以适应繁杂的低级语言。
针对本课程的特点,对教学内容、环节、过程等进行了精心设计,下面就教学方法的设计、实践教学方法、课程考核形式等方面进行的一系列改革进行详细探讨。
2教学方法设计改革
为了避免学生因指令复杂,规定繁多、难度大而对该课程产生畏惧的学习心理,教师有必要对教学内容进行合理组织,对教学过程进行精心的设计。
2.1利用FLASH技术,使教学难点容易理解
在多年的教学过程中,我发现学生在学习CPU结构这章节中,对介绍的CPU由哪些寄存器(名称、大小)构成,各个寄存器的含义,用途,CPU与存储器等部件的数据传送过程,会觉得很抽象,多数同学都是采用死记硬背的方式,这章节是第二章节的内容,也是能否学好该课程关键的一章,如果理解不深,这无疑为后续的学习,特别是寻址方式的学习埋下了隐患。
针对这个问题,教师有必要对教学过程进行精心的设计。
在这章节中我们利用FLASH技术,把各种寻址方式下传送指令的CPU与存储器等部件的数据传送过程以动画形式展现给学生,使得复杂,抽象的过程变得直观,学生理解比较容易,也加深了对寻址方式的记忆。
2.2对比法教学
目前计算机专业的课程设置中,《汇编程序语言的程序设计》课程通常是学习完C语言课程之后开始学习的。所以在教学中可以采用对比法来讲解课程,对某些语法知识点和程序设计过程我们可以以C语言和汇编语言对应分析。
例如在介绍寄存器时,由于在一般的c语言程序中并没有直接使用到寄存器。因此,我们使用vC++6.0环境下的调试工具显示一个c语言程序及其对应的机器码,让学生看到编写汇编程序寄存器的用途,加深了学生对汇编语言程序的理解。
int m=5,n=6,c;
004010E8 mov dword ptr [ebp-4],5
004010EF mov dword ptr [ebp-8],6
c=m+n;
004010F6 mov eax,dword ptr [ebp-4]
004010F9 add eax,dword ptr [ebp-8]
004010FC mov dword ptr [ebp-0Ch],eax
在介绍语法知识时,比如变量的定义:
C语言中的变量定义形式如下:
int c1,c2=0;
汇编语言的变量定义形式如下:
cl DW ?
c2 DW 0 转贴于
2.3抽象概念的比喻教学法
在对段地址和偏移地址的讲解过程中,可以采用比喻法,把操作数比喻成学生,把教室的房间号比喻成段地址,教室内每个座位编个号,编号就是偏移地址,要想到教室把某个学生找到,就要找到相应的教室号,再到对应的座位号找到这个学生,同理,要想把主存中的操作数找到就要找到段地址和相应的偏移地址,另外要让学生知道每个教室里的座位号都是从0号开始编号的,也就是每个段里的偏移地址如果不特别指定,也是从0号开始编号的。
3实践教学改革
3.1增强实验环节,做一些实际项目
程序设计对于大多数的初学者来说有一定的难度。对于给定的一个实验题目,许多学生往往感到无从下手。目前的上机实验时间往往很短,常常是学生才刚刚有点入门,实验环节就结束了;且课外实践环节几乎没有,导致学生即使课内学的再好也不会应用。
在实验设计方面可以先把一些经典的程序提供给学生,例如分支结构的设计、循环结构的设计等,让学生在写出C语言程序之后再设计汇编程序,找出两者编程思维的区别。这样通过一段时间的经验积累,就能够编写比较复杂的的程序,由于上机时间有限,可以每次实验课之后布置一些题目供学生选择思考,让学生课外分组来设计这些程序,题目的类型可以是研讨型的让学生从更多的角度去思考上机实验过的题目,编写出不同的程序;另一种为编程型,
例如可以设置这2道题目,音乐小键盘、贪吃蛇游戏等,以加强同学们的编程能力的训练。
3.2采用与高级语言混合编程
目前越来越多的场合要使用汇编语言和高级语言进行混合编程,因此在教学时应强调汇编语言和C/C++的混合编程,并且这样也可以为今后嵌入式系统软件开发的学习打下坚实的软硬件基础。
在实验课中可以借助 Visual C++开发工具,采用内联汇编的方式,在 C/C++源程序中嵌入汇编指令序列完成一定的功能,并让学生设置断点然后跟踪执行,同时注意观察寄存器的内容和变量的值。这样可以一方面让同学们熟练掌握两种语言的切换使用,另一方面让他们感受到两种语言各有特点。例如可以利用汇编语言处理高级语言中不方便处理的一些问题。
4课程考核形式改革
因为“汇编语言程序设计”是实践性很强的一门课程,所以实验课成绩应该在总成绩中占有相当大的比重。目前大多数高校的汇编语言课程的实验课成绩只占很小的比重,即理论知识往往占课程期末考核总成绩的70%~80%,这样往往会导致学生不得不将大量的精力放在理论知识的学习中,结果只会造就大批的应试高手。在教学中,我们遇到过有的学生考试试卷能考90分以上,却连最基本的计算机操作都不能动手。今后这门课程的考核,实验课成绩应该提高到占总成绩的1/2。老师在实验中应该营造出互动气氛,检查每个学生的完成情况同时做好记录,根据学生的实际动手情况给出他们的平时实验成绩,而不是只依据交上来的实验报告,这样也能杜绝抄袭之风。
5结束语
通过教学改革的实践,在一定程度上提高了他们对本课程的学习积极性,又降低了学习难度。良好的教学效果是永远追求的目标,在今后的教学中,我们还需要不断进行探索、研究和尝试,不断更新观念,发现自身教学过程中的问题,找到解决办法,提高教学效果。
参考文献
[1] 王成耀.80x86汇编语言程序设计[M].北京:人民邮电出版社,2008(第2版).
[2] 卜登立,彭嵩松,唐卫东,龙侃.“汇编语言程序设计”课程教学改革研究与探讨[J].井冈山学院学报,2009,30(10):124-127.
关键词:汇编语言 I/O 子程序 库
中图分类号:TP313 文献标识码:B 文章编号:1002-2422(2008)03-0086-02
设计的I/O子程序库包括16位版本和32位版本,可分别应用于16位和32位汇编语言应用程序,提供的子程序功能包括不同数制和字符串的输入与显示,状态标志的显示,满足汇编语言程序设计的通常要求。
1 设计方案
1.1子程序功能需求
根据在汇编语言程序设计中的通常要求,子程序所提供的功能主要包括键盘输入和显示器显示,输入和显示的内容可以是不同的数制与字符串格式。如表1所示。
1.2子程序库结构
为了方便整个子程序库的设计,设计了一些通用予程序。在实现提供给用户使用的子程序时,充分利用这些通用子程序,简化了子程序的代码编写,减少了子程序库的长度。主要子程序之间的关系如图1所示。
字符输入和显示子程序READC、DISPC是整个子程序库输入输出的基础。利用这两个子程序实现了字符串输入和显示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同数制数据输入和显示的基础:通过调用READMSG读入字符串,然后调用字符串转换子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分别将字符串转换为不同数制的数据,从而实现了不同数制输入的子程序READBIN、READHEX、READUI、READSI等;通过调用DISPMSG显示字符串,然后调用数据转换字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分别将字符串转换为不同数制的数据,从而实现了显示不同数制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
设计的16位和32位的子程序库提供的子程序功能都是相同的,区别在于16位的字符输入子程序是利用DOS系统调用实现的,而32位的字符输入子程序是利用WIN-DOWS API函数实现的。其他子程序则可以通用。
各个子程序汇编后,由库管理工具LIB.EXE生成16位子程序库I/O16.LIB和32位子程序库I/O32.LIB。
1.3参数传递
汇编语言子程序的参数传递可以采用寄存器传递,共享内存变量和堆栈传递三种方法。堆栈传递参数时,可以用MASM提供的伪指令PROTO来声明子程序,用INVOKE来调用子程序。这两个伪指令在声明和调用子程序时相对于CALL指令和PROC伪指令要简洁得多。使用堆栈传递参数也是高级语言通常使用的子程序传递参数的方法,用堆栈传递参数的子程序可以被高级语言调用。子程序的返回参数也遵循高级语言子程序的规范,采用寄存器EAX返回子程序的出口参数。
1.4宏命令
调用子程序需要用专门的调用指令并遵循一定的格式要求,这对于初学者来说有一定的难度。当子程序的参数比较多时,调用子程序的编码量较多,设计了调用子程序的宏指令,利用宏指令来实现对应的子程序调用,格式简单,使用方便,尤其适合初学者应用。为提高代码的复用性,被调用子程序的声明和宏定义都放在包含文件IO.INC中,在汇编语言应用程序中用INCLUDE语句包含该文件即可。
关键词: 比较教学法;汇编语言; C语言;实践;教学效果
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2013)10-2402-02
汇编语言程序设计是计算机专业学生的专业基础课、必修课,属于低级语言的程序设计,是硬件类课程和操作系统的先行课和基础课,是高级语言程序设计的扩展。汇编语言是架起软件、硬件知识的一座桥梁,它不但有利于学生理解计算机的工作原理,而且对学生程序设计能力的培养起着十分重要的作用。
在汇编语言课程教学中发现,汇编语言相对于其他高级语言来说缺乏直观性与生动性,是一门比较抽象和理论化的课程,学生养成了“重软件、轻硬件”的学习态度,往往会选择一些容易学习的高级语言而忽视了对汇编语言的学习,因此在教学中普遍存在“教师难教,学生难学”的问题。
如何改善汇编语言课程的教学效果和教学质量,提高学生学习的兴趣和主动性是当前急需解决的问题。将比较教学法引入到“汇编语言”的教学中,该教学方法注重将汇编语言和
高级语言进行比较教学,能够极大提高学生的学习兴趣,取得良好的教学效果。
1 比较教学法在汇编语言课程教学中的应用
1.1 比较教学法
比较教学法( 或叫类比教学法)是指在教学活动中将两个或两个以上的认识对象放在一定的条件下,按照同一标准进行对照比较,从而确定认识对象属性的同异、地位的主次、作用的大小、性能的优劣、问题的难易或认识的正误深浅,以达到辨识、了解和把握认识对象之目的的一种方法[1]。比较教学法是最常用的教学方法之一,也是使用范围最广的教学方法之一。
由于学生在学习汇编语言之前已经至少学习过如C这类高级语言,所以采用比较教学法不仅能更好地理解汇编语言,同时加深对高级语言的理解也有很大的好处。在实际教学过程中,可以将新的陌生的东西(汇编语言)和旧的熟悉的东西(C语言)做比较,找出它们之间相同的地方和不同的地方,然后进行差异化的学习,重在存同求异,这样就会事半功倍,达到理想的教学效果。
1.2 比较教学法在汇编语言课程与C语言课程教学中的实践
高级语言(如C语言)和汇编语言两者都是程序设计的工具,在程序的基本功能和程序设计的基本问题上均有相应的实现机制,同时在某些方面是相通的,换句话说许多用汇编语言能作的工作也可以用C语言来完成。
2)两操作数的类型匹配问题。
2 结论
限于篇幅,以上仅举2个例子来说明教学过程中如何将汇编语言和C语言进行比较教学,已经取得了很好的教学效果。由于语言的相通性,实际上在整个汇编语言教学中还有很多知识点可以把C语言知识贯穿其中。通过比较教学,一方面学生可以更好地学习汇编语言的相关知识,极大地提高学习效率;另一方面,更提高了学生对C语言的更高层次上的认识,间接地对其他学科的学习也起到了很大的帮助作用。
参考文献:
[1] 李运模.比较教学法论略[J].中南民族学院学报:人文社会科学版,2000(3).
[2] 沈美明,沈冬婵. IBM-PC 汇编语言程序设计[M].2版.北京:清华大学出版社,2001.
[3] 谭浩强.C程序设计[M].3 版.北京:清华大学出版社,2005.
“汇编语言”课程是计算机科学、自动化及电子信息类专业的一门核心专业课程。[1-2]对于计算机及其相关专业的学生来说,汇编语言程序设计是需要掌握的重要专业基础知识之一。了解和熟悉汇编语言可以优化学生的知识结构,提高学生的认知水平,增加学生的程序开发手段。相较于快速发展的可视化高级语言,作为低级语言的汇编语言,可读性较差,比较繁琐,不符合自然语言表述,学生普遍感到难学。因此,“汇编语言”课程如何优化教学质量、提高教学效果,是任课教师面临的一个重要问题。[3]本文结合实际教学体会,就如何提高“汇编语言”课程教学效果进行了分析与探讨。
一、汇编语言程序的特点
计算机是一个编码的世界,只能识别和处理由“0”和“1”组成的二进制代码的机器语言,这种指令代码编写易出错且不易修改。于是,人们发明了“指令的助记符”,用助记符(mnemonic)代替操作码,用标号(label)和地址符号(symbol)代替地址码,用这种符号系统形成汇编语言。[4]因此,汇编语言本质上就是机器语言,只不过更容易被人读懂且更容易记忆。使用汇编语言编程,可以对计算机内部硬件进行直接控制,合理地安排机器内部的各种资源。归纳起来,汇编语言程序有以下几个主要特点:
一是与硬件的相关性。汇编语言与机器指令一一对应,不同类型的cpu内部硬件结构不同,因而有不同的指令系统,相应的汇编语言程序也就不同,其通用性、可移植性比较差。二是执行效率高。由于汇编语言与硬件相关,它可以有效、直接地控制机器,程序的执行代码短、速度快,是其他高级语言难以企及的。三是编程、调试相对困难。为了有效地控制机器,汇编语言指令涉及到硬件资源的各种细节,如标志、堆栈、寄存器、存储单元等。相对高级语言,其编程及调试比较繁琐、复杂。[5-6]
二、明确教学目的,优化教学内容
1.激发学生的学习热情
“汇编语言”与许多课程联系紧密,如图1所示,它是“操作系统”、“计算机接口技术”、“计算机组成原理”、“嵌入式系统”等课程的基础,在开发嵌入式系统时更是必不可少的语言。“汇编语言”课程学习起来比较枯燥、学习周期较长,不像高级语言那样上手比较容易且能很快见到效果。因此,应教育学生少一些急功近利的思想,应着眼于长远的、全面的技术成长。有条件的教师可以将自己相关的科研成果带入课堂,说明汇编语言有着广泛的应用领域。在授课过程中,注意拓宽学生的知识面,结合具体的应用,激发学生的学习热情。
2.优化教学内容
不同于高级语言的教学模式,汇编语言是一种硬件编程语言,是连接软硬件的桥梁。一方面,汇编语言与芯片密切相关,学习汇编语言时应具备一定的硬件基础知识,需要时穿插相关知识点,回顾前导课程的相关内容,如计算机结构等;另一方面,又不需要紧跟着产品来讲授,只要选择一种典型的汇编语言指令集讲清楚、讲透彻,使学生掌握学习与思考的方法,今后遇到其他的芯片,也就可以举一反三,触类旁通。
具体到一种汇编语言指令集,应突出其重点、难点,如分段管理技术、寻址方式、堆栈管理、中断技术等。为了便于后续程序结构的学习,在学习寻址方式和指令集时就教会学生使用debug,讲解了常用的调试命令,使学生能尽快上机实践,验证指令,编写短小程序,看到运行结果,从而加深影响,巩固所学的内容。由于汇编语言的指令很多,涉及的知识点抽象,刚开始接触这门课程时,学生往往不太适应,前后的知识点容易混淆,教师应及时对讲授过的内容进行比较与小结。课堂上,应适当增加讲授例题的数量,不同的教学阶段,例题的侧重点不一样。开始阶段,例题主要涉及汇编语言格式与汇编语言指令;中间阶段,例题讲授的是如何用汇编语言指令实现汇编语言流程;后续阶段,例题重点讲解汇编语言程序设计算法的确定,分析、解决问题的思路与方法。而在学生掌握了基本内容及重点内容的基础后,教师应提纲挈领,从系统的整体角度分析“汇编语言”课程在整个硬件知识体系中的作用,让学生从更高层次理解、使用汇编语言。
3.多种教育手段相结合
随着现代教育技术快速发展,多媒体技术在教学中有着广泛的应用。在“汇编语言”课程中,可以利用多媒体课件图文并茂的特点吸引学生的注意力,活跃课堂气氛。例如,可以通过动画形式将寻址过程、堆栈变化、循环移位、子程序调用、中断调用过程等表示出来,将复杂的、抽象的问题简单化、形象化,提高教学效率。而在确定汇编语言程序设计的算法,用汇编语言实现编程,培养学生的推理、思维能力时,采用传统教学方法。对不同的知识点,结合不同的教学方法,有利于学生对不同教学内容的理解与掌握。
三、注重实验环节,提高教学效果
1.实验平台及实验内容
汇编语言程序设计要经过编辑、汇编、连接和调试等过程,如图2所示,传统的上机实验一般是在dos操作系统环境下进行的。目前流行的是windows操作系统平台,学生对dos操作环境相对陌生。为了提高上机的效率,应摒弃dos环境,采用基于windows操作系统的汇编语言集成实验环境。在该环境下,可以方便编辑汇编语言程序,使用下拉式菜单或快捷按钮进行汇编、连接及调试等工作,并可以预先设定段定义、过程定义等。
在实验内容安排上,应根据授课的进度及学生的掌握程度,并与教学目标相匹配,精心选择一些有代表性的、有实用价值的内容,尽量避免实验内容过长、过杂等问题。实验的内容应包括:指令系统及调试工具debug使用;汇编语言程序设计上机环境及过程;顺序、分支、循环基本结构程序设计;子程序设计和宏汇编程序设计;中断调用程序设计;综合性实验。
转贴于
2.发挥学生在实验中的主体作用
在整个实验过程中,以学生为主体,教师只是起到组织、引导的作用。
实验前,教师讲解难点、重点及有关注意事项,点到为止,也可以先给出相关的问题,让学生去思考、去观察。要求学生对实验内容进行预习,并在下次上实验课时用提问、抽查等形式检查。学生通过预习带着问题进行实验,可以提高学习的主动性,且能对知识点的领悟更深刻。
实验中,鼓励学生按照自己的思路去编写、调试程序。对于学生在实验过程中提出的问题,一般不直接给出答案,而是引导学生通过学过的理论知识自己寻找解决的方法。只要能达到预定的实验目标,对实验步骤及过程不做过多要求。对学有余力的学生,鼓励他们在完成规定的实验内容后,对补充题或对自己设计的问题进行实验;而对基础较差的学生,则鼓励他们独立地解决问题。
实验后,要求学生及时对实验进行归纳、总结,并撰写实验报告。
3.实验实践贯穿整个教学
“汇编语言”课程有其特殊性,只有通过不断的上机实践,学生才能加深对理论知识的理解,提高编写程序的能力。因此,要转变观念,重视实验教学,避免实验教学流于形式。程序设计是一个调试修改语法及逻辑错误,最终得到正确程序的过程。教师应充分利用多媒体等手段,引导学生动手编程,通过实际例题观察数据流变化,培养学生调试、修改程序的能力和意识。教师演示与学生实践可以穿插交替进行。如果学生对自己编的程序没有把握,则鼓励他们上机进行验证,反复地调试、修改、运行。对有些验证性实验,可以用作业的形式要求学生在课外完成。如用debug调试工具验证各类指令的功能和格式,对标志位的影响,查看数及字符在存储器中的存放形式,堆栈的变化等。既加深了学生对所学内容的理解,又为汇编语言程序设计打下了基础。
本课程的目的是使学生掌握程序设计的方法,学会用汇编语言编写程序。结合各章节所学的知识点,每次实验要求学生编写相关的程序,检验学生具体知识点的掌握程度。注意加强前后实验之间的相互联系,融会贯通各个知识点。随着课程进展的加快,实验内容应从比较简单到相对复杂,再到课程结束阶段,经过知识及多个实验经验的积累,使学生具备一定的程序设计能力。
【关键词】C语言 编程 结构化
1 C语言的编程特点
1.1 C语言的定位
很多人都普遍的认为C语言是在B语言的基础上发展过来的一种高级编程语言。然而从编程语言的层次结构方面来说,我们应该认为C语言,是在汇编语言的基础上发展而来的,它比汇编这类编程语言要高级,但是比一些可视化的编程语言又低级,所以准确来说,C语言应该算是中级编程语言,或者称为准高级程序设计语言。目前很多高级程序设计语言都是在C语言的基础上发展而来的,或者至少借鉴了C语言程序设计的思想。80年代初,Bjarne Stroustrup在贝尔实验室对标准C进行了改进和完善,C++得以诞生,使得面向对象的程序设计思想得以提出和落实;21世纪初,人们将C语言和单片机相结合,开发出来了应用于单片机编程的C51语言,使得单片机的程序设计从反复的汇编语言设计中抽身出来,大大的提高了程序的设计效率。
可见C语言在整个编程语言的发展过程中属于承上启下的作用,同时其自身的应用领域又在不断的更新和发展。
1.2 C语言的编程特点
通过上述C语言的定位可知,它既具备高级程序设计语言的结构性和层次性特点,同时也兼具了低级程序设计语言的实用性。
(1)用相应的C语句可以实现对微机操作中的字节、地址等进行直接访问。
(2)基于函数的结构化特点,使得复杂的软件系统可以由多个人,以设计子函数的形式,分别各自进行程序开发。之后进行函数的汇总,最后由主函数,按照既定的程序流完成对各个子函数的调用就行。
(3)丰富的数据类型,尤其是指针类型,可以很方便的应用于复杂数据和大数据的访问和处理。
(4)由于C语言基本上不向低级语言那样直接涉及到对硬件的操作,所以C语言程序往往具有很好的通用性,方便程序移植。
2 C语言的编程技巧
2.1 扎实基本工
在进行C语言程序设计之前,首先要熟悉运算符、表达式以及各钟类型数据的定义和使用方法,其次对顺序、分支和循环三大程序结构要有较好的把握,并熟练使用while循环、for循环、switch语句等。如果要在程序的设计上有进一步的提高,那就需要对“指针”能够进行熟练的使用了。指针可以用于表示变量,但更多的是用于代表数组、存储地址以及函数地址。在代替不同变量时将返回不同的值,可以说指针的功能十分强大。对其熟练使用有助于程序设计的简洁和便利。
2.2 立足C语言的结构化的特点,熟练程序设计基本构型
C语言典型的特点就是结构化,在进行具体的程序开发时,应该首先要根据设计的软件项目,然后进行任务的细分,由于C语言不需要编程人员去配置硬件资源,因此程序设计人员可以把更多的精力放在各个细分任务的子函数设计上,考虑用最简单的程序结构去实现。在数据类型的选择上,能够用短数据类型就尽量用短数据类型。
另外,为了提高程序代码的执行效率,建议C语言程序设计人员要了解C语言程序最终运行的硬件的基础机构,是在微型计算机上运行,还是在单片机上运行。在了解硬件平台结构及内部资源的前提下进行相应的程序设计,将有助于提升程序的运行效率。
3 C语言的实践应用
3.1 混合编程
很多程序设计人员都认为C语言比汇编语言高级,所以认为没有必要去学习和了解低级语言。其实这种思路是及其错误的。汇编语言之所以称之为低级语言,是因为其更加贴近于硬件。在编程时一定要明确的在代码中描述清楚,数据如何从一个存储单元送入另一个单元,因此显得编程复杂,由于其直接和硬件打交道,所以被称为低级语言。但是其运行效率却是最高的。所以在C语言程序设计上要有质的飞越,有必要了解汇编语言的编程思路和理念。有条件的话可以将C语言和汇编语言混合编程,从而发挥出两类编程语言各自的优点,达到设计程序的最优化。
在进行C语言和汇编语言的混合编程时,无论是采用C语言调用汇编,还是汇编调用C语言,还是C语言嵌入汇编的方式,都应该对调用关系、各模块的连接以及参数的传递进行妥善的处理。对于调用关系,则需要对调用的函数和过程进行说明;通过明确函数和变量的命名以及存储模式的关联性,从而实现各模块的有效连接;通常情况下往往通过堆栈的方式来实现参数的传递。
3.2 C语言在工程上的应用
C语言在电力电气系统、交通控制系统以及机器人控制方面都有广泛的应用。下面以工厂通风控制系统的C语言程序设计为例来加深对C语言软件编程思想的理解。
工厂通风控制程序的设计时采用模块化得设计思想,即单独的编写初始化函数void Initial(void);中断处理函数void**(void)interrupt;数据采集函数unsigned char ADconvert(unsigned char address)以及其它函数等。然后由主程序负责对各个子函数的调用,从而实现对工厂通风系统的控制。简化的主程序如下:
main( ){ ... Initial(void);
while(l){ReadAi( );ADconvert(unsignedchar address);
DataChange( ); DisPlay( ); …}
整个系统由于需要不停的对工厂数据进行采集,所有主程序的结构就设置成了循环结构,当通风控制系统有序的进行准备工作之后,通过调用初始化函数,程序就开始进入主循环,主循环中通过调用采集程序,完成对测量对象的循环检测以及对显示程序,数据处理函数的循环调用。一遍又一遍的不停循环执行主程序。在这个主程序循环的过程中,如果有异常情况发生,则随着中断触发事件的发生,将进入中断响应,实现对中断函数的调用。
4 总结
C语言作为编程语言中经典的一类程序设计语言,因其结构化、可移植化、编程简介的特点,被广泛的应用国民生产的各个领域。而随着信息技术、互联网技术以及物联网技术的飞速发展,未来C语言的应用领域将变得更加广泛。对C语言在软件编程方面的研究和分析将变得更有意义。
参考文献
[1]顾泰龙,李远静.基于C语言的计算机软件编程实验研究[J].软件工程师,2013(08).
[2]李强.计算机软件开发语言的选择探讨[J].电子制作,2013(09).
作者单位
(苏州大学计算机科学与技术学院,江苏苏州215006)
摘要:分析汇编程序实验课中碰到的若干问题,提出在VC++开发工具中嵌入汇编,在汇编程序中采用结构化程序方法、借助反汇编进一步学习高级语言、以实际应用激发学生学习兴趣3个教学实践,为汇编语言实验教学提供参考。
关键词 :汇编语言;程序设计;反汇编
文章编号:1672-5913(2015)15-0097-03
中图分类号:G642
基金项目:国家级计算机与信息技术实验教学中心资助项目( 50118003)。
第一作者简介:刁,男,实验师,研究方向为中文信息处理、机器学习,hjdiao@suda.edu.cn。
1 背景
汇编语言是一种面向机器的程序设计语言,在高等院校计算机专业的学科中,是一门软件与硬件相结合的基础课程。通过汇编语言,在硬件方面可以了解CPU、BIOS等编程结构,在软件方面可以理解操作系统、编译原理等底层操作。因此,学生学好汇编语言程序设计,不但能更好地掌握计算机工作原理、微机编程接口,还能进一步加深对操作系统和高级语言的理解。
2 汇编语言实验课程现状
(1)汇编语言编辑编译麻烦。学生早已习惯了C++/Java等高级语言的可视化集成式开发环境,而汇编实验还采用MASM、LINK等命令行编译连接工具,汇编程序书写时也不像高级语言那样具有上下文智能提示功能的编辑工具,对用惯了高级语言编程工具的学生来说,命令行编译连接工具给汇编实验入门带来一定的困难。
(2)汇编语言程序编写繁琐。汇编语言是面向机器的语言,汇编指令与机器指令之间存在着密切的关系,因此其语言表达能力和方式受限于机器的指令系统。书写汇编程序不仅需要在程序逻辑上花费精力,还要在内存分配、寻址和访问上投入甚多,相比于高级语言,其书写繁琐很多。就拿C语言中经典的“Hello World”程序做比较,在80×86汇编程序中,首先要定义存放字符串的数据段并为其字符串存储空间,然后定义堆栈段,再定义代码段以及汇编编译指令和代码指令,不但汇编语句比高级语言繁琐,程序结构也比高级语言冗长。
(3)汇编语言程序调试困难。汇编语言提供给程序员很大的访问机器资源的“能力”和程序设计的灵活性,学生在汇编程序中可以通过各种技巧使用资源。因此,在调试程序的时候,不仅要正确理解当前指令的含义,还要清楚指令中使用到的资源的状态以及指令执行完对资源的影响。汇编语言的调试工具也不像Java/C#等高级语言那样,有智能化的表达式监控窗口以及调试步骤回退功能。
(4)汇编语言结构条理性差。高级语言中任何程序逻辑都是由顺序、分支、循环3种结构组合而成,而且3种结构进行嵌套时都通过分层次缩进的方式进行对齐。然而在汇编程序中一方面没有定义这3种逻辑结构的规范,另一方面汇编程序书写是一行一条语句,语句与语句之间按行对齐,并不按嵌套缩进的方式对齐。因此,学生在写汇编程序时自由度比较高,分支和循环在汇编中只能通过各种转移指令实现,如果这些转移指令使用不规范,不但使程序的可读性很差,而且导致整个程序结构很凌乱,从而演变为“面条式”代码。
3 汇编实验改进实践
3.1 VC++开发工具中嵌入汇编语言
为了降低学生汇编实验入门的门槛,教师可以采用学生熟悉的VC++编程工具,以C语言嵌入汇编语句的方式先开展汇编实验。例如,设X和y均为16位无符号数,用加法指令实现求解表达式SX+Y值的程序。用C语言嵌入汇编语言的代码如图1所示。
在C语言中嵌入汇编语言比书写完整的汇编程序在结构上要简单很多,学生可以把重点放在汇编指令和寻址方式的学习上,通过这种实验方式也教会了学生用C语言和汇编语言编写混合程序的方法。等学生熟悉并掌握了完整的汇编语言书写格式后,再使用命令行的编译和连接工具进行汇编实验。
3.2 在汇编程序中采用结构化程序方法
随着汇编实验的开展,汇编实验越来越难,汇编程序逻辑也越来越复杂。如果这个时候学生不能养成良好的编程风格,势必会造成程序代码混乱、汇编实验效率低下的问题。因此,教师可以在汇编教学实验中引入高级语言中的结构化程序设计的方法,让学生严格按照结构化的套路设计程序,例如,写一个把字符串中的所有大写字母改成小写字母的程序。字符串大写转小写的流程如图2所示。
字符大写转小写流程的逻辑结构由while循环和在while循环中内嵌的一个单分支结构构成。因此,在编写上述程序时可以用汇编语句先构造while循环结构,再在while循环结构中嵌入单分支结构,其他的顺序性汇编代码只要填写到相应的结构中就可以了。两种结构的代码如图3所示,这样整个程序就可以按结构化方式进行设计了。这样不但提高了学生编写程序的效率,还进一步加强了学生对高级语言中的各种分支和循环结构在编译器层面的理解。
3.3 借助反汇编进一步学习高级语言
结构化汇编程序设计让学生初步了解了分支和循环等结构在编译器层面的实现。利用汇编或反汇编输出,学生们还可以进一步了解高级语言中一些特性在编译层面的实现。例如,关于C语言程序中局部静态和动态变量编译实现上的区别,事例C语言代码经汇编输出后如图4所示。
从图4中可以看出“a=3”转换为汇编语言后对变量a采用直接寻址,而“_?a@?l??main-@@9@4HA”这个字符串是在段名为“BBS”的数据段中定义的,代码如图5所示。
“b=4”转换为汇编语言后对变量b采用寄存器相对寻址,“b$”被定义为常量,其值为-4,而“ebp”则是程序调用栈基址指针。因此,从汇编后的代码中学生可以看出局部静态变量存放在数据段中,函数执行结束后其存储空间不会被回收,而局部动态变量则存放在程序调用栈中,函数执行结束后其存储空间则被调用栈调整出去。学生通过对高级语言汇编或反汇编输出,还能进一步了解关于一维数组的指针和一维数组首地址的指针以及类中普通成员函数和虚函数等编译层面的区别。
3.4 以实际应用激发学生学习兴趣
兴趣是学习最好的导师,教师要通过有应用价值的实例激发学生学习的兴趣,让学生了解汇编语言的用武之地,例如,可以向学生讲解硬件驱动、屏幕取词、单片机开发、缓冲区溢出攻击的原理;同时让学生写一些简单而力所能及的小程序,如基于280单片机的电子广告牌控制程序,这样一方面提高学生汇编实验的动手能力,另一方面也加深了学生对操作系统、微机接口等相关课程的理解。
4 结语
实践结果表明,与往届学生汇编实验情况对比,使用C语言中嵌入汇编代码方式的学生能很快上手开展汇编实验,明显降低了学生汇编实验入门的门槛,提高了学生汇编实验的效率;通过汇编程序中采用结构化程序的方法,学生能快速写出多重嵌套的汇编程序,能明显增强学生阅读和编写复杂汇编程序的能力;借助反汇编学习高级语言只能提高基础知识较好的学生各科知识点串联和贯通的程度,部分学生由于基础知识较差,融会贯通多科知识点还较困难;以实际应用激励学生也只能让少部分可以静下心来刻苦钻研的学生比较感兴趣,部分学生感觉题目综合性强,涉及知识点多,课后不认真钻研,很容易就会对实际应用失去兴趣。经过多方面尝试,教学虽然取得一定的效果,也暴露出一些不足,这些也成为我们汇编教学和实验中需继续思考和解决的问题。
参考文献:
[1]张洪业,宋人杰,周欣欣,“汇编语言”教学改革与实践[J].计算机教育,2009(21): 60-61.
[2]沈美明,温冬婵.IBM-PC汇编语言程序设计[M],北京:清华大学出版社,2001: 50-52.
关键词:学习共同体;汇编语言;学习模式
作者简介:胡静芳(1980-),女,江西南昌人,景德镇陶瓷学院信息工程学院,讲师;李步升(1978-),男,江西大余人,景德镇陶瓷学院信息工程学院,讲师。(江西 景德镇 333403)
基金项目:本文系2012年江西省省级教改基金项目的研究成果。
中图分类号:G642.0 文献标识码:A 文章编号:1007-0079(2013)32-0101-02
1999年高校大规模扩招以来,我国高等教育由精英教育阶段进入了大众化教育阶段,本科生的教育也从单一的专业教育转变为“广基础、窄专业”的教育。所以在教学大纲的多次修订下,专业课课时越来越少,学时的压缩导致课堂呈现一言堂式的教学模式,课堂上师生互动越来越少。随着学生人数的增加,大部分学校课程都是大班教学模式,教学内容的更新、学生人数的激增和专业课课时的压缩已经成为大众化教育下课堂教学的现实瓶颈。研究一种新的教学模式以解决当下日益增长的教学矛盾成了一个迫切的问题。
一、“学习共同体”概念
“学习共同体”(learning community)有时又被翻译为“学习社区”,顾名思义,在这个社区中应该有多重角色存在。在这里引入的“学习共同体”概念主要是针对在校学习的情况,所以该“学习共同体”是由在校大学生充当的学习者角色和由教师充当的助学者角色共同组成。这个社区是以完成课程学习任务为目标,同时要求学习者发挥主观能动性,与其他学习者互相沟通交流以及分享各种学习资源和学习心得,进而相互影响共同进步。它与传统的教学方式的主要区别就在于强调了学生与学生的沟通、学生与老师的互动,在学习中强调发挥集体的力量。据统计,学生从老师处学到的知识占个人知识总量的百分比不足20%,剩下的知识都是通过课外阅读和平时生活积累来获取的。所以在“学习共同体”的教学模式下,作为助学者的教师要能给学生一定的空间,让学生自己去思考和理解分析。师生之间、学生之间相互协作互动,共同完成知识获取的过程。
二、景德镇陶瓷学院“汇编语言程序设计”课程现状
“汇编语言程序设计”是高校计算机科学与技术专业本科生的一门必修专业基础课,是计算机操作系统、编译原理等其它核心课程的必要先修课,但它却是学生和老师都普遍反映难学难教的课程。第一,课程本身概念相对抽象,又和硬件底层密切相关,使得学生普遍反映难学、难理解。第二,这门课程的上机实验用的masm软件是DOS黑白界面,编译链接过程繁琐,实验结果也不直观,让很多学生对实验失去兴趣。第三,由于这是一门面向机器的语言,不直接面向应用系统进行开发,使很多同学都对汇编语言课程学习的必要性产生怀疑。
由于专业学时的压缩,景德镇陶瓷学院(以下简称“我校”)汇编语言课程学时压缩为48学时,其中理论课时为32学时,实验学时为16学时。教师要在这32学时内,面对80~100人的大班将汇编语言的几大知识体系讲清楚,只能采取教师全程讲述的教学模式,这样学生的参与度不高,兴趣也就不高了,教学质量也就无法得到保证。
三、“汇编语言程序设计”采用“学习共同体”教学模式的构建策略
“学习共同体”教学模式中强调了学习是学习者(大学生)主动建构内部心理表征的过程,所以学习需要学生之间、学生与老师之间的对话与合作,而学生理解获取知识的过程受到特定学习环境的影响。所以本课题准备从以下五个方面来构建课堂“学习共同体”:
1.课程教学目标设定
(1)培养浓厚的学习兴趣。在“学习共同体”的教学模式下,课堂教学的首要目标就是培养学生的学习兴趣。引导学生建立“学习不光是为了考试拿学位,更重要的是提升自身的能力”的观点。在汇编语言课程教学中首先要更正学生认为汇编语言已经过时的错误观念,使其认识到汇编语言尤其适用于软硬件紧密结合的环境,例如单片机、嵌入式等场合。在课堂上多介绍目前流行的嵌入式开发,让学生觉得汇编语言的前景还是光明的,引发学习兴趣。
本课题采用多种教学方法以提高学生的学习兴趣。首先将一些基本的验证性实验作为作业布置下去,从验证着手,让学生通过电脑验证结果,发掘汇编语言的奇妙性。其次对于一些抽象的概念联系生活实际来展开教学。最后对于实验环节,尽量给学生布置有明显实验结果的实验内容,这样学生能感觉到自己的努力有了效果,更增加了学习兴趣。
(2)根据个性差异和学习能力创建多个学习小组。在“学习共同体”的教学模式下,还应该注意学生之间的个人差异,要根据不同的个性和学习能力制订不同的目标层次。我校汇编语言课程开设在三年级上学期,经过前两年的学习,每个学生的能力各不相同。课程开始之初让学生自主组建学习小组,以5~6人为一单位,将以往的独立学习改为团队学习。实验课程中每一小组都有独立的实验小题目,小组成员共同完成任务,各小组之间进行竞争,实验成绩最终纳入最后的课程成绩考核。在组建学习小组的过程中,每个学生都会切实考虑自身的能力。比如能力强的同学希望能强强结合,这样实验中可以选择系数重的题目给自己加分,而能力稍弱的同学也希望能在小组竞争中取得加分。因此教师就必须给小组中的每一个学生分配好任务,使他们通过自己的课外查阅,与教师沟通,共同完成分配任务。这样就极大地促进了学生学习的主观能动性,主动努力去完成自己的学习目标。
2.自主学习环境
在基于“学习共同体”的教学模式中,教师应更加注重学生的课程参与度。要做到学生和教师之间良好互动,就要求学生事先熟悉课本知识,在课前完成自主学习。但是大学生活丰富多彩,对于大多数的学生来说,保证提前预习相关内容存在一定难度。所以对于“学习共同体”的助学者——教师就要帮助学习者实现自我管理,创建自主学习环境。目前已经在学校的THEOL网络教学综合平台上进行了“汇编语言课程设计”课程的精品课程建设,在这个平台上把该课程的教学大纲、授课计划以及授课教案都挂在上面。这样学生就能很清楚地知道每节课要讲什么,哪些是重点,哪些是难点,可以有的放矢地进行预习。教师把相关课程的讲课录像挂在网上,学生如果想提前预习还可以进行网络听课。每节课的作业也都被挂在这个系统上,所有的学生都必须进入该系统进行作业。以上做法都保证了学生的自主学习环境。
3.课堂教学安排
相比传统的一言堂讲授式教学模式,基于“学习共同体”教学模式就更应该注重课堂教学形式的多样化。首先根据教学内容不同阶段特点设计不同的教学方式。最初接触汇编语言,应该先给学生建立基本的汇编概念,比如汇编中的段、汇编中的寻址等。当学生对概念熟悉到一定程度的时候,就要重点让他们利用所学知识去解决实际的问题了。在引出下一个知识点时,教师应更加注重方式方法。笔者的做法是在每一个知识点结束的时候都设计好一个问题,然后让学生积极发言,与学生一起研究探索解决问题的方案,进而引入下一个知识点,这样学生在研究讨论的过程中掌握了新的知识点。
4.教学过程监督与评价策略
大班教学不可能掌握每一个学习者的学习进度,因此在评价中应设计合理的评价体系。本课题组在教学过程中采用考虑综合能力和课程参与度的方式进行综合评价,采用平时和考试3:7的方式进行考核。考试成绩一考定分数,但是这只占考核成绩的70%。剩下的30%就由平时的考勤和上课参与度以及分组实验的成绩来综合评价。考勤也不是简单点名,教师会不定期在课堂上留下小作业,让学生当场完成并上交,这样既可以作为点名依据,也能看出学生是否掌握课堂内容,争取对所有的学生都做到公平公正。
四、总结
“学习共同体”这是一种区别于原来以教师“教”为主的全新的教学模式,但对它的研究毕竟有限,所以在上文中只列出了几点构建策略。在今后的教学研究中将采取更多的教学方法,来归纳出一套切实可行的教学方法,以适应新的教学模式。本课题在深入研究已有的“学习共同体”理论基础上,用抽象的汇编语言程序设计作为载体,从课堂教学出发,对教学目标、教学安排、教学评价等多方面做了具体的研究设计,对解决当前课时少、学生人数多的大班教学问题是一个重要的探索。目前这种教学模式仅仅被应用在汇编语言课程设计这一门课上,如果成功,对其它后继专业课的学习都将起到推动作用。
参考文献:
[1]辛源,冒荣.大学学习共同体:创新学习视角下的解读[J].江苏高教,2008,(2).
[2]南旭光,罗慧英,张燕.基于网络学习共同体的任务驱动型教学模式分析——以开放教育工商管理模拟实验为例[J].现代教育技术,
2009,19(12):68-71.
关键词:汇编语言;排序;冒泡排序
中图分类号:TP313 文献标识码:A文章编号:1007-9599 (2011) 16-0000-01
Sort Data with Assembly Language
Ren Hong,Wang Yunxia
(Information Technology Department of Xuanhua Science and Technology College,Zhangjiakou075100,China)
Abstract:The assembly language is a computer can provide to users the fastest and most effective use of language,is able to use all of your computer hardware features and can only directly control the hardware language This article discusses how to use assembly language in computer programming sort important operation.
Keywords:Assembly language;Sort;Bubble Sort
一、引言
排序是计算机程序设计中的一种重要运算,其功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。经过排序的数据可采用优化的算法提高程序的执行效率;增加输出数据的清晰度,便于信息检索;同时经过排序后的数据往往还隐含一些特殊的含义,为用户提供有价值的信息。
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而,对于程序的空间和时间要求很高的场合,汇编语言是必不可少的。本文将主要讨论如何利用汇编语言实现数据的排序功能。
二、算法分析
设计要求:编写一个排序程序,实现10个数据的从小到大的升序排列。
程序算法:气泡排序是一种常用的排序方法,它的规则是:表中相邻两元素一一比较,并把大值元素向下交换,直至表尾(大值元素落底),此时,称为一次冒泡(程序中一次大循环)。以后重复冒泡排序,直至最小元素冒到表顶为止。若在一次冒泡排序中没有出现两元素交换(设标志为0),则停止排序。
具体算法:该程序采用双重循环结构,其中DL用来设置外循环次数,CX用来设置内循环次数,DH设为交换标志。其中内部循环L1主要完成一次冒泡过程,即对相邻两个元素进行比较。外循环L2主要用来控制整个冒泡的次数,即n-1次。
算法描述如下:
datasegment
memdb 10,9,8,7,6,5,4,3,2,1
len dw$-mem
dataends
codesegment
mainproc far
assume cs:code,ds:data
start:push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov dh,1
mov dl,len
Lo: ordh,dh
JzL3
mov dh,0
mov cx,len
sub cx,bx
mov si,offsetmem
L1:mov al,[si]
Incsi
cmp al,[si]
jbeL2
xchg al,[si]
mov [si-1],al
mov dh,1
L2:loop L1
incbx
decdl
jnz L0
L3: ret
code ends
endstart
三、算法分析
空间效率:冒牌法排序仅用了一个辅助单元,即空间复杂度为O(1)。
时间效率:
待排元素状态 “比较”次数 “移动”次数
正序 n-1 0
逆序 n(n-1)/2 3n(n-1)/2
若待排序元素处于随机状态,则冒泡法排序的平均时间复杂度为O(n2)。
稳定性:冒泡排序是一种稳定排序方法。
四、结束语
本文主要介绍了采用汇编语言实现数据排序功能的具体方法.排序是计算机程序设计中的一种重要运算,排序还有很多方法,例如选择排序,基数排序,快速排序等等。本文主要介绍了常用的冒泡排序法,希望以此为基础能够写出其他排序方法的汇报语言程序。此外,排序算法同样可以采用C语言来实现,而且同学们在大一时就已经学习过C语言。因此在教学过程中,还可以采用类比法进行讲授,激发学生的学习兴趣。
参考文献:
[1]沈美明,温冬婵.IBM-PC汇编语言程序设计(第2版)[M].清华大学出版社