计算机组成原理 03 1.2.3 计算机的层次结构 编译程序 解释程序

本文主要是介绍计算机组成原理 03 1.2.3 计算机的层次结构 编译程序 解释程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

        • 计算机系统的层次结构
        • 计算机层次结构之间的联系
        • 虚拟机和裸机
        • 编译型语言和解释型语言
        • 编译型语言和解释型语言的区别
        • 编译程序和解释程序的区别 如何理解编译/解释速度 和运行速度
        • 编译型语言和解释型语言的优劣
        • 编译 汇编 解释
      • 编译程序和解释程序写题目的时候需要注意的点

计算机系统的层次结构

计算机的层次结构由六层组成:
在这里插入图片描述

接下来我们对这个结构图进行分析:

首先需要知道的是:计算机只能识别二进制的01,所以说不管是什么级别的语言都必须要转化成机器语言才能被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)编译和解释

有时候解释程序和编译程序可能都会使用编译时间来进行比较,这时候不要转牛角尖,这种说法对于解释程序也是可以的。

这篇关于计算机组成原理 03 1.2.3 计算机的层次结构 编译程序 解释程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/257948

相关文章

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

usaco 1.2 Milking Cows(类hash表)

第一种思路被卡了时间 到第二种思路的时候就觉得第一种思路太坑爹了 代码又长又臭还超时!! 第一种思路:我不知道为什么最后一组数据会被卡 超时超了0.2s左右 大概想法是 快排加一个遍历 先将开始时间按升序排好 然后开始遍历比较 1 若 下一个开始beg[i] 小于 tem_end 则说明本组数据与上组数据是在连续的一个区间 取max( ed[i],tem_end ) 2 反之 这个

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte