机器码、指令、汇编语⾔、⾼级语⾔
机器码、指令、汇编语⾔、⾼级语⾔
⼀、机器码
各种⽤⼆进制编码⽅式表⽰的指令,叫做机器指令码。最初,⼈们就⽤它编写程序,这就是机器语⾔。机器语⾔虽然能够被计算机接受和理解。⽤它编写的程序⼀经输⼊计算机,CPU直接读取运⾏,因此和其他语⾔编的程序相⽐,执⾏速度最快。但它和⼈类的语⾔差别巨⼤,不易被⼈类理解和记忆,导致⽤它编程容易出差错。
机器指令与CPU硬件紧密相关,所以不同种类的CPU所对应的机器指令也就不同。
⼆、指令
由于机器码是由0和1组成的⼆进制序列,可读性实在太差,于是⼈们发明了指令。
指令就是把机器码中特定的0和1序列,简化成对应的指令(⼀般为英⽂简写,如mov,inc等),可读性稍好。
由于不同的硬件平台,执⾏同⼀个操作,对应的机器码可能不同,所以不同的硬件平台的同⼀种指令(⽐如mov),对应的机器码序列也可能不同。
CPU能直接接受和理解指令。
三、指令集
不同的硬件平台,各⾃⽀持的指令,是有差别的。因此每个平台所⽀持的指令集合(类似于字典),称之为对应平台的指令集。
如常见的有:
x86 指令集:对应的是x86架构的平台
ARM指令集:对应的是ARM架构的平台
四、汇编语⾔
由于指令的可读性还是太差,于是⼈们⼜发明了汇编语⾔。
在汇编语⾔中:⽤助记符(Mnemonics)代替机器指令(对应指令集)的操作码,⽤地址符号(Symbo1)或标号(Labe1)代替指令或操作数的地址。
在不同的硬件平台,汇编语⾔对应着不同的机器语⾔指令集,通过汇编过程转换成机器指令。
由于计算机只能认识指令码,所以⽤汇编语⾔编写的程序还必须翻译成机器指令码,计算机才能识别和执⾏。
五、⾼级语⾔
为了使计算机⽤户编程序更容易些,后来就出现了各种⾼级计算机语⾔。
⾼级语⾔⽐机器语⾔、汇编语⾔更接近⼈类语⾔,当计算机执⾏⾼级语⾔编写的程序时,仍然需要把程序解释和编译成机器的指令码。完成这个过程的程序就叫做解释程序或编译程序。⾼级语⾔也不是直接翻译成机器指令,⽽是先翻译成汇编语⾔码,如下⾯说的C和C++。
六、 C、C++源程序执⾏过程
编译过程⼜可以分成两个阶段:编译和汇编。
编译过程:是读取程序源码(字符流),对之进⾏词法和语法的分析,将⾼级语⾔指令转换为功能等效的汇编代码。
汇编过程:实际上指把汇编语⾔代码翻译成⽬标机器指令的过程。
七、字节码
字节码是⼀种中间状态(中间码)的⼆进制代码(⽂件),它⽐机器码更抽象,需要编译器转译后才能成为机器码。
字节码主要为了让特定软件运⾏环境与硬件环境⽆关。
字节码的实现⽅式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执⾏的指令。
字节码典型的应⽤为:Java bytecode。