机器语⾔、汇编语⾔(低级语⾔)、⾼级语⾔
【原⽂:zhuanlan.zhihu/p/37524989】
编程语⾔的机器级表⽰:机器语⾔、汇编语⾔、⾼级语⾔
⾸先下⾯⼀张图是C语⾔、汇编语⾔以及翻译过的机器语⾔,⼤家可以先有个⼤概的眼熟。
1、机器语⾔
早期计算机就是指可以执⾏机器指令,进⾏运算的机器。在我们常⽤的PC机中,有⼀个芯⽚,就是我们常说的CPU(Central Processing Unit,中央处理单元)可以完成前⾯所说的计算机的功能,但是每⼀种这样的微处理器(CPU)由于硬件设计和内部结构的不同,就需要⽤不同的电平脉冲来控制,使它⼯作。所以每⼀种微处理器都有⾃⼰的机器指令集,也就是机器语⾔。吴亦凡约炮门
早期的程序设计均使⽤机器语⾔。程序员们将⽤0, 1数字编成的程序代码打在纸带或卡⽚上,1打孔,0不打孔,再将程序通过纸带机或卡⽚机输⼊计算机,进⾏运算。
⽤机器语⾔编写程序,编程⼈员要⾸先熟记所⽤计算机的全部指令代码和代码的涵义。⼿编程序时,程序员得⾃⼰处理每条指令和每⼀数据的存储分配和输⼊输出,还得记住编程过程中每步所使⽤的⼯作单元处在何种状态。这是⼀件⼗分繁琐的⼯作。编写程序花费的时间往往是实际运⾏时间的⼏⼗倍或⼏百倍,⽽且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。
那么该怎么办呢?这时候汇编语⾔便产⽣了。
需要注意的是现在除了计算机⽣产⼚家的专业⼈员外,⼀般是不需要学习机器语⾔了。
2、汇编语⾔
是⼀种⽤于电⼦计算机、微处理器、微控制器,或其他可编程器件的低级语⾔。 在不同的设备中,汇编语⾔对应着不同的机器语⾔指令集。 ⼀种汇编语⾔专⽤于某种计算机系统结构,⽽不像许多⾼级语⾔,可以在不同系统平台之间移植。汇编语⾔的主体是汇编指令,汇编语⾔是⼆进制指令的⽂本形式,与指令是⼀⼀对应的关系。⽐如,加法指令00000011写成汇编语⾔就是 ADD。
⽐如下⾯将寄存器 BX 的内容发送到 AX 上:
操作:寄存器BX的内容送到AX中
1000100111011000 机器指令
mov ax,bx 汇编指令
我们能很明显的从上⾯两条指令看出区别,汇编指令相对于机器指令是很容易记住的。
可能有⼈会问,我们⽤汇编语⾔编写程序,可是计算机只认识机器指令,那该怎么办?这时候就需要
⼀个能将汇编语⾔转换成机器指令的⼯具,我们称其为汇编器(有别于编译器)。程序员⽤汇编语⾔写出源代码,再⽤汇编汇编器将其编译为机器码,最后由计算机执⾏。
汇编语⾔是直接⾯向处理器(Processor)的程序设计语⾔。处理器是在指令的控制下⼯作的,处理器可以识别的每⼀条指令称为机器指令。每⼀种处理器都有⾃⼰可以识别的⼀整套指令,称为指令集。处理器执⾏指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变⾃⼰内部的⼯作状态,也能控制其它外围电路的⼯作状态。
汇编语⾔的另⼀个特点就是它所操作的对象不是具体的数据,⽽是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为什么汇编语⾔的执⾏速度要⽐其它语⾔快,但同时这也使编程更加复杂,因为既然数据是存放在寄存器或存储器中,那么必然就存在着寻址⽅式,也就是⽤什么⽅法到所需要的数据。例如上⾯的例⼦,我们就不能像⾼级语⾔⼀样直接使⽤数据,⽽是先要从相应的寄存器AX、BX 中把数据取出。这也就增加了编程的复杂性,因为在⾼级语⾔中寻址这部分⼯作是由编译系统来完成的,⽽在汇编语⾔中是由程序员⾃⼰来完成的,这⽆异增加了编程的复杂程度和程序的可读性。
再者,汇编语⾔指令是机器指令的⼀种符号表⽰,⽽不同类型的CPU 有不同的机器指令系统,也就有不同的汇编语⾔,所以,汇编语⾔程序与机器有着密切的关系。所以,除了同系列、不同型号CPU 之间的汇编语⾔程序有⼀定程度的可移植性之外,其它不同类型(如:⼩型机和微机等)CPU 之间的汇编语⾔程序是⽆法移植的,也就是说,汇编语⾔程序的通⽤性和可移植性要⽐⾼级语⾔程序低。
西米露怎么煮总结起来就是三个特点:机器相关性、⾼速度和⾼效率、编写和调试复杂(相对于⾼级语⾔)。
3、⾼级语⾔
前⾯的机器语⾔和汇编语⾔我们都有⼀定了解了,汇编语⾔也是和机器语⾔⼀样,都是直接对硬件进⾏操作,但是汇编语⾔指令采⽤了英⽂缩写的标识符,更容易识别和记忆。但是说起来更容易识别和记忆,也只是相对于机器语⾔⽽⾔的。在实际编程中,汇编语⾔源程序也是⼗分复杂和冗长的,这时候⾼级语⾔产⽣了。
⾼级语⾔并不是指⼀种语⾔,⽽是包括很多编程语⾔,⽐如Java、C、C++、C#、python等等,是⾼度封装的编程语⾔。⾼级语⾔与计算机的硬件结构和指令系统⽆关,它有更强的表达能⼒,可⽅便地表⽰数据的运算和程序的控制结构,能更好的描述各种算法,⽽且容易学习掌握。但⾼级语⾔编译⽣成的程序代码⼀般⽐⽤汇编程序语⾔设计的程序代码要长,执⾏的速度也慢。
怎么查询高速公路是否封闭汇编语⾔和⾼级语⾔最后都得转换成机器语⾔,但是⾼级语⾔由于⾼度封装,相同的实现下,⾼级语⾔转换成机器语⾔的执⾏步数通常都⽐汇编语⾔多,这也是为啥⾼级语⾔⼀般都⽐汇编语⾔性能差的原因。
叉烧肉从最开始我们给出的⼀张图也可以看出,C语⾔写出的短短⼏⾏代码,翻译成汇编语⾔会多很多,更不⽤说变成机器语⾔了。
发布评论