首页 > 范文大全 > 正文

汇编语言在当今软件设计领域中能否生存

开篇:润墨网以专业的文秘视角,为您筛选了一篇汇编语言在当今软件设计领域中能否生存范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:汇编语言是一门低级程序设计语言,它主要的功能是直接对硬件进行控制。虽然它是一门面向机器的语言,在可读性和移植性方面不及高级程序设计语言好,但用它所编写出来的程序能够在各种控制芯片上直接执行,具有效率高、反应快的特点,这是其它高级程序设计语言所无法超越的,所以汇编语言在当今软件设计领域中是无法被其它高级程序设计语言所替代的。

关键词:汇编语言;效率;硬件

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)16-31084-02

Whether Does the Assembly Language Survive in Now the Software Design Domain

LUO Jian-hua

(Heyuan Professional Technical Institute,Heyuan 517000,China)

Abstract:The assembly language is a preliminary programming language, its main function directly carries on the control to the hardware. Although it is a facade to the machine language, is inferior to the high-level programming language in the readability and the transplant aspect good, but the procedure which compiles with it canon each kind of control chip directly carry out, has the efficiency to be high, to respond quick characteristic, this is other high-level programming languages is unable to surmount, therefore the assembly language is unable in now the software design domain by other high-level programming languages to substitute

Key words:Assembly language; Efficiency; Hardware

汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 高级语言的优点是可读性好,移植容易,是普遍使用的一种计算机语言。但它所占用资源较多,执行效率没有汇编语言高。可以说,这两类语言各有优缺点,在当今的软件设计领域中是不能相互替代的,下面我就从汇编语言的不同方面来阐述它的不可替代性。

1 汇编语言程序的工作过程

汇编语言是一门面向机器的语言,用它编写的程序只需要通过“代真”就可以被翻译成机器所能识别的机器语言指令,从而利用它可以编写出的程序效率高。而高级语言要想变成二进制的代码,必须要进行一系列的过程。例如C语言,编写好一个C语言到完成运行要经历编辑、编译、连接、执行等多个阶段。所以编写出的程序运行时间较长、存储空间大,程序效率与汇编语言相差甚远。

2 汇编语言与高级程序设计语言(C语言)的比较

汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高,程序运行速度快。汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少的单片机开发中,如果开发者的水平比较高而要开发的系统不是很复杂的话,应该是采用汇编语言比较好。由于汇编语言可以表达非常底层的东西(如下) :

(1)可以直接存取寄存器和I/O;

(2) 编写的代码可以非常精确地被执行;

(3)可以编写出比一般编译系统高效的代码;

(4)可以作为不同语言或不同标准的接口等。

以上特点是其他语言不可超越的优势,故其还是深受那些运行速度和容量控制严格的系统编程人员的喜爱。任何的编程语言,只要融会贯通,灵活运用,都可以成为人们的最爱。汇编语言是公认的效率最高的计算机语言,有时比高级语言的功能还要强大。举例说,在实时性上C语言就有很大的弱点,无法预测代码执行的指令周期。在这里不妨用下面的例子说明一下此问题。

我们来做个20us的延时程序,使用汇编语言(使用12M晶振),如下面语句就可以达到要求了

MOV R0,#09H

LOOP: DJNZR0,LOOP

使用C语言如何实现呢?C语言的灵活性也许会写出多种不同的实现方式,下面是列出的几种:

void delay_1(unsigned char i)

{

for(; i != 0; i--);

}

void delay_2(unsigned char i)

{

unsigned char a;

for(a = i; a != 0; a--);

}

void delay_3 (unsigned char i)

{

while(i--);

}

void delay_4(unsigned char i)

{

while(--i);

}

这些不同的写法,是否都是高效的?生成的代码是否一致呢?把这些写法使用KEIL C反汇编后,由于篇幅限制仅把delay_1()函数反汇编的结果列出如下:

0000 ?C0007:

0000EFMOV A,R7

00016003JZ?C0010

00031FDEC R7

000480FASJMP?C0007

0006 ?C0010:

000622 RET

我们会发现只有delay_4( ) 生成的代码同汇编的效率是一样的,其它的写法都存在时间的不确定性。

其实,深究之下就会发现,所谓的高级语言,只是使用了一些格式化的框框,把人的想法直接组合成面向过程的指令,或者面向对象的类。这类语言入门是简单的,到达目的地是曲折的。这就好像有一条明朗宽敞的大道把你引到迷宫入口,让你在人为制造的千丝万缕、错综复杂的环境里到达目的地,殊不知在入口旁边有一个不起眼的长满荆棘的羊肠小道直通目的地。