您的位置:首页 > 网页编程 > linux >
高级程序设计语言之什么是汇编语言
时间:2013-11-17 23:54来源:未知 作者:66php 点击:
/**谷歌广告**/

    为早期计算机系统开发软件是一项非常复杂和繁琐的工作。那个时期的计算机系统远不像今天的个人计算机那样距离我们如此之近,为其开发软件则也必然只是少数顶级专家们的专利。最初的计算机程序只是由专家们编写出的一系列二进制数字,然后人们将其刻到纸带上,通过专门的纸带阅读设备将其输入计算机中。然而,随着需要编写的程序在数量和复杂性上的增长,人们发现直接面对二进制数据进行程序设计过于繁琐。为了解决这一问题,计算机软件设计者们设计了汇编语言和能够将汇编程序翻译为计算机可执行的二进制指令编码的汇编器。早期的汇编语言和CPU的硬件指令非常类似,因此实现这样一个简单汇编器的方式也通常比较直接。例如,可以将某条汇编语句直接映射到其对应的指令编码, 和直接理解二进制代码相比,汇编语言的出现,显然给那个时代的软件设计者们带来了巨大的方便和更高的生产力。        
    现代汇编语言为了支持模块的动、静态链接和地址重定位等技术,通常都更为复杂。为了给汇编程序设计者提供更多方便,出现了各种“宏汇编”,以支持对复杂表达式等的直接表示。
    然而对于今天的大多数程序设计人员来说,汇编语言已经成为了一个既熟悉又陌生的概念。导致汇编语言使用逐渐减少的一个根本原因,就是出现了具有更为丰富表达能力的各种高级程序设计语言(High Level Programming Language,HLPL)。实际上,稍加比较我们就不难发现,用高级语言编写程序要比用汇编语言编写程序具有更多的优点。首先看一个例子。  
    例1.1  对于C语言程序员来说,编写表达式x=a+b+c+d非常简单。但如果用汇编语言来写,则不得不写出多条语句(采用Intel CPU的汇编):  mov  eax,dword ptr [ebp-8] add   eax,dword ptr [ebp-0Ch] add   eax,dword ptr [ebp-10h] add    eax,dword ptr [ebp-14h]  编译原理  mov  dword ptr [ebp-4],eax  汇编程序的第1条语句将变量a对应的值放入eax寄存器中。第2条语句将变量b的值和eax寄存器中的值相加,结果放入eax中(即执行a+b)。第3条、第4条语句将a+b的结果与c相加,将a+b+c的结果与d相加,结果放在eax寄存器中。最后一条语句将最终结果(即a+b+c+d)放入变量x的内存地址中。  对例1.1进行分析,不难得出如下结论。  
    (1)高级语言为程序员提供了更为方便、快捷的编程工具。毫无疑问,上面的C语言程序更为简洁紧凑,而且也不需要理解Intel CPU底层所使用的寄存器与内存访问指令。  
    (2)高级语言与硬件无关。汇编语言的定义和CPU的指令系统直接相关,因此不同CPU甚至同一系列不同型号CPU的指令系统都会不同。这就导致在Intel处理器下编写的汇编语言程序无法在非Intel处理器(如IBM的Sparc处理器或ARM处理器和DSP处理器)上执行。  与汇编语言相反,C语言程序在大多数情况下对于不同的硬件环境来说具有相同的含义。这主要是由于该程序中只定义了a、b、c、d和x这些抽象的数学变量及其运算规则,而对于这些数学概念如何在CPU中实现则不做具体规定(例如,Intel CPU不允许对两个内存变量进行直接计算,而必须至少使用一个寄存器)。  虽然不同的计算机硬件系统在实现这些抽象概念时采用的方式不同,但却能得到相同或相似的执行结果 2。因此,只要能够将高级语言编写的程序等价地转换为特定硬件平台所支持的方式来实现(即汇编程序或机器指令序列),那么软件设计师就不必为每种硬件平台重新编写具有相同功能的软件。

    0%
    (0)
    0%
    (0)
    最新评论
    选择评论类型:
    验证码:点击我更换图片
    本站推荐
    /**谷歌广告**/
    关于我们 | 网站地图 | rss地图 | 广告服务 | vip源码 | 联系我们
    Powered by 66php Copyright 2011-2013
    苏ICP备11045037号