汇编语言程序设计范文

时间:2023-10-24 18:08:26

汇编语言程序设计

汇编语言程序设计篇1

关键词:汇编语言;系统的知识结构;教学手段;实践教学

中图分类号: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.

汇编语言程序设计篇2

【关键词】FORTH 汇编语言 中断程序

1 引言

汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列,所以汇编语言一直是计算机学科必学的一门基础课程。通过这门课的学习既能获得底层编程的体验,又能深刻理解机器运行程序的机理。FORTH是一种与众不同的计算机程序设计语言,采用自底向上的构造方式,用汇编语言编写核心单词,实现内部数据结构和解释/编译机制,构造最小的系统,然后将该系统运行在宿主机上,进而编译的其它高层单词,形成一个完整的系统。

本文是在研究了FORTH的自生成技术的基础上,自定义了一套汇编语言语法,并且构造出将自定义汇编语言转换为CPU机器码的编译器,讲解了自定义汇编语言的基本使用方法,最后以中断程序为例,介绍了自定义FORTH汇编程序的实现方式。

2 FORTH汇编语言和编译器的实现方法

基本的FORTH平台内不含产生机器码的汇编语言编译器,只是将一个用FORTH语言写的汇编语言编译器的源代码作为附件。一般我们可以使用这个编译器,但也可以自己按照自己的习惯构造自己的语法和编译器。

实现编译器,首先要制订语言规范。由于FORTH汇编语言并没有权威的规范,甚至有些要开发的目标芯片就还没有汇编语言标准可以借鉴,因此程序开发者完全可以编写自己的编译器和创造自己的规范。FORTH汇编语言的语法规范是模仿常用的汇编语言,只是将表达式写成“逆波兰”形式,即将操作符写在操作数后面。以8086汇编为例,将AX减去BX的内容,结果在AX中,标准的汇编语言为:SUB AX, BX ,在FORTH汇编语言规范中可以模仿标准的汇编语言规定为:AX, BX SUB,也可以采用这种写法:BX AX SUB,,不仅逗号移到了操作数那里,而且目的操作数也移到了右面。虽然FORTH汇编语言规范存在这种任意性,但如果存在标准的汇编语言,除了将操作符写在右面,还是尽量保持标准的风格,这样容易和别人交流。

实现FORTH汇编编译器,主要利用FORTH字“C,”、“,”和“Here”,它们分别是向程序区依次放一个字节的二进制指令、两个字节的二进制指令和给出存放下一个指令的地址。

以8086为例,无操作数的中断返回指令IRET,可以这样实现:

语法: IRET

实现: : IRET CF C, ; //将IRET的机器码CF一个字节放到当前的指令流中

单操作数的跳转指令JMP,可以这样实现:

语法: LLLL JMP //LLLL定义了转跳的地址

实现: : JMP E8 C, ,;

同样上面实现的FORTH含义是将JPM的机器码E8一个字节放到当前的指令流中,然后再把已经在堆栈中的要跳转的地址作为16位偏移放到机器码E8之后,形成完整的跳转指令。

通常每个FORTH软件平台都有这个平台的汇编语言规范和编译器,但是如果要生成异构的FORTH系统,重新制定新CPU的汇编语言规范和编译器就是必须要完成的任务。

2.1目标代码的存取

由于一般FORTH目标系统的核心规模较小,16位的系统不超过64KB,32位的系统也用不完内存空间,因此可以直接在宿主机FORTH系统管理的内存中划出一块高内存区域用于目标代码的存取。假如P!和P@是原内存的写入和读取字,目标代码区域的起点是C000,则目标代码的存取字可以简单的定义为下面的算法:

C000 CONSTANT Origin

// 定义常数 Origin,它的值是目标代码区域的起点

: ! Origin + P! ; : @ Origin + P@ ; // 定义目标区的数据存取字

同样也可以产生按字节的存取字C!和C@。

2.2 机器码写入

汇编语言所产生目标机的机器码是顺序存放的,其中跳转指令是代码的当前位置参考计算的,因此可以设置一个当前代码地址指针CP实现:

Variable CP : Here CP @ ; // Here字给出下一个机器码存放的地址

: C, Here C! CP @ 1+ CP ! ; // 放一个字节的机器码到目标区

: , Here ! CP @ 2+ CP ! ; // 放一个16位字的机器码到目标区

有了这些FORTH字,可以不用助记符和汇编,直接把二进制代码一个字节一个字节地生成目标码。

2.3 向前跳转地址

机器码中最重要的指令就是根据条件进行转移的指令。由于FORTH语言的工作过程是按照输入流一个字、一个字顺序解释执行的,因此向前转移时目的地址是已知的,实现起来比较简单:以目标地址为值定义一个常数,然后在生成转移指令时引用它。

汇编语言程序设计篇3

关键词 汇编语言;对比教学;板书画图;创设情境

中图分类号:G642.0 文献标识码:B 文章编号:1671-489X(2012)03-0046-02

Teaching Reform and Practice in the Course of Assembly Language//Tao Xueli1, Guo Fengying2

Abstract To improve the teaching effectiveness of the assembly language programming course, and to make student to better understand and master the course contents, Base on years of teaching experience and teaching activities ,the author summarizes and discusses the teaching methods and means such as contrast teaching, drawing for simplifying difficulties and creating situation used in the teaching.

Key words assembly language; contrast teaching; blackboard writing drawing; creating situation

Author’s address

1 College of Computer and Information Technology, Henna Normal University, Xinxiang, Henan, China 453007

2 Department of Computer Information Center, Beijing University of Chinese Medicine, Beijing, China 100029

汇编语言程序设计是高校计算机专业的专业基础课程之一,它是计算机组成原理、计算体系结构等计算机硬件核心系列课程的必要先修课。汇编语言指令可以直接有效地控制计算机硬件,产生高效的代码,在很多情况下是高级语言无可替代的。但是汇编语言指令较多,编程和调试过程复杂,实用性和可见性差,导致学生没有兴趣,因而教学效果不理想。如何改善教学效果,提高教学质量,是每一位相关专业任课教师应该研究的问题。笔者根据多年来从事汇编语言程序设计课程教学的实践,谈一下自己的经验和体会。

1 采用合适的教学方法

教学方法是为完成教学任务、实现教学目标服务的,合理的教学方法可以使教学的基本要素在教学活动中充分发挥各自作用和功能,从而达到预期的教学目标和教学效果。

1.1 对比教学法[1]

汇编语言程序设计一般开设在大学二年级,在学习了一门高级语言(如C语言)程序设计课程之后。因此,在教学过程中,可以充分运用对比教学法,将汇编语言与高级语言相通的知识点进行对比,利用学生熟悉的知识,帮助学生理解新的知识,可以达到事半功倍的教学效果。

1.2 板书画图,直观演示,简化难点

在汇编语言课程中,操作数的寻址方式是学生学习指令和后续内容的基础,是全书的重点也是难点。在介绍操作数有效地址的4种组成部分(位移量、基址、变址、比例因子[2])时,可以通过一个图示举例进行讲解,降低难度。

假设数据段有一个字节数组,要用指令访问数组中的任意一个元素。数据定义如下:

X DB ‘ABCDEFJHIJKLMNOPQRSTUVWXYZ’

此处在黑板上画图,可以直观地演示数据在存储器存储的情况以及操作数的寻址方式(图1)。X是数组在存储器中的首地址,是一个符号地址。从图1中可以看出,通过数组首地址和某个元素相对于第一个元素的位移量,就可以访问到这个元素。

1)例如,在8086/8088处理器下,要将字符“F”存入AL寄存器,可以用下面的几种方式实现。

①MOV AL, [X+5]

②通常情况下,可以将数组的首地址存入一个基址寄存器(BX或者BP),指令为:

MOV AL , [BX+5]

③可以将位移量用一个变址寄存器(SI或DI)表示,通过修改SI/DI的值,便可以访问数组中其他的字符,指令为:

MOV AL , [BX+SI]]

2)带比例因子的寻址方式是386及其后继机型引入的操作数寻址方式,适合用来寻址多字节数据数组中的元素。此时,可以将图1所示的数据看成3个双字(4字节)数组(图2)给学生讲解。如要访问第三个双字,则可采用指令:

MOV AL, [BX+SI*4]

这样只需要知道访问第几个元素,修改SI的值即可,不需要计算被访问元素在数组中的位移量,简化了思考和计算。特别是在4字节数组或者10字节数组中,比例因子显得更为有用,使用起来更为方便。

通过此处的讲解,不仅降低学生理解基本概念的难度,而且联系到汇编语言中变量的定义及存储空间的分配,帮助学生熟悉指令与硬件知识的结合,建立先后知识点间的关联。

1.3 通过创设情景,帮助学生理解指令功能

在介绍一些不容易理解的指令时,可以通过创设简单的应用情景介绍指令。例如,可以用一个给字符串加密的应用情景,介绍XLAT指令的功能及应用。

假设数字加密规则为:0~9,分别对应a~j,即如果从键盘输入“3”,则显示出“d”。数据定义如下:

x db ‘abcdefghij’

板书画出数据在存储器中的存放情况(图3)。从键盘输入的数字字符保存在AL寄存器中,实现加密的指令序列为:

lea bx, x

sub al, 30h

xlat

如果执行指令之前,AL的内容为字符“3”,则指令序列执行过后,AL的内容就为“d”。

课堂上,可以将这个简单应用编写成一个具有输入和输出功能的完整的程序,给学生演示。这样既可以讲解指令的应用,也可以让学生熟悉汇编语言源程序的格式及开发过程;也可以将这个程序设计成一个功能可以逐步扩充的系统案例[3-4],通过不断扩展程序的功能,循序渐进介绍程序设计,这里不再详述。

2 强化实验教学

“实践出真知”,上机实验是教学的一个重要环节,也是学习和掌握汇编语言程序设计的最有效方法。针对学生学习的进度和知识基础,合理安排实验内容。为了督促学生上机实验,增加实验成绩在期末考核中的比例。平时实验课上,通过向学生提问题,考查学生掌握知识的情况,这是对教学的一个反馈,可以作为今后提高教学质量、改善教学效果的参考。

3 总结

本文是对笔者多年教学经验的总结,教学实践证明,这些方法与手段在一定程度上降低了学习的难度,提高了学生对本课程学习的积极性,改善了教学效果。笔者深知教学相长的道理,有些方法并不是一劳永逸的,要因材施教。因此,要想取得更好的教学效果,还需要相关专业教师的不断努力,进行更多的探索与交流。

参考文献

[1]熊小兵.“汇编语言程序设计”的比较教学法[J].计算机教育,2010(3):147-149.

[2]沈美明,温冬婵.IBM-PC汇编语言程序设计[M].2版.北京:清华大学出版社,2007.

[3]何立新,王昆仑,等.《汇编语言程序设计》教学方法的探讨[J].电脑知识与技术,2011,7(10):2459-2462.

汇编语言程序设计篇4

关键词:计算机;汇编语言;系统控制;应用研究

中图分类号:TP313 文献标识码:A 文章编号:1007-9599 (2012) 11-0000-02

汇编语言是一种面向机器的特殊程序设计语言,计算机汇编语言是指通过汇编语言程序设计实现计算机的硬件系统控制的指令的一种程序构成。利用计算机汇编语言进行编程设计,不仅可以有效提高工作效率,还可以节省程序空间,实现最大利用。本文将主要对计算机汇编语言的相关理论及其在实践中的具体应用进行研究分析。

一、计算机汇编语言的概念

在计算机的系统操作过程中,主要是通过计算机硬件设备对计算机的软件发出工作命令完成的。计算机汇编语言是通过汇编语言程序的设计,来操控计算机的某一程序系统,从而实现汇编语言程序对计算机的控制。计算机汇编语言的这一操作控制过程也正好符合计算机主机中中央处理器的工作原理和工作结构。控制命令是由控制编码与操作数构成,操作数的处理功能和中央处理器能够拥有的功能是由控制编码来控制实现,中央处理器是控制命令得以执行的根本,操作数能够为中央处理器执行控制命令提供处理对象。

中央处理器执行系统所发出的控制命令,从而的实现命令完成。中央处理器实现这一过程主要依据其强大的功能和结构特性。在计算机的中央处理器中,中央处理器的控制器部分首先对其它系统所发出的控制信息中的操作码进行编译、执行等工作,然后再通过已经接收、编译的信息,发出控制命令,从而帮助整个计算机系统完成运行工作;中央处理器的运算器部分则是实行对控制器所接收到的数据信息进行高速运算功能;另外,中央处理器中还有一个寄存器的部分,主要是用来储存数据的,寄存器的功能不同,在处理数据和执行命令时所发挥出的作用也就不同。

在计算机的实际应用中,汇编语言在对计算机软、硬件的操控和工作效率上的优点是其它编程语言不能够实现的。在通过计算机硬件设施来控制计算机的软件系统上,很多时候都只有汇编语言可以满足;在利用汇编语言进行编程来完成工作目标上,汇编语言不仅能够快速的完成工作目标,而且整个目标程序的设置也是最简短的,在空间和时间上都具有无可比拟的优越性。这里可以通过一个对比显现出来,假设现在通过汇编语言和不是采用汇编语言的两种方法来计算目标程序,通过两个操作运算过程就可以明显看出,不采用语言汇编计算方法的计算过程,在运算中不仅花费的时间要远远高于运用汇编语言来计算的方法,而且冗杂繁芜的计算过程占用了计算机的大部分空间,而运用语言汇编计算方法的计算过程只占用了一少部分空间,孰优孰劣,结果不言而喻。

二、汇编语言与高级语言、DELPHI语言、C语言的结合运用

(一)汇编语言与高级语言的结合运用

在计算机的实际程序应用中,一般程序员在进行程序编写时大部分是运用高级语言来完成,而在整个程序的重要部分,或者说在实际中运行要求高、运行次数又较多而且可以直接与计算机硬件设施相关联的部分,其程序的编写都是运用汇编语言来实现的。采取以上的方法,是因为在实际操作中虽然汇编语言拥有工作速度快,工作效率高,占用空间小的优势,但它同时也要求对计算机内存装置有相当的熟悉度,在进行程序编制和读写时也存在有一定的难度,在计算机程序编写的实践应用中有一定的不便利性;而高级语言除了占用计算机存放空间比较多,程序编写的代码较长使计算机运行速度较慢外,高级语言本身也存在有丰富的函数和数据信息、齐全的运算符、可移植性好、易读易写等优点。这样将汇编语言与高级语言结合在一起运用到计算机程序编写实践中,不仅可以取长补短实现优势互补,提高工作效率,还节省了计算机的空间占有量。

另外,在计算机程序编写的实践应用中,汇编语言除了与高级语言可以相互结合使用实现优势互补外,汇编语言和DELPHI语言、C语言之间也可以结合使用,以实现计算机程序编写过程的最大高效便利化。

(二)汇编语言与DELPHI语言的结合运用

汇编语言与DELPHI语言在进行计算机程序编写是相互结合使用,主要是在DELPHI语言编写的程序中运用一定的数据信息将DELPHI语言程序融入到汇编语言编写程序中去,实现两种语言程序相互结合。

汇编语言编写程序与DELPHI语言编写程序之间在进行参数信息的相互传达时,可以由DELPHI语言编写程序向汇编语言程序进行传递,也可以由汇编语言程序向DELPHI语言编写程序进行传递。

DELPHI语言编写程序向汇编语言程序进行参数传递时,首先在DELPHI语言编写程序选出汇编语言程序中或者编写过程中的正确参数信息,然后在对这些参数信息进行汇编过程中直接运用其变量参数数据,其中存在的所运用变量参数之间语法不相同情况是由于变量参数在被传送的过程中,相互传递数据信息其实是地址。

汇编语言程序向DELPHI语言编写程序进行参数传递时,对汇编语言程序中的固定数据信息参数的传递有一定的特殊要求,汇编语言程序向DELPHI语言编写程序的参数传递过程则是运用指针的方式进行数据值的传递的。

(三)汇编语言与DELPHI语言的结合运用

汇编语言与C语言的相互结合使用,既可以通过运用汇编语言和C语言分别先编写好一套程序,然后将两种程序相互结合起来,同时还可以运用关键字将汇编语言的程序穿插到C语言程序中去这两种方式来实现。两种结合方式实现的具体过程可如下所示。

汇编语言程序设计篇5

(黑龙江大学,黑龙江 哈尔滨150080)

摘 要:“计算机组成原理实验”是《计算机组成原理》理论课程的一个重要辅助和补充,在开设实验课程过程中,我们发现实验系统自带的汇编语言指令系统与学生所学的8086汇编语言指令系统不兼容,影响了实验效果,因此课程组教师开发了一款辅助软件,通过该软件对两种汇编语言进行转换,提高了学生的学习效率,取得了较好的效果。

关键词:计算机组成原理实验;TH-union+教学实验系统;汇编语言转换器

中图分类号:G642.3 文献标识码:A 文章编号:1002-4107(2015)08-0023-02

收稿日期:2015-01-13

作者简介:惠丽(1963—),女,河北抚宁人,黑龙江大学计算机科学技术学院院党委书记,副教授,主要从事嵌入式并行计算及计算机系统结构研究。

基金项目:2014年黑龙江大学教育教学改革重点项目“计算机硬件系列课程实验教学改革的研究与实践”;2014年黑龙江省新世纪高等教育改革工程项目“计算机硬件系列课程实验教学改革的研究与实践”

一、引言

《计算机组成原理》是计算机科学与技术专业、软件工程专业的专业骨干课程,该课程围绕着构成计算机的五大部件全面详细的阐述了计算机的组成和各部件的工作原理,并引申出各部件的设计实现方法。

为了能够让学生对《计算机组成原理》这门课程有一个感性的理解,我院于2009年购置了由清华大学计算机学院研制开发的TH-union+教学实验系统,将其应用于《计算机组成原理》实验课程。TH-union+教学实验系统本身就是一台简单的计算机,该实验系统不仅能够支持传统的硬件实验,而且创造性的在实验系统中增加了汇编语言指令系统,使得很多传统硬件实验在连接了硬件电路之后,不再使用手动开关向存储器输入指令和数据的方式验证电路的正确性,而是改用通过输入汇编语言程序对电路的正确性进行验证,大大提高了工作效率,也能够更好的促进学生对理论知识的消化和理解。因此在实验课程的设置中,全体实验大致可以分成两个部分,第一部分是结合TH-union+教学实验系统现有的汇编语言编写简单的应用程序,以达到熟悉掌握实验系统各部分硬件的目的。第二部分是在第一部分的基础上由学生利用VHDL语言设计一个8位的CPU,并利用实验系统的汇编语言进行编程,以验证CPU设计的正确性。在整个实验教学过程中,利用实验系统的汇编语言编程是实验的一个重要环节,但在教学过程中,我们发现,由于学生初次接触该实验系统,对它的汇编语言指令不熟悉,常常和已经学过的8086汇编语言指令混淆,导致利用实验系统的汇编语言编程的能力不足,对后续实验有一定的影响,因此我们课程组全体教师就有了设计一个汇编语言转换器的想法。

二、对TH-union+教学实验系统的改进

TH-union+教学实验系统是一个优秀的《计算机组成原理》课程实验教学平台,它最初的受益者是清华大学计算机学院的学生,而我们黑龙江大学计算机学院软件学院的学生与清华大学计算机学院的学生相比,动手能力、综合技能还存在一定的差距,正是由于我院学生的这些差距,使我们必须对TH-union+教学实验系统进行改进。

TH-union+教学实验系统上有一个汇编语言,它和我们学过的8086汇编语言没有任何关系。也就是说同学们要做计算机组成原理实验就要再学一次汇编语言。这个汇编语言一共有48条指令,只有4种寻址方式,有16个寄存器,……,一切都变了。因此我们必须用一个方法使学生快速学会新的汇编语言,并利用它进行程序设计。

TH-union+教学实验系统的设计者为了使实验系统更接近真实的计算机在指令系统中设计了与输入输出操作有关的指令,使得程序在设计过程中可以进行输入输出操作。但是遗憾的是,学生在学习8086汇编语言时,所有的输入输出操作都是由DOS系统功能调用函数实现,没有涉及到真正的底层硬件输入输出操作,现在在实验系统上首次自己编写输入输出函数,对学生具有一定的挑战性,这是实验系统的第二点需要改进的地方。

三、解决方法

基于以上两点,课程组全体教师决定自行开发一款辅助软件,用来实现实验系统的汇编语言程序与8086汇编语言程序相互转换,进而指导辅助学生快速掌握TH-union+教学实验系统的汇编语言和相关知识。

本辅助软件是利用windows下linux模拟环境的flex工具和gcc编写完成的。flex是linux下的一个用来开发编译器的工具,主要用于词法分析器的设计开发。由于本辅助软件需要对两种汇编语言的语句进行转换,其过程包括大量的词法分析工作,因此我们选用flex工具,以缩短开发周期。

本辅助软件由两个可执行文件、两个示例程序和一个说明文件构成,两个可执行文件暂时定名为my和your。my的功能是把TH-union+教学实验系统的汇编语言程序转换成8086汇编语言程序。your的功能是把8086汇编语言程序转换成TH-union+教学实验系统的汇编语言程序。

由于指令格式的原因,实验系统的汇编语言指令操作数的寻址方式全部隐藏在操作码中,也就是说在指令译码的时候,当指令译码器分析出指令功能的同时,也知道了指令中各操作数的寻址方式。这就使得实验系统无论在指令数量还是在寻址方式方面都比8086汇编语言指令系统简单,我们把实验系统的汇编语言看成是8086汇编指令系统的子集。当my程序扫描到实验系统汇编语言指令时,根据操作码就可以判断出它对应的8086汇编指令是什么,寻址方式是什么,然后转换成8086汇编语言指令即可。通过my对两种汇编语言相互转换,提示学生注意两种汇编语言的相同点,以便学生在阅读实验系统汇编程序时快速理解它的编程目的。

your的功能是把8086汇编语言程序转换成实验系统的汇编语言程序。在具体操作中,由于8086汇编语言比实验系统的汇编语言复杂,所以需要做一些简单的限制,以便程序转换。

第一,我们约定your只能转换正确的8086汇编语言程序。辅助软件的设计目的之一是要学生在已经掌握8086汇编语言的基础上,不需要再额外学习其他汇编语言就可以在实验系统上编写程序,因此我们假设学生能够利用8086汇编语言在通用计算机上实现实验程序的设计。为了便于学生利用8086汇编语言设计程序,我们在软件包中增加了一个示例程序2.asm,它本身也是一个8086汇编语言程序框架,学生利用这个框架编程效率会更高。为了保证程序的正确性,在软件中附带了Boland公司的Turbo Assembler汇编语言编译器(简称tasm),学生编写的汇编语言可以用tasm编译成可执行文件,以保证程序的正确性。

第二,我们要对8086汇编语言程序做简单的语法分析。由于实验系统汇编指令的操作数寻址方式都是固定的,而8086汇编语言的指令系统操作数寻址方式是不固定的,这就使我们不得不对8086汇编语言程序进行简单的语法分析。

具体操作如下:转换程序your扫描到一条指令首先对指令的操作码部分进行分析,判断该指令是否可以转换成TH-union+教学实验系统的汇编语言指令,如果可以就在指定变量中设置一个指令对应的数值,如果不能转换就输出一行字符串,提示用户你的程序中使用了不可转换的8086汇编语言指令,在转换过程中把这条指令忽略。8086汇编语言指令系统是一个复杂指令系统,指令存在大量的功能冗余,因此辅助软件采用忽略指令的方式,在这里也可以采用发现不可转换的指令就发出错误提示,然后强行结束转换的方式,但课程组老师考虑到每个人的编程习惯不同,所以采用前者比较温和的提示方式。

然后是对操作数寻址方式的判断,同样根据不同的寻址方式在指定变量中设置对应的数值,如果是实验平台支持的寻址方式,就直接转换成相应的实验系统汇编语言指令,如果不是实验平台支持的寻址方式,系统将提示出现错误,并强行结束转换。在这一过程中最麻烦的是一些寻址方式的转换。例如在8086汇编语言指令系统中,双操作数指令允许目的操作数采用寄存器寻址方式,源操作数采用立即寻址方式。例如:add ax,10,但是实验系统的汇编语言规定双操作数指令的两个操作数都采用寄存器寻址方式,只有MVRD指令支持立即寻址,因此一旦发现上述指令,转换程序将产生下面四条指令,以保证程序的正确性。

PUSHR15

MVRD R15,10

ADDR0,R15

POPR15

第三,我们要对输入输出指令单独处理。由于TH-union+教学实验系统有自己的输入输出指令,这些指令与8086汇编语言的输入输出指令完全不同,为了简化问题,便于学生们迅速掌握串口操作,我们约定在编写与输入输出操作有关的程序时,必须采用事先设计的宏。首先我们在示例程序2.asm中利用DOS系统功能的7号子功能和2号子功能实现基本的输入输出宏。在编程过程中凡是遇到输入输出操作都调用这两个宏。然后我们把这两个宏名加入到转换程序中,当转换程序扫描到这两个宏名将自动生成对应的实验系统汇编指令。在程序设计过程中,实验系统的输入输出操作采用查询方式,因此每次生成的实验系统汇编程序里面一定要带一个有条件跳转指令和标号,在具体操作时,很可能出现多次使用输入输出操作,每次产生的标号都要不同,所以程序中必须对生成标号进行处理,这是此部分的设计重点。

本辅助软件首次应用于2012级软件学院的实验教学中,提高了教学效率,取得较好的教学效果,同时也有许多热心的同学对辅助软件提出了宝贵的意见,课程组全体教师将根据师生的反馈意见进一步完善辅助软件,为以后的实验教学提供更多更好的支持。

参考文献:

[1]王诚,刘卫东,宋佳兴.计算机组成与设计:第三版[M].北京:清华大学出版社,2008:7.

[2]王诚,刘卫东,宋佳兴.计算机组成与设计实验指导:第三版[M].北京:清华大学出版社,2008:8.

汇编语言程序设计篇6

论文摘要:本文首先分析了当前汇编语言的教学现状及实验环节的重要作用,然后阐述了汇编语言实验教学的设计思路,给出了较详细具体的实验内容安排。

1 汇编语言及其教学现状

汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是唯一能够利用计算机所有硬件特性并能直接控制硬件的语言。对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的,至于很多需要直接控制硬件的操作场合则更是非用汇编语言不可。用汇编语言编写的程序的执行速度通常比高级语言(如C/C++)快很多,甚至成百上千倍。相应的,汇编语言的缺点就是使用者需要对硬件有更深入的了解,编程效率不高。

“汇编语言程序设计”课程的任务是为“计算机组成原理”、“接口”、“操作系统”等后继课程提供必要的基础知识,它对训练学生掌握与硬件相关的程序设计技术、从事自主版权计算机芯片和系统软件的开发、信息安全、过程控制等方面,均有十分重要的作用。无论计算机技术如何发展,机器语言、汇编语言的计算机程序设计语言体系仍然是计算机技术的基础,也是计算机技术的重要知识体系之一。不能了解和熟悉汇编语言,不仅将导致学生知识结构的缺乏,也可能导致学生认知水平的降低,开发手段的贫乏。

然而,初学者往往感到它难学、难懂、抽象,更难以掌握。教师开展教学困难,学生学习和掌握困难,教学效果差,以致会影响后继课程的学习。

2 实验环节在汇编语言教学中的作用

在计算机相关专业的教学领域,实验和实训教学是培养大学生学习能力、实践能力、思考能力、创新能力的重要环节和有效途径。显然,学生在学习汇编语言这门课程中产生的困难,首先来自于他们对所学知识缺乏必要的感性认识,没有充分的实验。

计算机在很多方面不同于其他学科,尤其是与硬件有密切关系的课程。由于汇编语言课程具有硬件操作的密切相关性,实验环节在整个教学活动中就占据了举足轻重的地位.汇编语言的实验对培养学生的动手能力和学习兴趣,提高学生阅读、编辑和调试程序的能力,有着不可替代的重要作用。学生通过实验课深入了解CPU、存储器、接口及外部设备的工作特性,对数据在计算机中的表达和传送产生感性认识。在实验中对汇编语言达到更好的理解、掌握,从感性认识上升到理论认识。

3 实验教学的设计思路

由于各高校办学类型不同、培养目标不同、所在地及周边地区社会需求不同,计算机及其相关专业的教学内容也应有所不同。对于非研究型院校的相关专业,对“汇编语言”的教学可以集中在适度的理论知识和充分的操作实践上。“适度”体现在理论课的讲授中内容不必展开太宽,“充分”体现在实验课的安排上要充分。

尽管学生学习汇编语言有着不少困难,但“兴趣是最好的老师”,要激发学生的学习兴趣。有了兴趣,他就能积极地思考,大胆地探索,变被动接受为主动思考。因此,汇编语言的实验教学总的思路就是要以激发学生兴趣为主线,尽量设计趣味性的实验内容,充分发挥学生的积极性和创造性。

很多学生不重视实验课的主要原因之一是认为实验课的好坏对学习成绩影响不大,目前多数院校的学习成绩评定,仅以期末一张考试卷的好坏而定,这使很多学生重理论、轻实验。因此,应认真记载每个学生在实验课上的实际操作能力和编程能力,并以优、良、中、差进行仔细考核,开学初就明确告诉学生这种考核制度的存在,使之开始就没有怠慢的情绪,从思想上重视实验。

实验教学的安排按照由浅入深、循序渐进的方式进行,合理选择实验内容,尽量避免过多过杂,内容选择注意举一反三,即以启发思维为主,对设计型、综合型实验只要能完成预定实验目标,不苛求实验过程与步骤的统一。实验所演算的汇编语言程序应具备好的观测效果,能直接体现计算机的操作特点,教师演示和学生实践穿行,并且注意重复对比,让学生发现自己操作的失误,加深对汇编语言操作规律的理解。

实验教师在实验中主要起到引导的作用,实验前的讲解以重点、难点和注意事项为主,不应面面俱到,可以先给出一些问题,让学生带着问题去做、去观察、去思考。实验中,则应以学生为主体,让每个同学通过操作行为感受计算机的物理过程,教师将理论揉在实例中的具体操作中,学生会感到数据是有形的,CPU的操作是物质化的。经过反复练习,学生不但学到了基础知识,而且提高了综合分析和理解能力。实验中,还要鼓励学生自己修改实验,有时学生对自己编的程序没有把握,一旦上机实验后就清楚了。他在计算机上修改程序,观察修改后的结果,实际上就是了解改动部分在整个程序中所起的作用,这种作用的认识和理解不是通过说教得来的,而是切身经历的、看到的,学生对它的理解、记忆就要深刻得多。

4 实验内容的具体安排

具体的实验内容应覆盖汇编语言教学中的各重要方面,内容涉及debug、汇编语言编程环境、汇编语言程序设计、输入输出与中断、Win32汇编、汇编语言与C语言的混合编程等。类型分为选作和必做。每个实验分属验证型、设计型或综合型。

4.1 稳扎稳打练好基本功:debug和编程环境

“万事开头难”。对汇编语言的学习,能否开好头很关键,很多学生就是因为开始没学好,感觉跟不上,就不再认真地学习了,有的甚至放弃了。其实汇编语言实验开始的基础部分是比较简单的,想掌握它是没什么大问题的。

汇编语言源程序通常以ASCII文本文件的形式保存,通过汇编链接形成一个EXE可执行文件。对EXE文件的调试构成了实验课的主体内容,贯穿始终,而EXE文件的调试通常是通过debug实现的。学生通过使用debug可以观察到存储器的数据存储情况,也可以随时观察到CPU中寄存器的数据变化。debug的反汇编命令是理解汇编语言的助记符形态和机器指令的01码形态的对应关系的重要工具,学生可以通过它深入体会汇编语言中指令的构成及各部分含义。debug提供的单步执行命令是另一个重要工具,利用t单步执行一条指令,及时观察数据缓冲区的变化情况,这也是进行调试、发现程序错误的最直接有效的方法。

debug的实验部分以使用a、t、r、d、u等命令为主反复进行指令练习。学生通过使用debug观察到指令执行前后机器中数据的变化,对深入理解计算机的工作原理、汇编指令的作用是直接的和不可替代的。学生不再感到机器是复杂的,指令是抽象的。

接下来安排的实验则是对汇编语言编程环境的熟悉和掌握,这也是重要的一环。对编程环境不熟悉,不仅会影响学习汇编语言的效率,还会引起一些不必要的错误发生。因此可以考虑多给几个简单完整的程序,让学生多去 使用编程环境,熟悉汇编链接过程。实验初,只给一些正确的程序,让学生经过汇编链接可以较容易地形成exe文件并成功执行,看到了正确的结果,学生就有了方向,也就有信心去做下面的实验了。

在熟悉了简单的编译过程之后,接下来可以在原有程序中适当安排一两个错误,让学生观察汇编链接中出现的错误信息,理解这些错误发生的原因,这一点对程序调试是至关重要的,如果看不懂错误信息,就没有办法正确定位错误,也谈不上修正错误了。

以上分析,学习汇编语言伊始,一定要练好基本功,包括对debug的熟练使用,对编程环境的熟悉。这部分实验一定要安排得充分,力求使学生不再对机器望而生畏,不再对汇编指令有抽象难懂的感觉,如果能开好这个头,后继的学习就顺利得多了。

4.2 轻轻松松做改变:汇编语言程序设计

由于学习汇编语言之前,学生通常已经学习过一门程序设计语言,因此这部分实验可安排简单、典型的验证型、设计型实验,以编写程序为主。先要求学生用之前学过的程序设计语言实现,然后再给出汇编语言的实现,通过对比;学生自然可以发现汇编语言与其他程序设计语言的异同。当程序出现错误时,则必须要求学生使用debug进行调试,观察变化,排除错误,加强程序调试能力。

4.3 细心耐心学核心:输入输出与中断

中断是学习汇编语言的重点加难点部分,能否真正掌握汇编语言也在于此,中断也是汇编语言的魅力所在。这部分实验一定要找一些学生感兴趣的、具有明显观测效果的例子,至少安排两个阶段的实验。第一阶段以验证型实验为主,先使学生熟悉中断过程、中断处理程序的框架;第二阶段以设计型实验为主,让学生自己去思考中断过程中发生的事情,中断程序设计的方法。对这部分知识的传授一定要有耐心,对每个程序的讲解要透彻、概念清晰。中断是真正要用的东西,之前学习的内容只是为它做铺垫,不能学好中断,汇编语言这门课的真谛就没有学到。

4.4 兴趣延伸:WIn32汇编、汇编语言与C语言混合编程

很多学生学习汇编语言之初就会问汇编语言用在哪里,很少接触到汇编语言等问题,其实现在汇编语言很少单独使用,而Win32汇编、汇编语言与C语言的混合编程用的比较多,这两部分内容学起来并不难,可当作拓展知识部分,作为自学内容。教师可以找一些实际使用这部分内容的例子,让学生知道汇编语言的用途,使学生不再“学而不用”,“学而不知用”。

5 结束语

汇编语言程序设计篇7

关 键 词:C语言;计算机;软件编程;实验研究

一、C语言的概述

在1967年BCPL语言被英国MartinRichards 推出,到1970 年B 语言以BCPL 语言为基础被美国Ken Thompson推出[1]。但是B 语言过于简单,而且功能有限,经过研究者的多次试验研究,在1972—1973 年,C 语言在B 语言的基础上经过完善,被美国贝尔实验室D.M推出[2]。在各种计算机编程语言中,C语言属于一门高级语言,它是一切计算机语言的基础,拥有高级语言和低级语言的特点,灵活方便,简洁紧凑;而且它的语法限制不严格,程序员在设计时程序书写自由。不仅能够编写系统软件,同时还可以编写应用软件,能够适应于多种操作系统,应用广泛,可移植性强。总之,C语言对于信息技术的发展具有十分重要的作用和价值。

二、基于C语言的计算机软件编程实验研究

(一) C语言的编程技巧

1.灵活运用指针

在C语言编程的时候,指针是一种特殊类型的变量,它能够帮助程序员有效的表达和解决程序设计过程中遇到的复杂问题,熟练掌握指针是必要的。指针具有三要素:指针名以及指针类型和值[3]。在编程时,指针和一般变量名相同,但是在类型以及值上具有区别,另外,指针不仅能够被用于表示数组,还可以被作为函数的参数返回值。

2.C 语言的特有函数

在C语言编程的时候,有时需要用到一些特有函数。函数都具有一定的功能,同时函数名也反映了该函数的功能。在进行函数定义时,程序员需要把函数的名字、返回值类型以及参数名等各项都进行定义。另外,因为库函数是由C 编译系统提供的,这些函数均是系统首先定义好的,在程序调用的时候,程序员只需利用“#include 指令”把与之相关的头文件包含到所用文件中即可[4]。例如,在程序运行的过程中,如果用到了sqrt函数,则为了保证程序运行下去,头文件必须含有#include“string .h”。

3.算法技巧

在程序设计的过程中,算法是程序的灵魂,因此,掌握一定的算法技巧是必不可少的。通常情况下,算法不仅可以用自然语言表示,有的时候也利用流程图表示。需要注意的是,利用流程图表示算法时,程序设计员必须熟练掌握常用的流程图符号[5]。且“数学乃是计算机之母”,牢固的数学知识同样能够提升编程效率。

4.位运算以及文件知识

相比其他计算机高级语言的运算方法,位运算作为C 语言的重要特色,具有独特性和唯一性。位运算是以二进制位为对象,然后结合相关程序要求进行各种运算。文件包含有数据文件以及程序文件,是计算机不可缺少的,程序设计员在进行编程时,需要把所写的程序存储的文件之中,这样可以便于程序员查找数据,提升查找效率。

(二) C语言和汇编语言混合的程序设计案例分析

在本次的实验之中,在进行程序嵌入时,有其固定的格式,需要在嵌入的各行代码之前加“asm”关键字,也可以直接在asm代码块中放入汇编语句。但是程序设计者在进行嵌入时,一定要注意满足以下条件:汇编语言指令代码中关键字asm必不可少,且要放在指令代码之前;嵌入汇编语言指令代码能够和正常C语言程序混合,但是C语言的分隔符“;”必不可少;嵌入汇编语言时C语言的注释分界符必不可少,分别是“/*”和“*/” [6]。

(2)首先编写C语言程序以及汇编程序,然后独立编译目标代码模块,最终进行链接。

首先,在进行混合编程时,C语言程序能够调用汇编语言的各种子程序以及其定义的变量,同时,C语言编写的函数以及定义的变量等也可以被汇编语言调用。而且混合编程的过程中,一个任务往往是由若干个功能模块组成,且不同的功能模块均是利用合适的语言进行独立编程,且以函数的形式存在。因此,程序设计者要根据每一模块的特点选择相应的语言和语言编程系统进行独立编程,并形成目标文件,继而连接目标文件,形成完整的可执行文件。

在混合编程的过程中,设计者需要注意五个问题:参数传递问题;寄存器的使用问题;存储模式;变量以及函数的调用问题;子程序的返回值问题。

其中,关于参数传递问题,在进行C语言程序调用汇编程序时,必须遵从参数传递原则,利用堆栈把参数传递给汇编程序。例如,在C语言程序中含有函数:voidaa(char*p,int i),这个函数是利用汇编语言进行编写的,如果编译是在小内存模式下实施的,系统在进行调用时,则写成aa(&q , n);运行时程序首先把n压入堆栈,然后再把&q压入堆栈,当参数传递过来并被汇编语言的子程序取得时,BP寄存器便被用作基地址寄存器,实现对栈中所存数据进行存取操作。通常情况下,由于调用的子程序和C语言程序往往使用同一个堆栈,所以在程序执行时,汇编语言子程序需要执行两条指令:push bp pop bp、sp[7]。

2.混合的软件编程实例分析

三、小结

综上所述,随着信息技术的不断发展,人们对于计算机软件编程的功能要求也将越来越高,而利用C语言能够实现计算机软件的多种功能,因此研究者应当强化对于C语言的计算机软件编程实验研究,开发功能更加强大的软件。

参考文献

[1] 侯宏霞.提高“汇编语言”课程实验教学质量的几点思考[J].内蒙古农业大学学报(社会科学版),2011(01):25-26.

[2] 刘海峰.以培养实践能力为导向的“C语言”教学方法探讨[J].科技经济市场,2008(12):33-34.

[3] 阿娜古丽·阿布拉.C语言与汇编语言相互调用实现混合编程[J].电脑编程技巧与维护,2009(10):71-74.

[4] 刘丹,刘德山.C语言程序设计课程综合性和设计性实验研究[J].计算机教育,2012(09):31-32.

[5] 王应军,曲培新,赵晨萍.ARM汇编语言与C语言混合编程的实现方法[J].科技信息,2010(03):69-71.

[6] 方艳红,赵海龙.计算机高级语言程序设计类课程实践教学改革研究[J].中国科技信息,2008(19):12-14.

汇编语言程序设计篇8

“汇编语言”课程是计算机科学、自动化及电子信息类专业的一门核心专业课程。[1-2]对于计算机及其相关专业的学生来说,汇编语言程序设计是需要掌握的重要专业基础知识之一。了解和熟悉汇编语言可以优化学生的知识结构,提高学生的认知水平,增加学生的程序开发手段。相较于快速发展的可视化高级语言,作为低级语言的汇编语言,可读性较差,比较繁琐,不符合自然语言表述,学生普遍感到难学。因此,“汇编语言”课程如何优化教学质量、提高教学效果,是任课教师面临的一个重要问题。[3]本文结合实际教学体会,就如何提高“汇编语言”课程教学效果进行了分析与探讨。

一、汇编语言程序的特点

计算机是一个编码的世界,只能识别和处理由“0”和“1”组成的二进制代码的机器语言,这种指令代码编写易出错且不易修改。于是,人们发明了“指令的助记符”,用助记符(mnemonic)代替操作码,用标号(label)和地址符号(symbol)代替地址码,用这种符号系统形成汇编语言。[4]因此,汇编语言本质上就是机器语言,只不过更容易被人读懂且更容易记忆。使用汇编语言编程,可以对计算机内部硬件进行直接控制,合理地安排机器内部的各种资源。归纳起来,汇编语言程序有以下几个主要特点:

一是与硬件的相关性。WwW.133229.COM汇编语言与机器指令一一对应,不同类型的cpu内部硬件结构不同,因而有不同的指令系统,相应的汇编语言程序也就不同,其通用性、可移植性比较差。二是执行效率高。由于汇编语言与硬件相关,它可以有http://效、直接地控制机器,程序的执行代码短、速度快,是其他高级语言难以企及的。三是编程、调试相对困难。为了有效地控制机器,汇编语言指令涉及到硬件资源的各种细节,如标志、堆栈、寄存器、存储单元等。相对高级语言,其编程及调试比较繁琐、复杂。[5-6]

二、明确教学目的,优化教学内容

1.激发学生的学习热情

“汇编语言”与许多课程联系紧密,如图1所示,它是“操作系统”、“计算机接口技术”、“计算机组成原理”、“嵌入式系统”等课程的基础,在开发嵌入式系统时更是必不可少的语言。“汇编语言”课程学习起来比较枯燥、学习周期较长,不像高级语言那样上手比较容易且能很快见到效果。因此,应教育学生少一些急功近利的思想,应着眼于长远的、全面的技术成长。有条件的教师可以将自己相关的科研成果带入课堂,说明汇编语言有着广泛的应用领域。在授课过程中,注意拓宽学生的知识面,结合具体的应用,激发学生的学习热情。

2.优化教学内容

不同于高级语言的教学模式,汇编语言是一种硬件编程语言,是连接软硬件的桥梁。一方面,汇编语言与芯片密切相关,学习汇编语言时应具备一定的硬件基础知识,需要时穿插相关知识点,回顾前导课程的相关内容,如计算机结构等;另一方面,又不需要紧跟着产品来讲授,只要选择一种典型的汇编语言指令集讲清楚、讲透彻,使学生掌握学习与思考的方法,今后遇到其他的芯片,也就可以举一反三,触类旁通。

具体到一种汇编语言指令集,应突出其重点、难点,如分段管理技术、寻址方式、堆栈管理、中断技术等。为了便于后续程序结构的学习,在学习寻址方式和指令集时就教会学生使用debug,讲解了常用的调试命令,使学生能尽快上机实践,验证指令,编写短小程序,看到运行结果,从而加深影响,巩固所学的内容。由于汇编语言的指令很多,涉及的知识点抽象,刚开始接触这门课程时,学生往往不太适应,前后的知识点容易混淆,教师应及时对讲授过的内容进行比较与小结。课堂上,应适当增加讲授例题的数量,不同的教学阶段,例题的侧重点不一样。开始阶段,例题主要涉及汇编语言格式与汇编语言指令;中间阶段,例题讲授的是如何用汇编语言指令实现汇编语言流程;后续阶段,例题重点讲解汇编语言程序设计算法的确定,分析、解决问题的思路与方法。而在学生掌握了基本内容及重点内容的基础后,教师应提纲挈领,从系统的整体角度分析“汇编语言”课程在整个硬件知识体系中的作用,让学生从更高层次理解、使用汇编语言。

3.多种教育手段相结合

随着现代教育技术快速发展,多媒体技术在教学中有着广泛的应用。在“汇编语言”课程中,可以利用多媒体课件图文并茂的特点吸引学生的注意力,活跃课堂气氛。例如,可以通过动画形式将寻址过程、堆栈变化、循环移位、子程序调用、中断调用过程等表示出来,将复杂的、抽象的问题简单化、形象化,提高教学效率。而在确定汇编语言程序设计的算法,用汇编语言实现编程,培养学生的推理、思维能力时,采用传统教学方法。对不同的知识点,结合不同的教学方法,有利于学生对不同教学内容的理解与掌握。

三、注重实验环节,提高教学效果

1.实验平台及实验内容

汇编语言程序设计要经过编辑、汇编、连接和调试等过程,如图2所示,传统的上机实验一般是在dos操作系统环境下进行的。目前流行的是windows操作系统平台,学生对dos操作环境相对陌生。为了提高上机的效率,应摒弃dos环境,采用基于windows操作系统的汇编语言集成实验环境。在该环境下,可以方便编辑汇编语言程序,使用下拉式菜单或快捷按钮进行汇编、连接及调试等工作,并可以预先设定段定义、过程定义等。

在实验内容安排上,应根据授课的进度及学生的掌握程度,并与教学目标相匹配,精心选择一些有代表性的、有实用价值的内容,尽量避免实验内容过长、过杂等问题。实验的内容应包括:指令系统及调试工具debug使用;汇编语言程序设计上机环境及过程;顺序、分支、循环基本结构程序设计;子程序设计和宏汇编程序设计;中断调用程序设计;综合性实验。

转贴于

2.发挥学生在实验中的主体作用

在整个实验过程中,以学生为主体,教师只是起到组织、引导的作用。

实验前,教师讲解难点、重点及有关注意事项,点到为止,也可以先给出相关的问题,让学生去思考、去观察。要求学生对实验内容进行预习,并在下次上实验课时用提问、抽查等形式检查。学生通过预习带着问题进行实验,可以提高学习的主动性,且能对知识点的领悟更深刻。

实验中,鼓励学生按照自己的思路去编写、调试程序。对于学生在实验过程中提出的问题,一般不直接给出答案,而是引导学生通过学过的理论知识自己寻找解决的方法。只要能达到预定的实验目标,对实验步骤及过程不做过多要求。对学有余力的学生,鼓励他们在完成规定的实验内容后,对补充题或对自己设计的问题进行实验;而对基础较差的学生,则鼓励他们独立地解决问题。

实验后,要求学生及时对实验进行归纳、总结,并撰写实验报告。

3.实验实践贯穿整个教学

“汇编语言”课程有其特殊性,只有通过不断的上机实践,学生才能加深对理论知识的理解,提高编写程序的能力。因此,要转变观念,重视实验教学,避免实验教学流于形式。程序设计是一个调试修改语法及逻辑错误,最终得到正确程序的过程。教师应充分利用多媒体等手段,引导学生动手编程,通过实际例题观察数据流变化,培养学生调试、修改程序的能力和意识。教师演示与学生实践可以穿插交替进行。如果学生对自己编的程序没有把握,则鼓励他们上机进行验证,反复地调试、修改、运行。对有些验证性实验,可以用作业的形式要求学生在课外完成。如用debug调试工具验证各类指令的功能和格式,对标志位的影响,查看数及字符在存储器中的存放形式,堆栈的变化等。既加深了学生对所学内容的理解,又为汇编语言程序设计打下了基础。

本课程的目的是使学生掌握程序设计的方法,学会用汇编语言编写程序。结合各章节所学的知识点,每次实验要求学生编写相关的程序,检验学生具体知识点的掌握程度。注意加强前后实验之间的相互联系,融会贯通各个知识点。随着课程进展的加快,实验内容应从比较简单到相对复杂,再到课程结束阶段,经过知识及多个实验经验的积累,使学生具备一定的程序设计能力。

四、结语

上一篇:三维动画专业范文 下一篇:高级语言程序设计范文