我的编程空间,编程开发者的网络收藏夹
学习永远不晚

汇编器、编译器和解释器是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

汇编器、编译器和解释器是什么

这篇文章主要介绍“汇编器、编译器和解释器是什么”,在日常操作中,相信很多人在汇编器、编译器和解释器是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编器、编译器和解释器是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

什么是程序?

首先来看一点背景知识。计算机自己是做不了任何事情的,它们的任何行为都需要程序来引导。你可以把程序看成是非常精确的菜谱,这种菜谱读取一个输入,然后生成对应的输出。菜谱里的各个步骤由操作数据的指令构成。听上去有点儿复杂,不过你或许知道下面这个语句是什么意思:

1 + 2 = 3

其中的加号是“指令”,而数字 1 和 2 是数据。数学上的等号意味着等式两边的部分是“等价”的,不过在大部分编程语言中对变量使用等号是“赋值”的意思。如果计算机执行上面这个语句,它会把这个加法的结果(也就是“3”)储存在内存中的某个地方。

计算机知道如何使用数字进行数学运算,以及如何在内存结构中移动数据。在这里就不对内存进行展开了,你只需要知道内存一般分为两大类:“速度快/空间小”和“速度慢/空间大”。CPU  寄存器的读写速度非常快,但是空间非常小,相当于一个速记便签。主存储器通常有很大的空间,但是读写速度就比寄存器差远了。在程序运行的时候,CPU  不断将它所需要用到的数据从主存储器挪动到寄存器,然后再把结果放回到主存储器。

汇编器

当时的计算机很贵,而人力比较便宜。程序员需要耗费很多时间把手写的数学表达式翻译成计算机可以执行的指令。最初的计算机只有非常糟糕的用户界面,有些甚至只有前面板上的拨动开关。这些开关就代表一个内存“单元”里的一个个  “0” 和 “1”。程序员需要配置一个内存单元,选择好储存位置,然后把这个单元提交到内存里。这是一个既耗时又容易出错的过程。

汇编器、编译器和解释器是什么

程序员Betty Jean Jennings (左) 和 Fran Bilas (右) 在操作 ENIAC 的主控制面板

后来有一名 电气工程师   认为自己的时间很宝贵,就写了一个程序,能够把人们可以读懂的“菜谱”一样的输入转换成计算机可以读懂的版本。这就是最初的“汇编器”,在当时引起了不小的争议。这些昂贵机器的主人不希望把计算资源浪费在人们已经能做的任务上(虽然又慢又容易出错)。不过随着时间的推移,人们逐渐发现使用汇编器在速度和准确性上都胜于人工编写机器语言,并且计算机完成的“实际工作量”增加了。

尽管汇编器相比在机器面板上切换比特的状态已经是很大的进步了,这种编程方式仍然非常专业。上面加法的例子在汇编语言中看起来差不多是这样的:

01 MOV R0, 102 MOV R1, 203 ADD R0, R1, R204 MOV 64, R005 STO R2, R0

每一行都是一个计算机指令,前面是一个指令的简写,后面是指令所操作的数据。这个小小的程序首先会将数值 1 “移动”到寄存器 R0,然后把 2  移动到寄存器 R1。03 行把 R0 和 R1 两个寄存器里的数值相加,然后将结果储存在 R2 寄存器里。***,04 行和 05  行决定结果应该被放在主存储器里的什么位置(在这里是地址 64)。管理内存中存储数据的位置是编程过程中最耗时也最容易出错的部分之一。

编译器

汇编器已经比手写计算机指令要好太多了,不过早期的程序员还是渴望能够按照他们所习惯的方式,像书写数学公式一样地去写程序。这种需求推动了高级编译语言的发展,其中有一些已经成为历史,另一些如今还在使用。比如 ALGO 就已经成为历史了,但是像 Fortran 和 C 这样的语言仍然在不断解决实际问题。

汇编器、编译器和解释器是什么

ALGO 和 Fortran 编程语言的谱系树

这些“高级”语言使得程序员可以用更简单的方式编写程序。在 C 语言中,我们的加法程序就变成了这样:

int x;x = 1 + 2;

***个语句描述了该程序将要使用的一块内存。在这个例子中,这块内存应该占一个整数的大小,名字是 x。第二个语句是加法,虽然是倒着写的。一个 C 语言的程序员会说这是 “X 被赋值为 1 加 2 的结果”。需要注意的是,程序员并不需要决定在内存的什么位置储存 x,这个任务交给编译器了。

这种被称为“编译器”的新程序可以把用高级语言写的程序转换成汇编语言,再使用汇编器把汇编语言转换成机器可读的程序。这种程序组合常常被称为“工具链”,因为一个程序的输出就直接成为另一个程序的输入。

编译语言相比汇编语言的优势体现在从一台计算机迁移到不同型号或者品牌的另一台计算机上的时候。在计算机的早期岁月里,包括  IBM、DEC、德州仪器、UNIVAC  以及惠普在内的很多公司都在制造除了大量不同类型的计算机硬件。这些计算机除了都需要连接电源之外就没有太多共同点了。它们在内存和 CPU  架构上的差异相当大,当时经常需要人们花费数年来将一台计算机的程序翻译成另一台计算机的程序。

有了高级语言,我们只需要把编译器工具链迁移到新的平台就行了。只要有可用的编译器,高级语言写的程序最多只需要经过小幅修改就可以在新的计算机上被重新编译。高级语言的编译是一个真正的革命性成果。

汇编器、编译器和解释器是什么

1983 发布的 IBM PC XT 是硬件价格下降的早期例子。

程序员们的生活得到了很好的改善。相比之下,通过高级语言表达他们想要解决的问题让事情变得轻松很多。由于半导体技术的进步以及集成芯片的发明,计算机硬件的价格急剧下降。计算机的速度越来越快,能力也越来越强,并且还便宜了很多。从某个时间点往后(也许是  80 年代末期吧),事情发生了反转,程序员变得比他们所使用的硬件更值钱了。

解释器

随着时间的推移,一种新的编程方式兴起了。一种被称为“解释器”的特殊程序可以直接读取一个程序将其转换成计算机指令以立即执行。和编译器差不多,解释器读取程序并将它转换成一个中间形态。但和编译器不同的是,解释器直接执行程序的这个中间形态。解释型语言在每一次执行的时候都要经历这个过程;而编译程序只需要编译一次,之后计算机每次只需要执行编译好的机器指令就可以了。

顺便说一句,这个特性就是导致人们感觉解释型程序运行得比较慢的原因。不过现代计算机的性能出奇地强大,以至于大多数人无法区分编译型程序和解释型程序。

解释型程序(有时也被成为“脚本”)甚至更容易被移植到不同的硬件平台上。因为脚本并不包含任何机器特有的指令,同一个版本的程序可以不经过任何修改就直接在很多不同的计算机上运行。不过当然了,解释器必须得先移植到新的机器上才行。

一个很流行的解释型语言是 perl。用 perl 完整地表达我们的加法问题会是这样的:

$x = 1 + 2

虽然这个程序看起来和 C 语言的版本差不多,运行上也没有太大区别,但却缺少了初始化变量的语句。其实还有一些其它的区别(超出这篇文章的范围了),但你应该已经注意到,我们写计算机程序的方式已经和数学家用纸笔手写数学表达式非常接近了。

虚拟机

***潮的编程方式要数虚拟机(经常简称  VM)了。虚拟机分为两大类:系统虚拟机和进程虚拟机。这两种虚拟机都提供一种对“真实的”计算硬件的不同级别的抽象,不过它们的作用域不同。系统虚拟机是一个提供物理硬件的替代品的软件,而进程虚拟机则被设计用来以一种“系统独立”的方式执行程序。所以在这个例子里,进程虚拟机(往后我所说的虚拟机都是指这个类型)的作用域和解释器的比较类似,因为也是先将程序编译成一个中间形态,然后虚拟机再执行这个中间形态。

虚拟机和解释器的主要区别在于,虚拟机创造了一个虚拟的  CPU,以及一套虚拟的指令集。有了这层抽象,我们就可以编写前端工具来把不同语言的程序编译成虚拟机可以接受的程序了。也许***也最知名的虚拟机就是  Java 虚拟机(JVM)了。JVM 最初在 1990 年代只支持 Java 语言,但是如今却可以运行 许多 流行的编程语言,包括 Scala、Jython、JRuby、Clojure,以及 Kotlin 等等。还有其它一些不太常见的例子,在这里就不说了。我也是最近才知道,我最喜欢的语言 Python 并不是一个解释型语言,而是一个 运行在虚拟机上的语言!

虚拟机仍然在延续这样一个历史趋势:让程序员在使用特定领域的编程语言解决问题的时候,所需要的对特定计算平台的了解变得越来越少了。

到此,关于“汇编器、编译器和解释器是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

汇编器、编译器和解释器是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

汇编器、编译器和解释器是什么

这篇文章主要介绍“汇编器、编译器和解释器是什么”,在日常操作中,相信很多人在汇编器、编译器和解释器是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编器、编译器和解释器是什么”的疑惑有所帮助!接下来,请跟
2023-06-16

pycharm是编译器还是解释器

pycharm 既不是编译器也不是解释器,而是一个集成开发环境 (ide),提供代码编辑、调试、版本控制和重构等功能。python是一种解释型语言,使用cpython、jython或ironpython等解释器运行,pycharm允许用户配
pycharm是编译器还是解释器
2024-04-25

Python编译器和解释器有哪些

这篇文章主要讲解了“Python编译器和解释器有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python编译器和解释器有哪些”吧!1.BrythonBrython 是一种流行的 Pyt
2023-06-16

Python中的编译器与解释器的作用是什么

本篇内容介绍了“Python中的编译器与解释器的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、数据的表示方式我们都知道,现实生
2023-06-02

什么是编译器?

编译器是一种将源代码转换为机器可执行代码的计算机程序。它涉及语法和语义分析、优化和代码生成。编译器的作用包括翻译代码、检查错误和优化效率。不同类型的编译器有单遍、多遍、解释型和跨平台编译器。编译代码执行速度快、错误检测能力强、可移植性好;但编译时间长、调试复杂、平台依赖性强。
什么是编译器?
2024-04-02

编程中的编译和解释有什么区别

本篇内容介绍了“编程中的编译和解释有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、编译是将源程序翻译成可执行的目标代码;解
2023-06-20

java是用什么编译器

JAVA编译器(javac.exe)的作用是将java源程序编译成中间代码字节码文件,是最基本的开发工具。java程序开发人员,可以的选择集成开发环境IDE(Integrated Development Environment)非常多 (推荐学习:ja
java是用什么编译器
2020-09-12

Golang编译器汇总:探究各类编译器优缺点

随着Golang的发展,越来越多的编译器被开发出来。在选择一款编译器时,开发人员需要考虑诸多因素,例如可靠性、性能、易用性等。本篇文章将汇总一些常见的Golang编译器,并探究它们的优缺点,帮助开发者更好地选择适合自己的编译器。Go官方编
Golang编译器汇总:探究各类编译器优缺点
2024-01-19

c#编译器是用什么编写的

c# 编译器是用 c# 和 f# 编写的。它由负责解析源代码的前端(c#)、进行语义分析的中间端(c#)和将 ast 编译为 il 的后端(f#)组成。C# 编译器是用什么编写的?答案: C# 编译器是用 C# 和 F# 编写的。详细解
c#编译器是用什么编写的
2024-04-04

pycharm是编译器还是编辑器

pycharm 既是编辑器,也是编译器,它提供编辑功能(如语法高亮和自动完成功能),同时也能将 python 代码编译为字节码并提供调试工具。PyCharm 是编辑器还是编译器?回答:PyCharm 既是编辑器也是编译器。详细解释:P
pycharm是编译器还是编辑器
2024-04-25

Python编辑器的编译方法是什么

Python编辑器的编译方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从Python编辑器中也可调用编译器以及与它拥有的共用的程序,这样的话程序员就无需离开编辑器就可
2023-06-17

#3 Python解释器和编辑器

前言上文介绍了Python在不同平台的安装方法,本文将带领你了解Python解释器和编辑器的概念,并且选择出最符合自己的解释器和编辑器!一、Python解释器其实上文介绍的安装Python,实质上安装的是Python解释器。当你创建一个Py
2023-01-30

kotlin编译器的原理是什么

Kotlin编译器的原理是将Kotlin源代码转换为可执行的目标代码。具体来说,Kotlin编译器分为三个主要的阶段:1. 词法分析(Lexical Analysis):将源代码分解为一个个的词法单元(tokens),如关键字、标识符、运算
2023-09-15

python有什么编译器

这篇文章主要介绍“python有什么编译器”,在日常操作中,相信很多人在python有什么编译器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python有什么编译器”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-30

云服务器编译代码是什么

一、选择合适的服务器操作系统选择合适的服务器操作系统需要考虑多种因素,包括服务器的硬件配置、软件要求、数据处理能力、安全性能等。对于云服务器来说,选择云服务器操作系统需要考虑以下几个因素:云服务器是运行在云平台上的服务器,需要考虑云平台的性能和稳定性;云服务器需要支持多种应用场景,如Web服务器、数据库服务器、负载均衡
云服务器编译代码是什么
2023-10-28

c#要用什么编译器

c# 语言可以使用以下编译器进行编译:microsoft visual studio:官方 ide,提供自动完成功能、调试器和代码分析工具。mono:开源编译器和运行时环境,可在非 microsoft 操作系统上运行 c# 代码。rosly
c#要用什么编译器
2024-04-04

javascript编译器使用什么

JavaScript编译器使用什么?随着JavaScript的不断发展,越来越多的网站和应用程序使用JavaScript作为主要的客户端编程语言。为了确保高效的JavaScript代码执行和优质的用户体验,开发者越来越多地关注编译器在JavaScript代码优化方面的作用。那么,JavaScript编译器使用什么?本文将介绍JavaScript编译器的工作原理和常见的编译器类型
2023-05-21

如何理解C++编译器编译功能

如何理解C++编译器编译功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面深度讲解C++中的大规模C++编译器,C++编译器具有很强的复杂性,并且源程序的行数也是非常多
2023-06-17

Python 动态编译器PyPy对比其他动态编译器的优点是什么

这期内容当中小编将会给大家带来有关Python 动态编译器PyPy对比其他动态编译器的优点是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。该项目的目标是,让PyPy比C实现的Python更为容易的适应
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录