编程语言(Programming Language)、汇编语言(Assembly Language, ASM)、机器语言(Machine 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
转化过程:


