HI,欢迎来到学术之家,发表咨询:400-888-7501  订阅咨询:400-888-7502  股权代码  102064
0
首页 精品范文 汇编语言

汇编语言

时间:2022-05-02 10:31:27

汇编语言

汇编语言范文1

关键词:汇编语言 高级编程语言 历史 趋势

中图分类号:TP313 文献标识码:A 文章编号:1003-9082(2017)06-0002-02

一、编程语言的发展历程

自从1946年世界上第一台电子计算机问世,人类和机器的交流方式和语言就成为了软件工程师和计算机从业者的主要研究方向,更有效更简便的编程语言成为了软件工程师的新宠儿,伴随着计算机的飞速发展,计算机的硬件升级速度也越来越快,对编程语言的要求也日益严格。在过去的几十年,编程语言有了长足的发展,至今已经有四代语言问世。大量的编程语言为了满足不同领域的编程要求和软件功能,经历了被修改,被取代,被发展等过程,最终发展成了现在编程语言的多样化。尽管人们多次试图寻找一个能够适应所有编程环境的通用语言,但是却没有一次成功。程序设计语言正在与现代科技日益飞跃,人类的智慧在日益彰显。

1.机器语言

计算机的硬件作为一种电路元件,它的输出和输入只能是有电或者没电,也就是所说的高电平和低电平,所以计算机传递的数据是由“0”和“1”组成的二进制数,所以说二进制的语言是计算机语言的本质。计算机发明之初,人们为了去控制计算机完成自己的任务或者项目,只能去编写“0”、“1”这样的二进制数字串去控制电脑,其实就是控制计算机硬件的高低电平或通路开路,这种语言就是机器语言。直观上看,机器语言十分晦涩难懂,其中的含义往往要通过查表或者手册才能理解,使用的时候非常痛苦,尤其当你需要修改已经完成的程序时,这种看起来无序的机器语言会让你无从下手,也很难找到程序的错误。而且,不同计算机的运行环境不同,指令方式操作方式也不尽相同,所以当你在这种机器语言就有了特定性,只能在特定的计算机上执行,而一旦换了机器就需要重新编程,这极大的降低了程序的使用和推广效率。但由于机器语言具有特定性,完美适配特定型号的计算机,故而运行效率远远高过其他语言。机器语言,也就是第一代编程语言。

2.汇编语言

通过我对机器语言的介绍,不难看出机器语言作为一种编程语言,灵活性较差可阅读性也很差,为了减轻机器语言带给软件工程师的不适应,人们对机器语言进行了升级和改进:用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便,这种语言就是我们所说的汇编语言,即第二代计算机语言。但是这时候,计算机的硬件还是那些硬件,所以计算机还是不认识那些字母符号,这时候就需要一个专门的程序把这些字符变成计算机能够识别的二进制数。因为汇编语言只是将机器语言做了简单编译,所以并没有根本上解决机器语言的特定性,所以汇编语言和机器自身的编程环境息息相关,推广和移植很难,但是还是保持了机器语言优秀的执行效率,因为他的可阅读性和简便性,汇编语言到现在依然是常用的编程语言之一。

3.高级语言

在编程语言经历了机器语言,汇编语言等更新之后,人们发现了限制程序推广的关键因素――程序的可移植性。需要设计一个能够不依赖于计算机硬件,能够在不同机器上运行的程序。这样可以免去很多编程的重复过程,提高效率,同时这种语言又要接近于数学语言或人的自然语言。在计算机还很稀缺的50年代,Q生了第一个高级编程语言。当时计算机的造价不菲,但是每天的计算量有有限,如何有效的利用计算机有限的计算能力成为了当时人们面对的问题。同时,因为资源的稀缺,计算机的运行效率也成为了那个年代工程师追寻的目标。为了更高效的使用计算机,人们设计出了高级编程语言,来满足人们对于高效简的编程语言的追求。用高级编程语言编写的程序需要经过翻译,翻译成机器所能识别的二进制数才能由计算机去执行。虽然,高级编程语言编写的程序需要一些时间去翻译代码,从而降低了计算机的执行效率,但是实践证明,高级编程语言为工程师带来的便利远远大于降低的执行效率。经过各软件工程师和专家的不懈努力,1954年,第一个完全意义的高级编程语言―FORTRAN问世了,他完全脱离了特定机器的局限性,是第一个通用性的编程语言。从第一个编程语言问世到现今,共有几百种高级编程语言出现,很多语言成为了编程语言发展道路上的里程碑,影响很大。比如:FORTRAN、BASIC、JAVA、C、C++、python等。高级编程语言也从早期的控制信号变成了现在的有结构有格式的程序编写工具,C++等语言的出现更是开启了面向对象编程语言的新章。同时伴随着软件编写效率的提高,软件开发也逐渐变成了有规模、有产业的商业项目。

二、高级编程语言、汇编语言和机器语言的区别

根据上面的简单介绍,我们可以说作为编程语言的一种划分,高级编程语言和低级语言构成了一般意义上的计算机语言。而高级编程语言又是和汇编语言对比而言。高级编程语言作为一种通用的编程语言,它的语言结构和计算机本身的硬件以及指令系统无关,它的可阅读性更强,能够方便的表达程序的功能,更好的描述使用的算法。同时,它更容易被初学者所掌握,很容易学习。而且容易学习掌握。但是高级编程语言因为是一种编译语言,所以他的运行速度比汇编程序要低,同时因为高级语言比较冗长,所以代码的执行速度也要慢一些。所以说汇编语言更适合编写一些需要高效率运行的程序或者对程序代码的长度又要求的程序,同时在直接控制硬件方面也能够起到很好的作用。

高级编程语言,作为用户层面的程工具,用户并不需要去了解硬件的结构,而是去用逻辑的语言去实现想要的目标,但是因为高级编程语言的架构高于汇编,所以不能编写直接访问硬件资源的系统程序,因次,高级编程语言必须要调用汇编语言编写的程序来访问硬件地址。

机器语言(machine language)就是一种指令集了,它是一串数据代码,也可以叫做机器码。他能够由硬件直接读取,同时硬件返回的数据也是这种二进制代码。机器语言是作为直接控制硬件的桥梁,连接这软件和硬件两个不同领域的技术。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言执行速度是上述语言中最快的,而且无需编译直接执行。用机器语言编写程序,编程人员不仅要对所有二进制数字所指代的指令烂熟于心,而且还要手动为程序分配存储空间以及输入和输入。所以这是一个十分复杂的过程,即使编写简单程序也好耗费大量的人力。而且不论是代码还是输出,全是“0”和“1”的数字串,在后期的阅读和维护也会非常困难,所以机器语言已经慢慢的推出了主流编程语言的领域。

三、汇编语言和高级编程语言的优缺点

1.汇编语言的优缺点

汇编语言作为机器语言之上的第二代编程语言,它也有很多优点:

1)可以轻松的读取存储器状态以及硬件I/O接口情况

2)编写的代码因为少了很多编译的环节,可以能够准备的被执行

3)作为一种低级语言,可扩展性很高

缺点:

1)因为代码非常单调,特殊指令字符很少,所以造成了代码的冗长已经编写的困难

2)因为汇编仍然需要自己去调用存储器存储数据,很容易出现BUG而且调试起来也不容易

3)就算完成了一个程序,后期维护时候也需要耗费大量的时间。

4)因为机器的特殊性造成了代码兼容性差的缺陷。

2.高级编程语言的优点

因为高级编程语言很多,我们就拿C语言展开论述。C语言是一个面向过程的语言,用户根据自己的需求来调用函数或创建目标。因为明确的目标性以及理解容易,一个新手很容易去学习C语言。同时C语言因为发展的历史,拥有很多函数库,用户可以根据自身的需求在代码中加入头文件来调用这些函数来实现自己的功能,当然使用者也可以根据自己的喜好编写函数来在后续的代码中调用,关键字像if,else,return,main,end等这些简单易懂的单词也使得C语言记忆和理解起来更加容易。作为一个通用性很高的编程语言,C语言的可移植性是它出色的优点之一,你可以在任意一台电脑、一个设备上运行程序而不需要重新编译。

四、对未来编程语言的展望

通过上面的介绍,我们不难发现面向对象思想在编程设计中占有很重要的地位,同时现在编程语言的多元化也告诉我们,未来的语言发展不会是一枝独秀,也不会是单纯的语言发展,而是以完全面向对象的姿态你展现我们的现实世界。它将更容易被工程师学习和使用,人们完全可以通过简单的操作来完成复杂的编程。这就得出了未来语言发展的第一个趋势--面向对象,由计算机来提供现有的函数功能、封装结构。而工程师只需要去拿现成的函数来调用,大大提高了代码的利用率。同时简单性也成为未来追求的目标,如果一个有简单计算机知识的人只需学习一些基本的操作就能编写适合于各种情况的应用程序,这样创造和编写的成本将会大大降低。在互联网高速发展的今天,安全也将成为了代码编写中必不可少的因素,一个更安全更具有保密性的语言也是未来的需求。综上在这样一个“百花齐放百家争鸣”的编程语言环境,只有能真正给使用者带来便利的语言才会走的更远走的更好。

参考文献

[1]张t蕊,C++教学方法及学习方法的调研与分析,计算机教育第23期

[2]王文东,李竹林,尚建人,汇编语言与C语言的混合程序设计技术,计算机发展第十六卷第八期

[3]路士兵,浅谈计算机汇编语言的特点和学习方法,科技创新导报2014NO.20

汇编语言范文2

关键词:C语言,汇编语言,混合编程

现代电子设备中DSP芯片的开发越来越多地得到应用,使用C语言开发的DSP程序可读性和可移植性好,开发周期短,程序修改方便。但在某些情况下,C代码的效率还是无法与汇编代码的效率相比,而且一些硬件控制功能也不如汇编语言方便,甚至有些操作C语言无法直接实现。因此在DSP的软件开发中常用汇编语言实现对硬件的直接控制或用来编写一些效率要求较高的程序段,但由于汇编语言的移植性和可读性差,所以常采用混合编程的方法,以便达到最佳效果。

混合编程中两种语言相互调用,进行参数传递,共享数据结构及数据信息,但是由于两种语言在程序格式、函数调用、寄存器使用等方面都有不同之处,因此混合编程中主要是要解决二者的接口和参数传递问题。下面以C为例说明混合编程的几种实现方法:

一、直接在C程序中嵌入汇编语句

这种方法比较简洁直观,可以将C程序中无法实现的硬件控制及需要较高效率的关键部分用汇编语句编写,以优化程序。论文参考网。但这种方法的缺点是比较容易破坏C环境,因为C编译器在编译嵌入了汇编语句的C程序时并不检查或分析所嵌入的汇编语句。在Turbo C中嵌入汇编语句由关键字asm引导,其格式为:

ASM操作码 [操作数],[操作数]

例如在C语言源程序example1.c中嵌入汇编语言的语句

main()

{

int x;

int y;

x=8;y=10;

asmmov ax, [y]

asmadd [x],ax

printf (“x:%d ”,x)

}

上述C语言源程序不能用集成编辑器,因为编辑器tc.exe不支持嵌入式汇编程序,只能用DOS命令行tcc.exe实现。

二、独立的C和汇编模块接口

这种方法是混合编程中常用的方法,关键是要解决好汇编语言与高级语言的数据通讯。在这种方式下两种语言分别编写,分别产生各自的obj文件,然后经过连接,形成一个完整的程序,采用这种方法比较灵活,在使用中要遵循有关的调用规则和寄存器规则。

1、混合编程的规则

1)命名约定: C编译器对C源程序编译时要将其中的变量名、 函数名等标识符前加下划线,而汇编程序在汇编时直接使用,所以被C语言调用的汇编程序有标识符前都要加下划线。

2)声明约定: 在C语言中对C所使用的外部变量、过程、函数均用EXTERN说明:

extern 类型 函数名(参数表);

extern 类型 变量名;

使用前均应放在函数体外进行说明

3)汇编语言的变量名、子程序名等标识符,为了能让其他模块可见必须用public操作符定义它们。如

public

_bof,_array

4)由于C语言对大小写字母的区别,在汇编程序中子程序名和变量名都要使用小写字母。

2、寄存器的使用规则

对于寄存器AX、BX、CX、DX和ES在汇编语言中可任意使用,对于寄存器BP、SP、DS、CS和SS,如果C语言要求保护,在汇编语言子程序中使用它们之前,先进行保护,使用后再加以恢复。对于指针寄存器SI和DI,C语言用作寄存器变量,因此在汇编语言程序中使用它们之前都要进行保护,返回时再将其恢复。

3、混合编程的参数传递和返回

C语言程序调用汇编语言子程序时,参数通过堆栈传递给汇编程序。参数由C传递给汇编时,参数以其在参数表中出现的反序入栈,然后再存入主程序的返回地址IP的值。当被调用函数或子程序运行结束后,C主程序会自动调整堆栈指针SP使之恢复到压入参数之前的状态,不需要程序员平衡堆栈。但编程时应注意不同类型的参数占用字节数也不同如int占2个字节,real占8个字节,同时还要注意近调用和远调用时段地址CS和偏移地址IP在栈中占用字节数也不同。 当汇编子程序中有值返回时,若返回的结果是短整数,放在AX中,若为长整数放在DX:AX中。

4、编译连接

分别用C语言和汇编语言写出源程序后,下面就是要进行编译、连接生成可执行文件,这时可用Turbo C的tcc命令来完成。

其格式为:tcc [编译参数表] 文件名1文件名2…..文件名n

其功能是通过设置不同的编译参数将指定的各个文件编译连接。当文件中有扩展名为.asm的汇编源程序时,tcc命令立即调用tasm.exe宏汇编程序,对.asm源程序进行汇编。论文参考网。同时要注意如果用户使用的是masm.exe汇编程序时,要将masm.exe改名为tasm.exe,并和tcc命令存放在同一目录下。

三、利用codecomposer集成开发环境进行修改

这是一种简便易行快速优化C语言代码的方法,在Code Composer集成开发环境中,选择View菜单下的MixedSource/ASM选项即可看到交叉列表的汇编程序。在所生成的语句中,每个C语句的下面就是C编译器对该C语句编译所生成的汇编语句。论文参考网。通过查看交叉列表的汇编程序,可以对某些编译不是很优但却是比较关键的汇编语句进行修改。修改汇编语句时,必须严格遵守不破坏C环境的原则。

参考文献:

郭咏梅.C语言程序与汇编语言程序的接口分析[J].电脑学习,2002.(1):26-29

汇编语言范文3

汇编语言传送指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令。

用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

(来源:文章屋网 )

汇编语言范文4

关键词:汇编语言;C语言;混合编程

汇编语言的优势就是速度快,占用存储空间不大,而且可以随时控制硬件,这些优点是其它的程序语言无法取代的。汇编语言也有不足之处,就是在高级程序的编写与调试时存在着较大的困难,特别是在处理一些数据或者一些混合运算时显得更加困难。

C语言,它的优势就是在于功能全面,表达形式多样且灵活,开发使用效率很高,具有其它高级语言无法具有的优势。通常在软件开发过程中,大部分程序采用高级语言编写,以提高程序的开发效率;但在要求执行速度快、占用空间少或要求直接控制硬件的场合,则利用汇编语言编写,以提高程序的运行效率。

1.汇编语言和C语言混合编程的方法

C语言和汇编语言混合编程的具体方法有以下几种。

2.1 参数传递

汇编语言程序和C语言程序在调用时会涉及到参数传递,一般采用堆栈进行传递。在汇编语言中将BP作为基址寄存器,调用程序先将来自于C语言程序中的参数依次压入堆栈中,然后当需要使用这些参数时,再用BP加上不同的偏移量依次对堆栈中的数据进行存取操作。

2.2 调用关系的确定

对于将要涉及到调用的过程或函数需要事先说明和建立调用与被调用关系。被调用的过程或函数应预先说明为外部类型,以便被外部模块引用,而调用程序也需要在程序中说明将要引用的外部模块的名称。在说明调用关系时还应根据不同的存储模式确定相应的汇编语言格式。C程序小模式对应汇编程序的近类型过程,而C程序大模式则对应汇 编程序的远类型过程。

总而言之,汇编语言和C语言的混合编程方法可以使汇编语言与C语言之间取长补短,充分发挥各自优势,相互交叉调用,进行参数传递,共享数据信息和数据结构,使由此开发的软件更实用、更安全可靠,使开发和编程工作达到事半功倍的效果。

参考文献:

[1] 罗南超,向昌成,李唐辉. 汇编语言实现多种进制的通用输入输出[J]电脑知识与技术, 2008,(36) .

[2] 崔卫东. VC++与汇编语言混合编程的研究与实现[J]福建电脑, 2007,(05) .

[3] 宋金华. 汇编语言和C语言在图形处理中的综合应用[J]湖北广播电视大学学报, 2010,(12) .

汇编语言范文5

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

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

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

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

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

二、汇编语言与高级语言、delphi语言、c语言的结合运用

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

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

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

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

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

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

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

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

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

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

1.先分别进行程序编写再将两种程序相互结合的方式是先建立一个汇编语言编写的程序的大结构,再将详细的功能命令序列加入到结构框架中。像加入一个有关函数的程序命令:先建立一个该函数命令的架构框架,然后对该项指令进行代码编译,形成一个汇编语言程序文件,可以对文件名称有一定改动,然后在已经做好的汇编程序文件的数据信息代码后面加入一些内容,最后就可以进行汇编语言程序文件与c语言程序文件相结合了,在这里,可以通过直接将源文件进行结合和通过tcc实现对汇编语言程序文件与c语言程序文件的结合。需要注意的是在运用这种方式实现程序编写时,要首先将各个信息模块分别编译好。

转贴于

2.运用通过关键字实现两种语言编写程序相互结合的方式时应注意的是,在实现c语言编写程序与汇编语言编写程序相结合的过程时,数据信息编译结合的方式只能选择纯dos,运用tcc命令来完成,同时一定要有相关的必须操作选项。

三、计算机汇编语言在数据排序中的应用

(一)运用计算机汇编语言进行数据排序的必要性

数据排序是将一组没有规律、较杂乱随意的一般数据信息,通过计算机程序的高速运算功能,按照一定的规律或者顺序排列成一组新数据。重新排列得出的新数据不仅在整齐清楚、有规律可循,而且在实际应用中,也可以帮助使用者提高工作效率,在短时间内找到需要的信息,有很大的便利。数据排序过程中对“一组没有规律、较杂乱随意的一般数据信息”进行运算排序时,如何能够对“强大的、随意的数据”运用最快速、方便的方法在短时间内做到最好的处理,这里就要说到计算机汇编语言功能了。计算机汇编语言编制程序时是运用汇编功能将数据信息编成代码传送到计算机的主机控制系统中,然后通过主机控制系统向各个程序发出命令,以此来完成运行功能。其中,汇编语言可以讲“强大的数据信息”转化为指令代码,再次可以实现对计算机的直接控制,这些都是实现数据排序的最佳途径。

(二)计算机汇编语言数据排序的过程分析

这里,我们运用一个实例来对计算机汇编语言实现数据排序的应用过程进行分析。假设现在需要对计算机编写一个程序,是将一组数据按照一定的排序规律进行排序。好了,现在我们已经将题目要求设置完毕,来看看计算机汇编语言程序是怎么来完成这个题目的。常用的一种计算机汇编语言程序进行数据排序的方法是气泡排序,就是对数据信息中连接最近的两组数据进行对比,然后找出这两组数据之间的规律,再用所得出的规律与下一组数据进行对比,以此类推,直到第一次规律排序完成,然后重新进行对比、寻找、排列……,最后直至停止对比。

该过程中,计算机将接收到的数据信息按照相关要求进行程序写入,然后运用汇编语言功能将写入程序信息进行代码转换,传递给计算机的运算器,进行一次次的运算、传递,最终排出有一定规律的数据。运算过程中相互挨着的两组数据对比,产生结果在于后面数据对比交换是该运算过程中的规律,另外,运算中还用到不停地对比、再对比的重复循环过程,使汇编语言功能实现的更明显。

整个数据排序过程中,计算机程序操作不仅将排序方法在计算机空间开展的复杂程度控制得很低,使得空间效率较高外;在时间上,每一次的对比、排列也因为程序指令对计算机的直接控制而保持在最短内;另外,计算机系统采用的排序方法也是一具有稳定性的排序法。

计算机汇编语言在数据排序的实际应用中,除了上述介绍到的数据排序方法外,还有快速排序、基数排序、选择排序等多种形式,都能够实现数据的快速、稳定排列,运用计算机汇编语言实现数据排序是计算机程序编写中的一种常有应用。

汇编语言范文6

李娜娜(1981-),女,商丘市人,本科,助理实验师,研究方向:计算机教学与研究。

摘要:C语言和汇编语言原本各自独立,在单片机程序设计中各具优势。为减轻程序开发难度,并提高程序的效率,将两种设计语言混合是最好的方式。主要对混合编程机理以及函数的混合调用进行了分析。

关键词:C语言;汇编语言;混合编0.引言

当前的单片机系统程序设计多依靠两种设计语言完成,一是C语言,它具有良好的可读性和较强的可移植性,不足之处在于难以精确控制程序的运行时间,而且编码效率较低;二是汇编语言,其编码效率高,但是可读性并不理想,且数据运算处理函数设计极为复杂。在提高运行效率的同时,为了能降低开发难度,将C语言和汇编语言混合使用成了研究重点。

1.原理

设计人员在利用纯汇编语言设计程序时,常会出现代码重叠的情况,这就要求综合代码长度、代码段的起始地址等因素加以考虑;设计中断服务函数时,需保证代码定位的准确性;使用数据段时,需合理分配寄存器空间,为提高对空间的利用率,通常还会涉及数据生存期等问题。如果使用纯C语言进行编程,则无需考虑这些问题,可将其交由编译器和连接器完成。基于C语言的程序最终经编译器转换,会形成包含有代码段定位、寄存器使用状况等信息的汇编语言文件。因此,在今后可以此汇编文件规范进行汇编程序的编写工作,从而使得编译器和连接器将C语言代码和汇编代码相结合。

2.函数的混合调用机制

2.1 函数特征及命名规则

在编写函数时通常要考虑很多因素,如有无参数传递、有无返回值、是否是公共函数等。只有这些条件成立,才能成为函数。函数都有名称,如在A51中 利用ACALL、LCALL两个指令调用函数,就以指令的操作函数作为函数名称,在程序体内具有唯一性。汇编时调用C函数,如果C函数无需依靠寄存器传递函数,则ACALL的参数就是C函数的名称;反之,ACALL的参数需要在C函数名称前面加一个下划线“_”。在编写汇编函数时,需在利用寄存器传递参数的汇编函数名称以下划线开始。

2.2 参数传递方式

通常依靠以下两种方式传递函数参数:

①工作寄存器

对参数数量有限制,如果参数过多,则尽量选择另一种方式。Keil编译环境将工作寄存器作为默认的传递方式,若不能传递所有参数,剩余的参数需要借助数据缓冲区完成。是否使用工作寄存器传递函数参数,可通过编译器人为地控制,如#pragma noregparms为禁止使用,#pragma regparms则表示开启。指令与C函数的名称也有关,因为不使用这种方式,那么就无需在C函数前面加下划线。

虽然51单片机安装有4个工作寄存器组,但一次只能使用一组。在C语言中常借助using n(n=0,1,2,…,n)来表示参与参数传递的寄存器组,n是其序号。应注意的是,若两个参与参数传递的函数使用的寄存器组不是同一个,那么函数参数就无法正确地传递。这意味着在函数调用时尽量不要改变寄存器组。这4个寄存器组中有一个8字节的,最多只能传递3个参数。函数中传递参数最多的数量为4个。

②数据缓冲

在C函数中调用汇编函数,因为全部细节在汇编函数内部都进行了处理,所以采用两种方式的操作具有一致性。在汇编中处理C函数参数表的难度较大,尤其是访问参数寄存器时。利用寄存器传递参数时,寄存器的地质具有固定性,可以直接访问。然而采用数据缓冲的传递方式时,参数地址是由编译器和连接器自动分配的,需采用偏移地址的方法才能确定参数具置。其实在这两种传递方式中,参数都归为函数的局部变量,但只有对数据缓冲区的参数才能通过偏移地址的方法访问。

利用偏移地址访问C函数的参数时,需在汇编中将调用的数据段首地址?fuc_name?BYTE通过extrn data(?func_name?BYTE)加以说明,然后通过MOV?func_name?BYTE+n,A等赋值指令进行访问。

2.3 函数的声明与定位

C语言程序中函数体的声明为:void c_func(void)。这是一个名称为c_func且没有参数传递及返回值的函数。可按照以下方式实现函数体的定义:

Void c_func(void)

{

/*c_func()函数体*/

}

汇编语言包括有传递参数及无传递参数的两种函数,一般汇编程序设计时无需区分,但混合编程需要给编译器一个函数是否有参数传递的标志,即函数名称之前是否有下划线。若有说明有参数传递,反之则没有参数传递。

为提高程序的可移植性,需要对中断项量表精确定位,其它函数则完全有连接器进行定位。不过这种情况并不绝对,比如需要给程序加密时应将某段代码精确定位于一个固定的地址,此时便需要绝对定位。设计时可利用ORG、AT任意一个关键词对代码段进行定位,但若是数据段定位,只能选择后者。

3.混合编程的应用分析

某类测量仪器主要用于检测物体表面的污染程度,主控制器使用的是uPSD芯片psd3224,具有控制外设及处理数据等功能。在开发时需要对时间和时序进行严格控制,这就对汇编语言提出了较高的要求。另外,有大量数据需要处理,汇编语言难以完成,此时应选择C语言编写。最后将这两种设计语言混合使用,既有利于提高代码使用效率,又能够起到简化系统设计的作用。

因篇幅有限,在此只给出了部分程序,程序包含main.asm和file_c.c两个文件。前者为汇编程序文件,里面包括主程序main和一个有参数传入和传出的控制函数char control(char);后者为C语言文件,包括一个8b与8b乘法的处理函数int process(char)。

ACALL_PROCESS

MOV A,R7;处理process()函数的返回值的低位

MOV B,R6;处理process()函数的返回值的高位

AJMP MAIN

;char control(char i);

PUBLIC_CONTROL;声明control()为public型

?PR?_CONTROL;FILE_ASM SEGMENT CODE AT 0100H;control()函数的代码段声明

RSEG?PR?_CONTROL?FILE_ASM;control()函数代码段的开始

{

int result;

result=i*100;

i=control(i);//调用汇编控制程序

Return result;

}

4.结束语

该仪器在程序设计时采用C语言和汇编语言混合的方法,使得程序设计更加简单,开发周期有所缩短。测试结果表明,系统性能稳定可靠,验证了函数混合调用的安全性。可见,C语言和汇编语言混合编程能取得更好的效果,值得推荐应用。(作者单位:商丘职业技术学院)

参考文献:

[1]张开便.C语言与汇编混合编程机理探析与应用[J].电脑开发与应用,2010,22(4):109-110

[2]袁静萍.C与汇编混合编程技术及其应用实例[J].江苏技术师范学院学报,2012,24(2):143-145

汇编语言范文7

1 引言

机器语言是计算机能直接识别的语言,它是一种由0和1组成的二进制语言,汇编语言是对机器语言符号化的一种语言[1],属于低级语言。由于汇编语言与硬件有着千丝万缕的紧密联系,因此用汇编语言经过编辑、编译、链接等步骤获得的可执行程序不仅运行速度快、占用内存空间少,而且能有效地对硬件设备进行控制以及开发。汇编语言的应用广泛,例如:在可行性分析、网络安全维护、生物特征识别、嵌入式系统开发、农论文联盟业机械化以及电力控制等等领域中都可以看见汇编程序的身影。因此在现在很多高校里,汇编语言不仅是计算机科学与技术学科专业的主要课程,也是其他相关专业的基础课程[2],例如:电子技术、自动控制、机械工程、通信工程等相关学科或专业都会使用到汇编语言。但是,另一方面汇编语言还具有指令集繁多、寻址方式多样、程序编写与调试复杂、程序可读性较差等等缺点,再加上汇编语言常常涉及中央处理器、内存单元和i/o接口等多个硬件处理细节,因此对于高校汇编语言的教学来说,如何尽快尽好地让学生掌握汇编语言编程往往是比较棘手的问题。为了解决这一问题,本文将对汇编语言教学中存在的若干难点进行分析,以便找到突破点,更好地为汇编语言教学改革服务。

2 汇编语言教学中的难点

笔者目前已经在高校从事汇编语言教学多年,经过多年的教学发现,在汇编语言教学中存在如下几处困难:(1)学生往往弄不清什么是寄存器,什么是存储器,进而无法理解寻址方式bx和[bx]之间的区别。(2) 由于汇编语言中寻址方式有很多种,寄存器也有多个,因此学生在学习寻址方式时经常会出错,例如:存储器寻址时出现[dx]、[ax]、[cx]、[ds]以及[ax+bx]等错误。寻址方式是汇编语言的基础,如果无法熟练地掌握各种寻址方式,那么汇编语言程序的编写将变得举步维艰。(3)学生在使用属性修改运算符ptr、字节定义伪指令db、字定义伪指令dw以及双字定义伪指令dd存在很多问题,例如:对于何种情况下需要使用ptr常常把握不准,对于由db、dw和dd定义的数据在内存中的存放情况含糊不清。(4)汇编语言指令繁多,各个指令的使用规则差异很大,因此学生在学习指令时经常出现指令使用违反规则的情况,例如:使用指令div进行16位数的除法时没有把被除数事先放进默认的寄存器ax和dx中,堆栈操作时将进栈指令写成push al,以及将sal、shr、sar、rcl、rcr、rol、ror等移位指令不加区分地使用。(5)复杂的汇编语言编程让已经具有高级语言编程经验的学生索然无味,厌学情绪时常出现。

3 针对难点而采取的教学改革措施

针对上一节总结的汇编教学中存在的难点,这里我们建议分别可以采取如下教学改革措施:

(1)首先告诉学生寄存器和存储器尽管是计算机的重要硬件组成部分,但是寄存器是在cpu中的,而存储器这里主要指的是内存,因此寄存器和存储器是两种不同的相互独立的硬件设备。寻址方式中bx属于寄存器寻址,获得的操作数是放在寄存器中的,也就是在cpu里的,而[bx]属于存储器寻址,获得的操作数是放在内存中的,因此两者是完全不同的寻址方式,此外,[bx]中的bx寄存器里存放的是内存地址。实际课堂讲解时还可以利用打比方的方式配合说明,比如把bx这个寄存器比喻成一个盒子,内存比喻成一幢大楼,大楼的每个房间就是内存单元,那么寻址方式bx获得的操作数是放在盒子中的,而利用[bx]获取操作数时,盒子中放的是操作数的地址,先从盒子中取出地址,然后根据地址到大楼里面找到对应的房间,那么操作数就在这个房间里。

(2)将所有的寻址方式以及每种寻址方式所涉及的寄存器用一个表格来说明,如文献[3]第45页的表3-2所示,这样做的目的使得学生能很清楚地知道每种寻址方式可以使用哪些寄存器,例如:基址寻址中可以使用的16位寄存器只有bp和bx两种,而变址寻址可以使用的16位寄存器也只有si和di两种。

(3)在讲解属性修改运算符ptr时也可以采用表格的形式,将所有需要使用ptr的情况给罗列出来,实际讲课经验证明一个表格有时候比语言更具有表达能力。此外,对于数据定义伪指令db、dw和dd的讲解,则一定要用典型的例子来加以说明,例如:比较buf1 db ‘a’,’b’与buf dw ‘ab’这两条数据定义伪指令中字母a和字母b在内存中的存放顺序就可以使得学生清晰地了解db与dw的不同之处了。

(4)汇编语言的指令的确是非常多,要全部记住,对于初学汇编语言的学生来说是比较困难的,因此在教学中针对常用的指令需要多举例子,利用较多的程序片段来说明指令的用法。例如:针对每个移位指令都需要举一个程序实例来加以解释,并且还需要适时地在黑板上画出移位指令执行前后,标志寄存器和操作数的变化情况。指令的讲解方法其实和c语言中表达式、语句的讲解方法是一样的,就是通过多个程序实例来进行强化。

(5)首先,在汇编语言开讲的第一节课,给学生多介绍一些汇编语言在将来实际工作中的作用,并以就业为导向,激发学生学习汇编语言的热情。其次,由于学生多数都学习过c语言,因此课堂授课可多与c语言进行对照讲解,例如:在汇编语言的第一节课,就演示一个程序实例,在屏幕上显示“welcome to assembly language”,这是很多c语言的第一节课中常采用的方式。最后,建议尽早地介绍dos和bios系统功能调用,以便学生能进行实际地输入与输出操作,增加学生学习的兴趣。

4 结语

汇编语言范文8

关键词:汇编语言程序设计;高级语言程序设计;比较教学法

“汇编语言程序设计”是计算机相关专业的一门重要课程,目前国内大部分院校的相关专业都有开设。从时间上看,“汇编语言程序设计”一般开设在大学二年级,从课程的衔接上看,则一般开设在“高级语言程序设计”和“计算机组成原理”之后。

汇编语言也好,高级语言也好,它们都只不过是程序设计的工具,因此对于程序的基本功能和程序设计的基本问题,它们都有相应的实现机制,而且在很多方面都是相通的,尤其是在程序设计的基本思想方法上。但汇编语言和高级语言毕竟是两种不同的语言类别。从源程序的基本单位――语句的层面看,高级语言语句的功能远比汇编语言语句即各种指令和伪指令的功能要强大。此外即便是同样的问题,如数据安排、数据处理、流程控制、子程序结构等,它们的实现机制也不一样。

效率最高的教学方法首推比较教学法(或叫类比教学法),也就是将新的陌生的东西和旧的熟悉的东西做比较,找出它们之间相同的地方和不同的地方,然后进行差异化的学习,重在存同求异,这样就会事半功倍。

因此,笔者在多年从事“汇编语言程序设计”的教学中,特别注重以学生在学习高级语言程序设计课程时所获得的知识和体验为基础,将汇编语言和高级语言进行比较教学。

本文就是这一教学方法的经验总结。

1数据的组织安排

程序是用来加工处理数据的,因此程序设计工作离不开数据的组织安排。数据的组织安排就是指为程序加工处理的数据安排合适的空间并且组织好,以提高对数据加工处理的效率。从应用层面看,数据的组织安排通常包括3个方面:

(1)安排在哪?即空间位置问题。

(2)安排多大空间?即数据长度问题。

(3)存放什么样的数据?即数据类型问题。

在数据空间的组织安排方面,汇编语言和高级语言的一个重要差别是:高级语言提供的是直接面向应用的数据类型,如C语言中的基本类型――整型(int)、浮点型(float)、字符型(char),而整型又有长(long)、短(short)之分,浮点型又有单精度(single)和双精度(double)之分,此外还有有符号(signed)和无符号(unsigned)之分等。高级语言的数据类型是面向应用的,因此它们有两方面的含义:类型特点和长度大小,这就解决了上述3个问题中的后两个问题[1]。

在C语言中,数据除了有类型这个概念之外,还有类别之分,即存储类别问题,共有4种:static、auto、register和extern。从严格意义上讲,其中和数据空间的组织安排有关的只是前3种:static和auto对应的是内存空间,而register对应的则是寄存器空间,这又解决了上述3个问题中的第一个问题[1]。

与高级语言不同的是,汇编语言的数据类型是面向机器的,如MASM中的基本类型――DB、DW、DD、DQ、DT等,它们只有长度大小的含义,而且都是对应内存空间的,因此用它们定义的变量都属于内存变量。

在汇编语言中,由于可以直接引用各个寄存器,而且各个寄存器的空间大小都是确定的,因此这些寄存器实际上就相当于C语言中的寄存器变量。

总之,在汇编语言中,数据一般只有空间大小和位置之分,而不管这个空间中存放什么样的数据,即无类型之分。

因此,在用汇编语言设计程序时,对程序中的数据有一个面向应用的自我理解问题!这是在教学时应特别予以关注的!

2数据的加工处理

在数据的输入输出方面,汇编语言和高级语言也有重要差别。

以面向标准输入输出设备的数据输入输出为例,高级语言提供的也是直接面向应用的相关语句、函数和过程,如C语言中的fprintf、printf、sprintf、vprintf、vfprintf、vsprintf、fscanf、scanf、sscanf、fgetc、fputc、getc、putc、getchar、putchar、fgets、fputs、pus、gets等,这些函数基本上满足了面向应用的各种类型数据的输入输出[1]。

汇编语言提供的则基本上是面向字符的中断调用,即通过调用相关的中断服务程序来实现数据的输入输出,如MASM中的常用的DOS提供的21H类中断服务程序的1、2、8、9、10号功能等。

总之,高级语言提供的一般是直接面向应用的输入输出机制,而汇编语言提供的则一般是面向系统的输入输出机制。因此在汇编语言程序设计的教学中,如何利用面向系统的输入输出机制通过编程实现面向应用的输入输出功能是我们的又一个重点。

在数据的内部加工处理方面,高级语言和汇编语言都提供一序列的运算符。

在C语言中,这些运算符包括为数据传送提供的赋值运算符“=”和为数据运算提供的算术运算符“+、-、*、/、%、++、--”、关系运算符“>、>=、

在MASM中,这些运算符包括算术运算符:“+、-、*、/、MOD”,逻辑运算符:“AND、OR、NOT、XOR”,关系运算符:“EQ、NE、LT、GT、LE、GE”,移位运算符:SHR和SHL等[2]。

值得注意的是,除了形式上的差别外,高级语言的运算符和汇编语言的运算符在功能上也是有差别的:高级语言的运算符往往可以用在包括常量和变量的各种数据之间,而汇编语言的运算符则往往只能用在常量之间,对变量的加工处理则是依靠相应的指令来实现的。

3流程控制问题

为了实现流程控制,高级语言都提供有两类基本语句:分支控制语句和循环控制语句,如C语言和PASCAL语言中的if语句、switch语句、for语句、while语句、do-while语句、case语句、repeat语句以及比较特别的goto语句等[1,3]。

汇编语言则提供有相应的流程控制类指令,如MASM中的无条件转移指令(JMP)、条件转移指令(JA、JB、JAE、JBE、JNZ、JZ、JG、JL、JGE、JLE、JO、JNO、JS、JNS、JC、JNC等)、循环控制指令(LOOP、LOOPZ、LOOPNZ)等[2,4-6]。

在功能上,汇编语言的转移类指令既可以用于分支控制,也可以用于循环控制,而循环类指令则自然主要用于循环控制。它们的实现机制在高级语言中也有体现,如C语言中的goto语句。

从功能上看,C语言中的goto语句主要有两种用法:

(1)goto标号;

(2)if条件goto标号。

前一种用法实现的正好是汇编语言中无条件转移指令的功能,而后一种用法实现的则正好是汇编语言中条件转移指令和循环控制指令的功能。

在用汇编语言写分支控制程序时尤其要注意的是,由于只能一个分支一个分支的纵向展开,因此除最后书写的分支外,前面的分支结尾处一般都应该有一条无条件转移指令以跳过后面的分支,避免执行不该执行的分支。

例如:输入一个字符,判断其是否为数字‘9’,若是,则输出字符‘Y’;否则,输出字符‘N’。这是一个简单的二分支问题,其汇编语言程序段如下:

MOV AH,1

INT 21H

CMP AL,‘9’

JZ YES ;开始分支

MOV DL,‘N’ ;第一个分支

JMP EXIT ;避免执行第二个分支

YES:MOV DL,‘Y’ ;第二个分支

EXIT:MOV AH,2 ;汇合点

INT 21H

汇编语言除了提供上述转移控制类指令和循环控制类指令以实现分支程序设计和循环程序设计外,还提供有子程序和中断服务程序的调用(CALL、INT)指令和返回(RET、IRET)指令以及比较特别的重复前缀指令(REP、REPZ、REPNZ)等。

汇编语言的子程序概念和高级语言中的子程序概念、函数概念以及过程概念是对应的,而中断服务程序概念则一般是汇编语言独有的。

如果仅从程序执行机制上看,子程序、函数、过程、中断服务程序的地位是一样的,只不过是在不同的语言环境中采用了不同的称呼而已。

主程序和子程序、函数、过程、中断服务程序之间的流程控制都是通过调用与返回实现的,差别是:在高级语言中,主程序和子程序、函数、过程之间的流程控制是通过直接引用子程序、函数或过程的名字(加上适当的参数)来实现的[1,3];而在汇编语言中,主程序和子程序、中断服务程序之间的流程控制是通过前面提到的专门的控制指令(CALL、RET、INT、IRET)来实现的。

4子程序问题

前已述及,汇编语言的子程序结构相当于高级语言中的子程序、函数和过程。

在采用子程序结构时,一个重要的问题就是参数传递。主程序在通过调用子程序为自己解决某些问题时,通常需要为子程序提供一些相关的数据,子程序在内部对这些数据做相应的加工处理后应该将处理结果返回给主程序,这就是所谓的参数传递问题。主程序提供给子程序的数据通常叫做入口参数,而子程序返回给主程序的数据则通常叫做出口参数。

汇编语言子程序的参数传递和高级语言中子程序、函数或过程的参数传递机制从本质上看是一致的。

需要做参数传递时,通常有两种选择:一种方法是直接传递所需要的数据,另一种方法是传递所需数据的位置信息即内存地址。第一种方法即通常所说的值传递,第二种方法即通常所说的地址传递。需要注意的是,传地址的目的也是为了传数据。

从表象即实现形式上看,汇编语言子程序的参数传递和高级语言子程序的参数传递却有着不小的差别。

在高级语言中,函数在定义时往往就有参数说明,如C语言的函数定义格式如下:

类型 函数名(形式参数表)

{

函数体

}

高级语言的函数在调用时需要同时提供参数,一般格式是:函数名(实际参数表)。而在汇编语言中,子程序在定义时不需要有关参数的说明,在调用时自然也就无需同时提供参数。

如在MASM中,子程序的定义格式为:

子程序名 PROC

子程序体

子程序名 ENDP

子程序的调用格式则为:CALL子程序名

由此可见,高级语言中函数的参数传递是显式进行的,较之汇编语言子程序中隐式进行的的参数传递问题要易于实现和理解接受一些。因此,汇编语言中的子程序的参数传递问题就是教学中的一个重点内容。

在汇编语言中,为了实现子程序的参数传递,不管是采用值传递还是采用地址传递,都需要由程序设计者事先安排好一个第三方空间。值传递时将所需要的数据本身放在这个事先安排好的空间中,而地址传递时则将存放所需要的数据位置信息即内存地址放在这个事先安排好的空间里。

在安排用于参数传递的第三方空间时,既可以安排寄存器,也可以安排内存单元,还可以安排堆栈。因此具体的参数传递方式灵活多样,而且各有各的优势,在实际应用中通常综合以上各种做法以求达到最佳效果[2,4-6]。

5结语

限于篇幅,以上仅就程序设计的几个主要方面作了比较论述,而且主要是从实现机制的角度来谈,因此细节的东西基本上都省却了。事实上,在其他方面,汇编语言和高级语言也具有一定的可比性。

实践证明,通过比较教学,一方面可以利用学生已有的知识和体验帮助他们更好地学习汇编语言的相关知识,即把他们在高级语言程序设计中获得的有关程序设计的基本思想方法和规律迁移到汇编语言程序设计的学习中来,进行差异化的学习,极大地提高学习效率;另一方面,可以让同学们通过比较,把以前在学习高级语言程序设计时遗留的一些问题甚至没有意识到的问题搞清楚,起到融会贯通、触类旁通的作用。

总之,通过比较教学,不仅可以提高学生的学习效果和效率,而且新旧知识可以相得益彰。

参考文献:

[1] 谭浩强. C程序设计[M]. 3版. 北京:清华大学出版社,2005.

[2] 曹加恒,苏光奎,许先斌,等. 新一代汇编语言程序设计[M]. 北京:高等教育出版社,2003.

[3] 郑启华. PASCAL程序设计[M]. 2版. 北京:清华大学出版社,1996.

[4] (美)欧文. Intel汇编语言程序设计[M]. 5版. 温玉杰,梅广宇,罗云彬,译. 北京:电子工业出版社,2007.

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

[6] 钱晓捷. 新版汇编语言程序设计[M]. 北京:电子工业出版社,2006.

The Comparative Teaching Method of “Assemly Language”

XIONG Xiao-bing

(Computer School, Wuhan University, Wuhan 430079, China)

汇编语言范文9

微机原理与接口技术是计算机类学科的专业基础课之一,讲过和学过这门课的教师和学生都知道这门课“很难学”,特别是对于职教的学生来说,如何让他们学好这门课,是我们职教教师所面临的严峻挑战。

汇编语言在微机原理与接口技术中占有十分重要的地位,大部分学生觉得这门课难学或对这门课失去学习热情的很大一部分原因在于对汇编语言的学习产生了畏难情绪。诚然,汇编语言是一门低级语言,就8086来说,它就有115个指令,给学生的学习造成了很大的负担。但是,如果教师采用方法得当的话,可以让学生感觉汇编语言“很易学”,甚至让他们“爱上”它,这并非没有可能。本人就对汇编语言的热爱,谈谈在教授这门课时的一点心得体会。

一、提高学习兴趣,激发求知欲

俗话说:兴趣是最好的老师。一个人只有对某个问题产生兴

趣,才会主动去寻找解决它的办本文由收集整理法,才会主动获取相关的知识。因此,在教学过程中,教师的重要任务之一就是激发学生的学习兴趣。

第一次课很重要。对于大多数职教学生来说,他们只对最新的、实用的知识感兴趣,如果要他们去学习一些理论性的、陈旧的内容的话,他们必然会失去兴趣。所以,在我们上第一次课的时候,就需要强调本门课的重要性,让他们觉得学习这门课的用处很大。比如,我的第一堂课是在多媒体教室上的,这堂课主要展示汇编语言的一些实用技巧:利用汇编语言破解cmos密码;利用汇编语言程序控制计算机主机中小喇叭发出的声音;利用汇编语言程序播放音乐;借助特定软件用汇编语言破解某个软件的注册码。让学生记下相应的程序与操作,在下一节课上机房完成相应的操作,让学生收获成功的喜悦。这两节课的主要目的是让学生领略汇编语言的魅力及其实用性,为以后的学习做铺垫。在后续的学习过程中,在原有知识的基础上可以增加一些实用性的内容,以维持他们的学习兴趣。

二、讲课内容打乱教材顺序,抽取精髓,激励学生主动获取知识

就8086 cpu来说,它具有115个指令,这么多指令介绍完的话,时间是肯定不允许的。如果真要这么做的话,枯燥的指令会打消学生的学习积极性。所以,在具体教学过程中,肯定得有所删减。

在教学过程中,我们应该从教学内容选择、教学方法的改进等多方面下手。例如,在介绍8086指令时,选择重点指令,不必将所有指令一个个详细地讲解。教学中,教师应该尽早引导学生上机练习,编写有交互性的程序,尤其应该有显示结果,使学生有成就感。

在学的过程中,希望学生不要急功近利、太过浮躁。学习的重点不是语言本身,而是编程思想和方法,通过汇编语言学习,更好地理解微机内部工作原理,熟悉底层程序设计的思路。

三、遵循循序渐进原则,尽量与原有的知识相联系

学生在学习汇编语言时,会遇到各种各样的困难,比如,很多指令格式很相似,一些指令格式有太多的限定,指令操作数的形式多样等,从而对汇编语言产生了恐惧感,不知怎样学习,心里很茫然。由于汇编语言的特点,初次接触的确有些困难,习惯了高级语言的自然表达,一时无法适应低级语言的生硬规则是产生恐惧感的一个重要原因。

1.教学过程要遵循循序渐进原则,不要急于求成

在介绍指令的格式和功能时,如mov指令,对它格式的限定

太多,如果在学生基本的指令功能还没掌握的情况下,就给指令的使用加上条条框框,那只会使学生在具体写指令的时候疑神疑鬼,失去写程序的勇气。对于这些格式的限定可以在学生具有一定的基础后安排一节上机课,让学生把一些错误的情况找出来,然后教师总结,在以后的学习过程中慢慢掌握指令的格式。再如,学习汇编语言编程时本文由收集整理,我们教师的重点不是去教学生编程,而是要让学生先学会看懂程序,然后在一定的阅读程序的基础上再尝试让学生编程,由易入难,由浅入深,让学生逐步掌握。

2.学习指令功能时尽量与原有知识相联系

汇编语言范文10

关键词:汇编语言;排序;冒泡排序

中图分类号: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].清华大学出版社

汇编语言范文11

关键词: 微机原理; 汇编语言; 教学方法; 考核

中图分类号:G642.0 文献标志码:A 文章编号:1006-8228(2015)05-64-02

Abstract: "microcomputer principle and assembly language" is a basic course in computer science. This paper describes the importance of the curriculum of "microcomputer principle and assembly language" in independent college and the teaching techniques in the teaching process such as Multi-media technology, contrast teaching, group discussion. According to author's teaching experience, puts forward the improvement of the teaching skills to improve the teaching effect and the students' interest in learning, enhance students' ability to analyze and solve problems, studies the selection of teaching materials and the curriculum evaluation methods, and proposes the feasible evaluation method.

Key words: microcomputer principle; assembly language; teaching methods; assessment

0 引言

微机原理与汇编语言是工科院校计算机专业学生必修的一门专业基础课程,该课程是各大院校多年来针对微机原理与汇编语言的授课过程、授课内容研究之后提出的一门课程,基于两门课程教学内容的相关性,目前课程的授课结合了微型计算机与汇编语言的介绍[1]。该课程的内容偏重硬件,这也是大多数学生在学习过程中颇感吃力的原因,另外,由于学生在学习该课程之后不能直接应用于实践,降低了学生的学习积极性。汇编语言(又称为符号语言)灵活性比较差,需要记忆大量的指令,这也给该课程增添了难度。本文结合作者几年来对该课程的授课经验,探讨能够提高授课质量的教学方法。

1 独立学院开设该课程的重要性

结合我院以培养实践应用型人才为目标的培养计划,在教学中注重培养学生的实践动手能力,微机原理与汇编语言课程在工科院校计算机专业是一门重要的专业基础课程,为后续的软硬件课程(接口、操作系统、软件工程)教学有着重要的影响。通过该课程的学习,使学生能够建立对计算机系统的整体认知体系,并初步具备相应的软、硬件设计开发能力和创新能力。

2 教学内容的改革

目前大多数院校对该课程的授课主要是采用Intel8086系列16位机为主要教材[2]。主要介绍CPU的内部结构、存储器的组织方式、指令系统与寻址方式、汇编程序的基本结构、高级汇编技术及相应的接口芯片。随着电子技术的发展,市面上的芯片层出不穷,电子产品的更新速度很快,作为培养未来技术人才的高校不能停留在教授70年代的知识,陈旧的教学内容虽然比较成熟并具有代表性,但是同时也会影响学生学习的积极性[3]。因此,需要授课教师不断地提高自身的专业素养,紧跟时代的潮流,在授课的过程中穿插介绍一些当代流行的技术,比如目前企业常用的接口芯片、总线技术、存储技术等,在提高授课效果的同时提高学生的学习积极性。

3 完善教学手段,改革教学方法

3.1 采用现代化的多媒体教学手段

由于这门课程知识量比较大,原理性比较强,内容比较抽象,逻辑性较差,因此,如果仅仅采用传统的授课方式,学生在学习的过程中容易减少学习兴趣,影响学习效果。授课过程采用多媒体教学使学生能够直观地了解教学内容。现在的多媒体制作软件不仅能制作静态的文字演示,也能制作动画,以动画的方式进行教学演示,在授课中结合使用这些方法能帮助学生对内容的掌握,例如在介绍8086CPU的内容结构、工作原理时,可以采用FLASH动画的形式进行讲解,通过多种指令的执行,动态地演示不同指令在执行过程中BIU和CU之间是如何相互配合完成指令的执行。例如8086CPU的7种寻址方式过程中采用动态的演示,能够更形象、更直观地使学生了解不同的寻址方式,并能够区分出其不同之处。又例如在介绍寄存器寻址和寄存器间接寻址及寄存器相对寻址时,重点通过动态的演示让学生掌握三种寻址方式的不同点。

3.2 采用对比式的教学方式

采用对比式的教学,包括本课程的介绍和其他课程的对比,可以将汇编语言的程序设计方法和高级语言C的基本结构进行对比介绍,使学生进行对比记忆,掌握高级语言和低级语言的相同点及不同点[4]。可以在课程本身的内容中进行对比讲授,如在介绍前两章内容时介绍8086CPU的内部结构和工作原理,同时与8088CPU进行对比介绍。例如8086的指令预取队列为4个字节,而8088为6个字节,8086的数据总线为16位,8088的数据总线是8位;存储器的组织与寄存器的对比介绍,两者都是用来存储程序和数据的,但是又有不同的地方,在介绍时重点介绍其不同点;7种寻址方式的对比讲授;各种指令的介绍,比如带进位的加减法指令和不带进位的加减法指令有什么不同。可以采用对比进行授课的内容如表1所示。通过这样对比的学习可以加深学生的理解和记忆,提高学生的学习兴趣。

3.3 启发式和分组式的教学方式

独立学院的学生由于各种原因学习程度参差不齐,在教学中容易造成两极分化,结合我院学生的实际,需要根据学生的学习情况进行教学调整,可以采用启发式的引导性教学,以启发学生的思维为核心,调动学生的学习积极性和主动性[5]。在授课过程中对学生进行分组,分组应考虑学生之间可以相互帮助共同进步从而可以提高学生整体的学习效果。在每一章节讲授完后根据内容提出相应的问题,让学生分组讨论,在相互交流中提出自己的观点,相互启发、相互学习,通过查阅资料、讨论、取长补短,完成课题,这样可以引导学生的学习兴趣,激发出学生的智慧。

4 教材的选取

在授课之前,首先要选择适合我院学生的教材,教材难度适中,浅入易懂,教师好教,学生好学。同时制定相应的授课计划,根据课时计划精简章节,针对学生加强实践动手能力的培养。在授课过程中根据实际情况调整授课顺序,例如将微机结构和功能的介绍与汇编语言的介绍穿行,加深学生对计算机硬件理论知识的掌握,同时掌握基于硬件的编程语言汇编语言的设计技巧。

5 考试制度的改革

课程的考核摒弃传统的单一闭卷考试形式,对学生的考核根据闭卷考试成绩、平时出勤、作业完成情况和实验成绩。加大实验成绩及教学过程中分组讨论的成绩比例,侧重考核学生的设计能力和创新能力,秉承独立学院以培养实践应用型人才的目标,注重学生实践动手能力的培养。在教学过程中进行分组讨论教学的目的是提高学生的整体水平和学生的个体能力与素质。最终的成绩由四部分组成:卷面成绩+平时成绩+分组成绩+实验成绩。

6 结束语

本文根据作者多年从事微机原理及汇编语言课程的教学体会,提出了针对独立学院的学生在教学内容、授课方式、教学手段和课程考核方式等方面的一些观点。通过采用现代化的多媒体授课、对比式的教学和分组讨论的教学方法及措施,明显地提高了学生的学习兴趣,学生的学习成绩有明显提高。微机原理及汇编语言作为一门实践性比较强的课程,在提高其理论教学效果的同时,更要注重于学生动手能力的培养,因此,在提高学生的实践能力方面我们还需要进行深入的研究以取得更为有效的方法。

参考文献:

[1] 蒲攀,张建锋.微机原理与应用教学改革与探索[J].教育管理,2009.3:96-97

[2] 刘柱鸿.谈微机原理与汇编语言的教学改革[J].零陵学院学报(教育科学),2004.2(1):170

[3] 叶安新.《微机原理与接口技术》课程教学的实践与探索[J].电脑知识与技术,2010.31:8822-8823

[4] 周明德.微机原理与接口技术[M].人名邮电出版社,2002.

汇编语言范文12

关键词:SAL,指令,行汇编,溢出

 

一、发现问题在DEBUG程序中,在使用A命令进行行汇编时,发现四条移位指令中SAL指令不能被识别,而其余三条指令正常(如图1所示),即DEBUG的A命令不支持这条指令。但是我们将SAL写入汇编语言源程序中(.ASM)进行编译,则不提示出错(如图2所示)。

图1

图2

为什么同样是8086指令系统中的移位指令,唯独“SAL”指令在“DEBUG”中遭到如此“不公正”的待遇呢?

二、进一步研究问题当我们将包含“SAL”指令的源程序进行编译、连接,再将生成的EXE文件用DEBUG程序的U命令进行反汇编时,发现SAL指令在编译过程中被编译程序替换为SHL指令(如图3所示),而原来的“SHL”指令却没有变。

图3

三、思考问题,寻求答案1.关于SAL指令和SHL指令SAL指令是8086汇编语言中的移位指令。8086汇编语言中的移位指令分为算术移位指令和逻辑移位指令。算术移位是对带符号数进行移位操作,在移位过程中必须保持符号不变;而逻辑移位是对无符号数进行移位操作,总是用“0”来填补已空出的位。而8086汇编语言中的移位指令共有四条,分别是:算术左移指令SAL,算术右移指令SAR,逻辑左移指令SHL和逻辑右移指令SHR。

为什么8086汇编程序的编译器会将算术左移替换为逻辑左移呢?

2.移位的实质我们都知道,对于一个二进制数来说,左移1位相当于将这个数乘以2,右移1位相当于将这个数除以2。而在计算机中,数一般都是以补码的形式存储的。这样一来,对于有符号数,移位(左移或右移)就可能会造成其符号位的改变。在移位指令中分算术移位指令和逻辑移位指令的目的也在于此。。在算术移位中,要求保证被移位数的符号位不变,对于右移指令,移位时用符号位的值对空出来的符号位进行填充即可保证符号位的值不发生变化;而左移指令在执行时,只能用最高数值位对符号位进行填充,这样一来,就不能保证不让符号位发生变化了。。实际情况是怎样的呢?我们用一些实例来说明这个问题。

(1)正数的向左移位

( 1)

=00000001Bà(左移1位)à00000010 B =(2)

( 2)

=00000010B à(左移1位)à00000100 B =(4)

( 4)

=00000100B à(左移1位)à00000100 B =(8)

( 8)

=00001000B à(左移1位)à00001000 B =(16)

(16)

=00010000B à(左移1位)à00010000 B =(32)

(32)

=00100000B à(左移1位)à00100000 B =(64)

(64)

=0 1000000 B à(左移1位)à10000000 B =(-128)

符号位 最高数值位

从上面的移位结果来看,只有当最高数值位上为1(其真值大于等于64)时,向左移位才会导致符号位发生变化。而对于一个不小于64的数,其乘以2的结果至少为128,已经超过8位二进制有符号数所能表示的最大范围(-128~+127)了,运算结果溢出了。也就是说,只要运算结果不溢出,就可以保证移位后的符号位不发生变化,也就可以保证移位的正确性了。

(2)负数的向左移位

(- 1)

=11111111B à(左移)à11111110 B =(-2)

(- 2)

=11111110B à(左移)à11111100 B =(-4)

(- 4)

=11111100B à(左移)à11111000 B =(-8)

(- 8)

=11111000B à(左移)à11110000 B =(-16)

(- 16)

=11110000B à(左移)à11100000 B =(-32)

(- 32)

=11100000B à(左移)à11000000 B =(-64)

(- 64)

=11000000B à(左移)à10000000 B =(-128)

(-128)

=1 0000000 B à(左移)à00000000 B =(0)

符号位 最高数值位

从上面的移位结果来看,只有当最高数值位上为0(其真值小于-64)时,向左移位才会导致符号位发生变化。而对于一个小于-64的数,其乘以2的结果最大超不过-128,已经超过8位二进制有符号数所能表示的最大范围(-128~+127)了,运算结果溢出了。也就是说,只要运算结果不溢出,就可以保证移位后的符号位不发生变化,也就可以保证移位的正确性了。

从上面的对于正、负二进制数的移位结果来看,只要乘以2后不溢出的数,向左移位都可以保证其符号位的值不改变。所以,完全可以将用逻辑左移替代算术左移。

四、结论及意义综上所述:无论是正数还是负数,只要是乘以2后不溢出的数,向左移位都可以保证其符号位的值不改变(而移位后溢出的数,其符号位必定会发生改变)。。所以,在进行左移操作时,可以不考虑逻辑移位和算术移位的区别。

而我们都知道,指令系统和硬件是密切相关的,每一条指令都对应着相应的硬件实现。指令越复杂,硬件实现越困难;同样,指令数量越多,硬件也越难以实现。所以,在不影响系统功能的情况下,减少一条指令(用其它的指令替代)不但能简化机器的硬件结构,还可以提高硬件的集成度,是硬件设计者和制造商都乐意而为之的;对用户的使用是没有影响的。虽然我们看到的现象是在“DEBUG”中,SAL指令不能被识别;在汇编过程中,用SHL指令替换SAL指令,但是这样做是有意义的。故笔者认为,在8086汇编语言的编译过程中,使用SHL指令替换SAL指令不但是可取的,而且是提高效率的一种做法。

参考文献:

[1]李继灿.《新编16/32位微型计算机原理及应用》[M].北京:清华大学出版社,2004.1.

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