文章目录
- 计算机系统的层次结构
- 计算机层次结构之间的联系
- 虚拟机和裸机
- 编译型语言和解释型语言
- 编译型语言和解释型语言的区别
- 编译程序和解释程序的区别 如何理解编译/解释速度 和运行速度
- 编译型语言和解释型语言的优劣
- 编译 汇编 解释
- 编译程序和解释程序写题目的时候需要注意的点
计算机系统的层次结构
计算机的层次结构由六层组成:
接下来我们对这个结构图进行分析:
首先需要知道的是:计算机只能识别二进制的
0
和1
,所以说不管是什么级别的语言都必须要转化成机器语言才能被CPU
执行。在实际硬件中,硬件层又分为了传统机器层和微程序机器层,传统机器层是对计算机指令的一种识别,例如0000001
代表乘法指令,而微程序机器层则是对该指令的分解,即底层执行该指令需要进行的微操作,例如取指令,分析指令。
但是机器语言是难以记忆的,人们如果想要知道一条指令的含义还需要对该二进制进行计算,所以衍生出了汇编语言,汇编语言其实就是一种英文助记符,其和机器语言是一一对应的,一条汇编语言对应一条机器语言指令,例如汇编语言load 5
表示取5
号地址存储单元的数据,对应的机器语言就是000000110000110
,简单来说汇编语言就是机器语言的一种英文表示,只是为了让指令的含义看起来更容易识别,所以机器语言和汇编语言都是低级语言。
低级语言的编程终归是繁琐的,最终衍生出了高级语言,高级语言的一条语句可对应多条汇编语言,程序员的编程效率也得到了提高。
使用汇编语言和高级语言的机器都是属于虚拟机器,因为其无法直接执行汇编语言或者高级语言,必须需要将其翻译成机器语言。并且在翻译的过程中还需要操作系统进行干预,由此最终构成了计算机的层次结构。
软件和硬件之间的交界面是指令集体系结构
(ISA)
,ISA
定义了计算机可以执行的所有指令的集合,简单来说ISA
就是定义了二进制机器代码表示什么指令,并且该台计算机所能使用的指令集合。ISA
是软件能够感知的部分,也称软件可见部分。(为什么ISA软件能够感知我不是很理解)
我的理解是ISA是一种指令的规定,而计算机中硬件的实行需要上层的软件来进行指挥,例如操作系统,所以说ISA是软件能够感知的部分。
计算机层次结构之间的联系
1.在计算机的层次结构之中,上层是下层功能的扩展,下层是实现上层的基础。
这句话很好理解,从机器语言层高级语言层,随着编程语言的高级化,计算机的功能明显得到了扩展,所以上层是下层功能的扩展。上层的运行脱离不了下层,高级语言必须转换成机器语言才能执行,所以下层是实现上层的基础。
2.上层和下层的关系是相互依存,且可分割的。
这里注意的点:上层和下层是可以分割的,这个不好理解,实际下层即使不需要上层也可以运行,初代计算机就是使用机器语言直接进行编程的,那时候也不存在汇编层这些,所以下层是可以脱离上层正常运行的,只不过功能会收到限制。
3.下层对于上层是支撑作用,不是限制作用
实际上这个我感觉限制也是说得通的,但是题目不运行这样写,没办法。
虚拟机和裸机
裸机:裸机是没有配备软件的计算机。
虚拟机:虚拟机是软件实现的机器。(操作系统层,汇编语言层,高级语言层),不包含ISA,ISA应该只能算是一种规定,不能算是软件吧。
编译型语言和解释型语言
高级语言如果想要执行一定需要翻译成机器语言,翻译过程的不同由衍生出了不同类别的高级语言,可以分为以下两种:
( 1 ) (1) (1)编译型语言:
编译型语言由分为两种:
1.使用编译程序(编译器)直接将高级语言翻译成机器语言。
2.使用编译程序(编译器)先将高级语言翻译成汇编语言,再使用汇编程序将汇编语言翻译成机器语言。
无论是第一种还是第二种,只要翻译过程正常运行结束,都会在磁盘上生成一个.exe结尾的二进制可执行文件,用户双击该文件便可以执行。
注:这个过程中可能需要发生链接。
( 2 ) (2) (2)解释型语言
解释型语言使用解释程序(解释器),其特点是每将一条语句翻译成机器语言以后,就立即执行,然后再翻译下一条语句,再执行下条语句。
编译型语言和解释型语言的区别
同:
无论是编译型语言还是解释型语言,都需要先将高级语言翻译成机器语言才能被计算机执行。
异:
编译型语言翻译以后是生成二进制的可执行文件,是否运行这个程序由用户决定,解释型语言语言翻译过程相当于运行,其是直接对源代码进行翻译,每翻译一句,执行一句,且不生成可执行文件。
编译程序和解释程序的区别 如何理解编译/解释速度 和运行速度
首先给出两者的比较:
类型 | 是否一次性编译/解释完成 | 编译/解释时间 | 运行速度 |
---|---|---|---|
编译程序 | 是 | 长 | 快 |
解释程序 | 否 | 短 | 慢 |
1.是否一次性编译/解释完成:很好理解,不解释了。
2.编译/解释时间:
编译程序是一次性将高级语言转换成机器语言,在转换的过程中是不运行这个高级语言程序的,其在编译的过程中只做编译这一个工作
解释程序:解释程序在将高级语言转换成机器语言的过程中,其是解释一句,然后运行一句,所以解释程序的编译时间说的不是总的编译时间,而是单条语句的编译时间,所以肯定是短于解释程序了。
3.运行速度
虽然我们这里写的是编译程序和解释程序的运行速度,但是实际上应该理解为编译型语言的运行速度和解释型语言的运行速度,这里一个需要理解的词语是运行速度,对于解释型语言和编译型语言来讲两者对于这个词语的理解是不同的。
对于编译型语言而言:编译型语言的运行的时候只需要运行可执行程序,所以说编译程序的运行时间就是程序运行的时间,其是不包含源文件编译变成可执行程序的编译时间的,其是实实在在的运行时间。
对于解释型语言而言:解释型语言如果想要运行必须从源程序开始进行解释并且运行,所以其运行过程中既要解释,又要运行,所以其运行时间包含了编译时间和运行时间,所以说运行速度是慢于编译程序的。
编译型语言和解释型语言的优劣
( 1 ) (1) (1)编译型语言
优点:
1.效率高,从第二次运行开始,在代码没有变动的情况下,只需要直接加载可执行文件至内存便可运行,不需要再次进行翻译。
2.翻译工作一旦完成,在代码没有变动的情况下, 未来运行代码只需要可执行文件,不需要源代码。
缺点:
1.移植性差 因为编译型语言是根据可执行文件来运行的,但是不同平台的机器语言指令可能有些许差异,就可能导致将可执行程序放到其他平台就无法正常运行。
( 2 ) (2) (2)解释型语言
优点:
移植性好,因为解释型语言每次运行都是从源代码开始向下翻译的,所以翻译过程会自动适应运行平台的环境。
实现简单,解释程序实现比较简单。
缺点:
1.效率低,每次运行都需要从源代码开始翻译。
2.每次运行都需要源代码。
编译 汇编 解释
编译程序(编译器),汇编程序(汇编器),解释程序(解释器)统称为翻译程序
编译程序和解释程序写题目的时候需要注意的点
( 1 ) (1) (1)编译程序的作用
编译程序具有两种作用:
1.将高级语言编译成汇编语言
2.将高级语言编译成机器语言
除非题目是说编译程序只能将编译程序编译成机器语言这一种作用的时候。
不然一般默认编译程序是将高级语言转换成机器语言。一般来说编译程序和解释程序同时出现,所以编译程序和解释程序的作用都是将高级语言转换成机器语言这种说法是正确的。
( 2 ) (2) (2)编译和解释
有时候解释程序和编译程序可能都会使用编译时间来进行比较,这时候不要转牛角尖,这种说法对于解释程序也是可以的。