编程语言、汇编语言、机器语言的区别和简介

在编程的世界中,有不同层次的语言(language),这些语言有时候也称代码(code)。大致的,可以从上到下包含如下几种语言:

在编程的世界中,有不同层次的语言(language),这些语言有时候也称代码(code)。大致的,可以从上到下包含如下几种语言:

  • 编程语言(programming languange):有时候也称高级(high-level)编程语言,并不是指语言比较“高级”,是指它的层次更高,容易被人使用,和我们正常使用的自然语言很接近。
  • 汇编语言(assembly language/code):是一种低级别(low-level)的编程语言。与计算机执行的逻辑更加接近,与我们正常使用的语言差别很大,但是里面的符号依然可以被人大致识别。
  • 机器语言(machine language/code):是可以被CPU直接识别并执行的语言或者代码。

本文将简单介绍这几种编程语言之间的差别。

编程语言、汇编语言、机器语言的区别和简介

机器语言(Machine Language/Code)

计算机的发展经历了早期的真空管计算机到后来的晶体管计算机再到现在的集成电路计算机,其主要的能力都是读取输入的数据和指令,然后经过运算输出结果。由于计算机的硬件都是通过电压识别信号的,使用高低电压分别代表0和1是一种很自然的事情。这也就是为什么现代计算机内部底层都是二进制的原因。因为0和1的识别非常容易,使用二进制代表一切内容符合计算机的运行方式。因此,机器语言也就可以容易理解都是0和1了。

那么,机器如何使用二进制来工作呢?

首先,CPU指定了一系列指令集,也就是说哪些二进制代表什么操作。以最原始的8086/8088指令集为例,它包含了一共81个指令集,包括ADD、MOV等。

下表给出几个示例:

操作(Operation)

操作数(Operands)

含义(Meaning)

指令集代码(十六进制)Opcode-0x

指令集代码(二进制)Opcode-0b

ADD

r/m8, reg8

寄存器8或者内存8与寄存器8相加

0x00

00000000

MOV

r/m8, reg8

寄存器8或者内存8转移到寄存器8

0x88

10001000

那么如果我们要执行一个命令,例如把数据从BL移动到AL,那么8086指令集结果如下:
10001000 11000011

转化过程:

编程语言、汇编语言、机器语言的区别和简介

只要CPU读取到信号是10001000 11000011,那么它就能理解它的含义,然后执行相关的操作。

显然,这种二进制的机器语言可以被CPU读懂并执行,但是对阅读来说非常不友好。人们很难直接读写这种语言。

于是汇编语言诞生了。

汇编语言(Assembly Language, ASM)

如前所述,汇编语言是一种低级别的编程语言。汇编语言是被用来设计成可以直接与硬件通信的编程语言。但是,它是一种可以被“阅读(readable)”的编程语言。

现代计算机是通过高低电压来识别0和1的,因此也只能识别二进制的代码。最早期的编程就是需要人们使用约定好的二进制数字来告诉计算机如何工作。但是这种方式非常不利于人们的编程。因此,为了让人们可以更加轻松写出代码,被机器执行。人们发明了汇编语言。汇编语言就是将前面所述的机器语言的每一个指令都对应改成一个符号,然后人们通过练习对这些符号的使用,写出指令执行的过程。然后用一种工具将这个语言转化成二进制语言被机器读取执行即可。这就是汇编语言的汇编过程。

如下是一个汇编语言的样例:

MOV    AL,0x12

上述汇编语言的含义就是将变量0x12移动到寄存器AL中。显然,这种语言虽然也需要学习指令运行的方式,但是相比全是0和1的二进制来说,代码的可阅读性已经很高了。

汇编语言不能被直接运行,它需要有一个汇编的过程,将汇编语言转成可被执行的二进制代码,也就是前面说的机器代码。

编程语言、汇编语言、机器语言的区别和简介

显然,汇编语言与CPU的指令集密切相关,也就是说它是与硬件相关的一种编程语言。相比较二进制代码,它更加健壮,也不像二进制代码(如果人来写这个代码的话)容易出错。但是,每一个汇编的步骤与代码都需要与CPU指令的执行对应起来。显然,尽管它已经不错了,但依然不够友好。于是,从上世纪90年代开始,高级编程语言越来越多出现在人们的生活中,用以代替汇编语言。

编程语言(Programming Language)

这里的编程语言是指高级编程语言,也就是我们常见的C语言、Java、Python等编程语言。它们的语法、标识符等都与人类的语言更加接近(相比较机器语言来说)。现阶段的计算机硬件只认识二进制的指令(由于底层的硬件都是通过高低电压信号表示0和1,进而通过只有0和1的二进制来工作),如果全部使用二进制来编程那显然难度太大。汇编语言虽然好一点,依然不太容易读写。但是高级编程语言却更加友好。

例如,如果我们想使用计算机来计算一个加法并打印:

1 + 1 = 2

以Python为例,仅仅需要如下代码就可以完成:

a = 1b = 1c = a + bprint(c)

或者C语言的样例如下:

#include <stdio.h>int main(void){    int a = 1;    int b = 1;    int c = a + b;    printf("%d", c);    return 0;}

这样的语言虽然也需要遵循一定的语法结构和一些特定的标识符,但是与我们日常使用的语言已经很接近了。比使用一大串01标识符来表示好很多了。

但是这样的语言也不是一开始就有的,而且它也不能直接被硬件识别,需要经过编译器(compiler)或者解释器(interpreter)的翻译才能被硬件识别。但是,这种语言已经不那么依赖硬件架构了。大部分都只需要写好程序,由与硬件相关的编译器或者解释器来负责转化翻译成机器语言进行执行就可以了。

详情:编程语言(Programming Language)、汇编语言(Assembly Language, ASM)、机器语言(Machine Language/Code)的区别和简介 | 数据学习者官方网站(Datalearner)

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/89010.html

(0)

相关推荐