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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。