文章目录
- 前言
- 一、程序翻译与程序解释
- 二、计算机的层次与编程语言
- 1.硬件逻辑层
- 2.微程序机器层
- 3.传统机器层
- 4.操作系统层
- 5.汇编语言层
- 6.高级语言层
- 7.应用层
- 总结
前言
今天给大家介绍一下计算机的层次与编程语言,包含两个板块:程序翻译与程序解释、计算机的层次与编程语言。
一、程序翻译与程序解释
为什么要进行程序翻译和程序解释?因为人类语言和计算机语言是互不相通的,计算机能理解的语言只有 0101010…这样的二进制比特位。所以我们需要把人类语言的程序翻译或者解释为计算机能懂的语言,也就是需要进行语言之间的转换。
那程序翻译和程序解释有什么区别和联系呢?为了解释这两者的关系,我们引入两个语言:较为高级的计算机语言L1、较为低级的计算机语言L0,L1和L0是随便命名的名字。接下来就使用这两个语言给大家举例说明什么是程序翻译?什么是程序解释?
什么是程序翻译呢?假设现在使用较为高级的计算机语言L1来编写一段程序,当然了,这个程序不是直接执行的,它是在执行的时候生成一个逻辑等价的由低级语言L0组成的程序。那么这个L0才是计算机实际执行的语言,从L1生成L0这个过程,就称之为程序翻译,负责生成过程的这个工具叫做编译器。示意图如下所示:
那什么又是程序解释呢?同样的,我们使用较为高级的计算机语言L1进行程序的逻辑描述,也就是编写一段程序,那它是怎么执行的呢?为了执行这个L1语言,我们还需要用L0语言实现另一个程序,然后这个程序把L1语言的程序作为输入来执行,每一个L1的语句都会在L0里面进行等价的逻辑转换,转换成L0并且执行。这个过程就称为程序解释,而使用L0语言实现的另外一个程序,我们就称为解释器。示意图如下所示:
简单总结下程序解释与程序翻译的区别和共同点:
- 计算机执行的指令都是L0
- 翻译过程生成新的L0程序,解释过程不生成新的L0程序
- 解释过程由L0编写的解释器去解释L1程序
目前市面上有200多种编程语言,哪些是属于翻译型语言?哪些是属于解释型语言呢?各举例一些代表性语言如下图所示:
除了上面常用的语言之外,还有两种非常常用的语言:Java和C#,那这两种属于什么呢?属于翻译+解释型。
翻译+解释是怎么理解?我们以Java语言为例,对于一个Java程序要执行的时候,首先会编译为JVM字节码,这里面的编译也就是我们所指的程序翻译,接着JVM字节码还会解释成为机器码来执行。这里面有一个重要的角色:JVM虚拟机,这是Java语言所特有的一个虚拟机,平时编写Java代码都是在这个虚拟机的上层来编写的。示意图如下所示:
二、计算机的层次与编程语言
如果按层次划分计算机的话,可以划分为7个层次:硬件逻辑层、微程序机器层、传统机器层、操作系统层、汇编语言层、高级语言层、应用层。这里面传统机器层、微程序机器层、硬件逻辑层属于实际机器层面,也就是跟物理设备直接相关。应用层、高级语言层、汇编语言层、操作系统层属于虚拟机器层面。在这里面,虚拟机器层面还可以分为两个部分:一个是系统软件(包括高级语言层、汇编语言层、操作系统层)、一个是应用软件(就是应用层)。示意图如下所示:
接下来介绍每一层都有哪些内容,我们从底往上看。
1.硬件逻辑层
- 门、触发器等逻辑电路组成
- 属于电子工程的领域
2.微程序机器层
- 编程语言是微指令集
- 微指令所组成的微程序直接交由硬件执行
3.传统机器层
- 编程语言是CPU指令集(机器指令)
- 编程语言和硬件是直接相关(举个例子,目前CPU两大生产厂商是英特尔和AMD,这两个厂商所生产的CPU最大的区别是什么呢?就是指令系统不一样,也就是英特尔CPU所使用的指令集不适合AMD的CPU,同样的AMD也是如此。除了不同厂商以外,同一个厂商也可以生产不同指令集的CPU,如X86和X86-64,他们之间也是不能相互兼容的)
- 不同架构的CPU使用不同的CPU指令集
这里先缓缓,我们提到了三个概念:微指令、微程序、机器指令,这三者之间有什么关系呢?简单来说有两点:
- 一条机器指令对应一个微程序
- 一个微程序对应一组微指令
也就是说微程序和机器指令是相等的关系,而微程序是大于微指令的:微指令 < 微程序 = 机器指令。
4.操作系统层
- 向上提供了简易的操作界面
- 向下对接了指令系统,管理硬件资源(比如某用户程序需要运行时,首先由操作系统将其调入内存中,这就需要操作系统为其分配内存空间来进行存储。再比如,某个程序需要使用输出设备进行结果输出,也是需要操作系统为其提供该设备的控制权)
- 操作系统层是在软件和硬件之间的适配层
5.汇编语言层
- 编程语言是汇编语言
- 汇编语言可以翻译成可直接执行的机器语言
- 完成翻译的过程的程序就是汇编器
从这一层开始,使用的编程语言都是人类容易理解的语言,举个汇编语言的例子,如下代码所示为汇编语言代码:
PUSH DS
PUSH AX
MOV AX,0040
MOV DS,AX
从中可以看到我们人可以理解的语言,如 PUSH, MOV 这两个单词,PUSH 意思就是把数据放入堆栈中,MOV 意思就是把数据从一个地方移动到另外的地方。
6.高级语言层
- 编程语言为广大程序员所接受的高级语言
- 高级语言的类别非常多,有两百多种
- 常见的高级语言有:Python、Java、C/C++、Golang等
7.应用层
应用层其实不能算语言了,都是一些满足用户需要的特定用途而设计的程序,如office、QQ等各种软件。
总结
以上就是给大家介绍的所有内容,里面需要注意的是计算机的7层分层的目的是便于理解,它的分层并不是固定死的,今天的软件可能变成明天的硬件。