概述
机器语言是一种cpu指令系统,也称为cpu的机器语言,它是cpu可以识别的一组由0和1序列构成的指令码。用机器语言编写程序,就是从所使用的cpu的指令系统中挑选合适的指令,组成一个指令序列。这种程序可以被机器直接理解并执行,速度很快,但由于它们不直观、难记、难以理解、不易査错、开发周期长,所以,现在只有专业人员在编制对于执行速度有很高要求的程序时才采用。3
为了减轻编程者的劳动强度,人们使用一些用于帮助记忆的符号来代替机器语言中的0、 1指令,使得编程效率和质量都有了很大的提高。由这些助记符组成的指令系统,称为汇编语言。汇编语言指令与机器语言指令基本上是一一对应的。因为这些助记符号不能被机器直接识别,所以汇编语言程序必须被编译成机器语言程序才能被机器理解和执行。编译之前的程序被称为“源程序”,编译之后的程序被称为“目标程序”。3
用汇编语言编写的程序代码针对性强,代码长度短,程序执行速度快,实时性强,要求 的硬件也少,但编程繁琐,工作量大,调试困难,开发周期长,通用性差,不便于交流推广。
汇编言与机器语言都是因CPU的不同而不同,所以统称为“面向机器的语言”。使用这类语言,可以编出效率极高的程序,但对程序设计人员的要求也很高,他们不仅要考虑解题思路,还要熟悉机器的内部结构,所以,一般的人很难掌握这类程序设计语言。3
发展每种计算机都有自己独特的机器指令,比如,某种型号的计算机用8位二进制信息10001010表示加法指令,用00010011表示减法指令,等等。这些指令的执行由计算机的线路来保证,计算机在设计之初,先就要确定好每一条指令对应的线路逻辑操作。计算机处理信息的早期语言是所谓的机器语言,使用机器语言进行程序设计需要面向机器来编写代码,即需要针对不同的机器编写诸如01011100这样的指令序列。用机器语言进行程序设计是一项累人的工作,代码难以阅读和理解,一个简单的任务往往蕴含着编写大量的代码,而且同样的任务需要针对不同型号的计算机分别进行编写指令,因为一种型号的计算机用10001010表示加法指令,而另一种型号的计算机可能用11110000表示加法指令。因此,使用机器语言编程也称为面向机器编程。20世纪50年代出现了汇编语言,在编写指令时,用一些简单的容易记忆的符号代替二进制指令,但汇编语言仍是面向机器语言,需针对小同的机器编写不同的代码。习惯上称机器语言、汇编语言是低级语言。4
分类计算机语言有多种分类方法,按照是否面向机器可以分成面向机器的语言和非面向机器的语言。面向机器的语言又分为机器语言和汇编语言,这种语言也称作计算机低级语言。其他计算机语言均为非面向机器的语言。
机器语言是以二进制代码组成的机器指令集合.这种语言编制的程序运行效率极高,但程序很不直观,编写很简单的功能就需要大量代码,重用性差,而且编写效率较低,很容易出错。2
汇编语言比机器语言直观。它用助记符代替二进制代码,编程工作相对机器语言简化,使用起来方便了很多,错误也相对减少;但不同指令集的机器仍使用不同的汇编语言,程序重用性也很低。2
机器语言机器语言程序由机器指令构成,这些机器指令按照执行顺序依次排列,运行时依次执行完成某个特定的计算或任务。
机器指令是CPU能直接识别并执行的指令。机器指令由物理部件的若干位二进制0、1状态体现,机器指令程序运行前需要存储到内存,正确的机器指令一旦送入CPU被译码后就将变成动作予以执行。
如图1-1所示,机器指令面向机器,因机器而异。不同的机器具有不同的机器指令,因而具有不同的机器语言。所谓不同的机器,是指具有不同CPU(中央处理器)的计算机。由于机器指令与CPU紧密相关,所以不同种类的CPU所对应的机器指令也就不同,而且它们的指令系统往往相差很大。但对同一系列的CPU来说,为了满足各型号之间良好的兼容性,设计者一般要做到:新一代CPU的指令系统必须兼容先前开发的同系列CPU的指令系统。只有这样,先前开发出来的各类程序在新一弋CPU上才能正常运行。5
机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。
由于机器指令由物理部件的若干位二进制0、1状态体现,因此机器指令的最直接的记忆形式就是表示这一指令状态的二进制数,这个二进制数就称作该机器指令的二进制代码指令。由于二进制数和八进制数,以及十六进制数的特殊关系,因此该二进制代码指令对应的八进制数和十六进制数分别称作该机器指令的八进制或十六进制代码指令。
例如:B233H就是一条80*86的十六进制机器代码指令,这条指令的功能是将33H这个十六进制数送到DL寄存器。该机器指令的二进制代码指令是:1011001000110011,指令长度16位。5
显然二进制代码指令与其状态对应直观,但记忆困难。而十六进制代码指令则方便记忆。因此80*86的代码指令通常都用十六进制表示。
用机器指令所写的程序称作机器指令程序,机器指令程序也指刚代码指令所写的程序。机器指令程序遵循冯·诺依曼原理:用二进制表示数,程序与数据都存储在同样的存储器,程序指令一般按存取顺序执行。
计算机出现初期只有一种机器语言,程序员只能用代码指令编写程序,即机器语言程序。用机器语言编写程序是相当艰苦的工作,必须由经过严格训练的专业技术人员承担,这是早期计算机之所以不能够广泛应用的最大障碍之一。
一方面机器语言十分重要,必须了解;另一方面机器代码指令程序使用又十分困难;因因此唯一能够替代机器语言的汇编语言就成为计算机科技人员必须掌握的一种计算机语言。5
汇编语言虽然用机器语言编写程序有许多不便,但程序执行效率高。所以,在保留“程序执行效率高”的前提下,人们开始着手研究一种能大大改善程序可读性的编程方法。即选用能反映机器指令功能的单词或词组来代替该机器指令的操作码,选用相应的符号表示CPU内部资源和内存等操作数,这就是汇编指令。5
例如,汇编指令:
MOV AL,BL其对应的二进制指令为:1101100010001000,十六进制代码指令则为D888H,可见记忆机器指令相当困难。
而汇编指令中MOV源于Move,表示传送指令;AL、BL分别表示80x86的AL和BL寄存器。指令功能是将BL寄存器中的内容传送到AL寄存器。如此,令人难懂的二进制机器代码指令或十六进制机器代码指令就可以用通俗易懂的、具有一定含义的符号指令来表示了,这就是汇编指令的原意。我们称这些具有一定含义的符号,例如上述指令中的MOV,为助记符。用助记符、符号地址等组成的符号指令称为汇编格式指令或汇编指令。
因此,用助记符表示的机器指令称作汇编指令,用汇编指令编写的程序称作汇编指令程序。但汇编指令最终必须翻译成机器指令才能够在计算机上执行。5
汇编语言是汇编指令集、伪指令集及其使用规则的统称。能够一对一地翻译成机器指令的这种用助记符表示的机器指令称作汇编指令。伪指令则是出现在汇编语言程序中的一些辅助性的说明,它不对应具体的机器指令,而是程序设计者与汇编过程中的翻译程序(即汇编)、连接程序,以及执行时如何装入的一种约定。
用汇编语言编写的程序称作汇编语言程序,或汇编语言源程序,也简称为源程序。汇编语言程序较之机器指令程序容易理解和维护。5
汇编语言源程序是一个文本文件,它必须经过翻译才能够变成可执行的机器语言程序,这个翻译过程称作汇编。汇编的核心过程是将汇编指令逐条翻译成机器指令,这正是汇编语言中“汇编”一词的含义。
80x86汇编语言源程序扩展名为.asm,经过汇编以后生成的浮动地址二进制文件扩展名为.obj,.obj文件需要经过连接才能够生成可执行文件.exe。.exe是一个可以由操作系统执行的机器指令程序。图1-2给出了一个简单汇编语言程序与其机器指令程序之间的对应关系。5
尽管不同的CPU有不同的汇编语言,但不同种类的汇编语言都有其共同规律。因此,学会一种汇编语言,再学习其他汇编语言就相对容易多了。
机器语言与汇编语言机器语言是计算机唯一能接受和执行的语言。一条指令规定了由软件工作者要求计算机执行的一个基本动作。计算机CPU所能懂得的指令的全体,称作该计算机的指令系统。不同型号或系列的CPU,其指令系统不同。因为机器语言直接依赖CPU,所以可移植性差、重用性差。5
计算机的指令系统有定长的和不定长的,80x86是不定长的指令系统,一条机器指令依功能不同可能是l~6字节长度。
机器指令的所有字节,按二进制位分成若干字段,不同字段代表不同的含义,但必须有有操作码字段和操作数字段。操作码表明做什么,操作数表明如何做。操作数依功能不同,可能没有,也可能有一个或多个。
二进制代码指令是机器指令状态的直接描述,该状态进入CPU的译码器后,经译码变成控制器的动作,通过各种逻辑电路,在时钟脉冲给出的时序信号和逻辑门的作用下完成指令所规定的操作。即二进制代码指令或机器指令完全由计算机CPU的逻辑电路直接识别,不需要任何翻译程序。5
最早的程序设计都采用机器语言来编写。程序设计者必须将求解的问题细化到每一条指令,其难度可想而知。程序员既要驾驭程序设计的全局又要深入每一个局部,乃至程序实现的每一个细节,即使智力超群的程序员也常常会顾此失彼,屡出差错,所编写的程序必须经过严格测试,因此开发周期长。
ASCII码的出现为改善机器指令的可读性和方便记忆提供了可能。既然ASCII码可以表示字符,字符又可以组成单词和短语,于是用帮助记忆的符号表示的机器指令,即汇编指令和汇编语言就出现了。
汇编语言为机器语言向算法语言,即向高级语言的靠拢迈出了一大步。但它离高级语言还太远,以至于程序员还不能从分解算法的数据、确定运算和控制的指令等繁杂的细化中解脱出来。而伪指令和宏的定义则将汇编语言向算法语言又靠拢了一步,这就是宏汇编。
汇编语言与机器语言相比有很多优越性,如编写容易、修改方便、阅读简单、程序清楚等。但在计算机语言系统中,汇编语言仍然被列入“低级语言”的范畴,因为它本身是机器语言,是属于面向机器的语言。5