最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 汇编语言转换成机器码 Acompileristhe

    前言

    今天的话题来自朋友圈的一位朋友,然后和晨读课的微信群里的一群人进行了交流。有一个很好的解释:编译就是在吃之前准备一桌菜,解释就是吃火锅。今天早上的文章是在@JerryC 的许可下分享的。

    正文从这里开始~

    最近在看编译过程的一些知识点,主要是看英文文献。

    中间经常遇到的两个词让我很困惑:Compiler, Interpreter

    中文翻译是:compiler,interpreter。

    如果有人问我们“你知道编译器是什么吗?”,

    很有可能我们首先看不起这个人,然后说,“你知道,你为什么不直接用编程语言编译程序!”

    如果有人问“那你认识口译员吗?”,

    这个时候汇编语言转换成机器码,很可能会说“我知道。”,但很难有轻蔑的语气。

    如果你再问,“编译器和解释器有什么区别?”,

    “呃……”

    那么究竟什么是“编译器”,什么是“解释器”呢?

    虽然我们对这两个词“熟悉”,但能不能“详细”一下?

    看来我们并没有认真对待这两个术语。

    什么是编译器

    摘自 Wiki Compiler 的一段话

    编译器是一种计算机程序(或一组程序),它将以编程语言(源语言)编写的源代码转换为另一种计算机语言(目标语言),后者通常具有称为目标代码的二进制形式。转换源代码的最常见原因是创建可执行程序。

    大致意思是:

    编译器是一种计算机程序,它将以一种编程语言编写的源代码转换为另一种计算机代码,通常以二进制形式称为目标代码。此转换过程的通常目的是生成可执行程序。

    编译器的输出是“另一种代码”,然后这些代码正在等待其他人执行。如果不能直接执行,则需要重新编译或解释,然后交给计算机硬件执行。

    编译器往往在“执行”之前完成,输出的是可执行或需要重新编译或解释的“代码”。

    什么是口译员

    摘自 Wiki Interpreter 的一段话

    在计算机科学中,解释器是一种计算机程序,它直接执行(即执行)以编程或ing 语言编写的指令,而无需事先将它们编译成机器语言程序。解释器通常使用以下策略之一来执行程序:解析源代码并直接执行其行为。将源代码翻译成一些有效的中间表示并立即执行。显式执行由编译器生成的存储的预编译代码,该编译器是翻译系统。

    大致意思是:

    在计算机科学中,解释器是一种计算机程序,它直接执行以编程或脚本语言编写的代码,而无需将源代码预编译成机器代码。解释器通常以以下姿势执行程序代码:

    你可以把解释器想象成一个黑盒子,我们输入源代码,它会实时返回结果。

    不同类型的解释器在黑盒中有不同的结构,有的还集成了编译器来缓存编译结果以提高执行效率(例如Chrome V8就是这样做的)。

    解释器通常工作在“运行时”,逐行解释我们输入的源代码,执行它,并返回结果。

    比较二维

    行为

    表现

    编译器会提前花更多的时间将整个程序的源代码编译成另一个代码,后者往往比前者更接近机器码汇编语言转换成机器码,因此执行效率会更高。时间在预编译过程中被消耗。

    解释器逐行读取源代码,对其进行解释,然后立即执行。中间往往采用比较简单的词法分析和句法分析来压缩解释时间,最后生成机器码,由硬件执行。解释器适用于相对低级的语言。但相对于预编译代码,效率往往较低。如何减少口译的数量和复杂性是提高口译效率的难题。

    关于代码你需要了解的几个概念

    看了很多关于“编译和解释”的文章后,发现下面这几个字出现的很多。

    知道这些词的意思和对应的层次,才能更好地理解别人想要表达的意思。

    高级代码

    高级语言代码当然是指用高级编程语言编写的代码,它对计算机的细节有更高的抽象程度。

    它比低级编程语言更接近自然语言(人类语言)。

    集成一系列自动化工具(垃圾收集、内存管理等)将使程序员活得更久,更快乐地编写更简洁易读的代码。

    低级代码

    低级语言代码是指用低级编程语言编写的代码。与高级语言相比,它的抽象概念更少,更接近于汇编或机器指令。

    但这也意味着代码的可移植性很差。

    在我看来,高和低只是一组相对的术语。

    c语言转换ascii码_c语言如何转换ascll码_汇编语言转换成机器码

    语言越高,性能和自由度比低级语言越低。

    但在抽象性、可读性和可移植性方面,它优于低级语言。

    在之前的时代,C/C++语言绝对是相对于汇编语言和机器指令的高级语言。

    今天,我们中越来越多的人倾向于将 C 语言视为“低级语言”。

    或许未来世界的开发者,看看我们现在熟悉的Java、PHP、Python、ECMA等,都是“低级”语言。

    汇编语言

    汇编语言作为一种低级语言,对应于计算机或其他可编程硬件。

    它与计算机的体系结构和机器指令密切相关。

    也就是说,不同的汇编语言代码对应着具体的硬件,就不谈可移植性了。

    与需要编译和解释的高级语言代码相比,汇编代码只需翻译成机器码即可执行。

    所以汇编语言常被称为符号机器码(symbolic machine code)

    字节码

    严格来说,字节码并不是一种编程语言,而是高级编程语言针对各种需求(可移植性、可移植性、预编译等)生成的中间代码(Intermediate Code)。

    它是由一堆指令集组成的代码。比如javac编译出来的java源代码就是字节码。

    在编译源代码的过程中,需要经过“词法分析→语法分析→生成目标代码”的过程。在预编译的过程中,完成了这部分工作并生成了字节码。

    然后,交给解释器(通常指编程语言的虚拟机)进行解释和执行,节省了之前预编译的开销。

    机器码

    机器码是一组可由CPU直接执行的指令,

    每条指令代表一个特定的任务,或者一个加载,或者一个跳转,或者一个计算操作,等等。

    所有能被CPU直接执行的程序都是由这样一系列指令组成的。

    机器码可以看成是编译过程中最底层的代码,所以交给硬件去执行。

    当然,机器码也可以编辑,但它以人类难以理解的姿态存在,可读性很差。

    从熟悉的编程语言的角度来看

    从左到右看,

    以Java为例,我们在文本编译器中编写了Java代码,交给“编译器”编译成Java Bytecode。然后将字节码交给 JVM 执行。这时JVM就充当了“解释器”的角色,一边执行,一边将Bytecode解释为Machine Code,并返回结果。

    以BASIC语言(一种早期的计算机可以直接翻译的语言)为例,它可以不用经过“编译”的过程,用文本编译器编写,然后直接交给操作系统进行“解释”,然后执行。

    以C语言为例,我们在文本编译器中编写源代码,然后运行gcc hello.c编译hello.out文件。该文件由一系列机器指令组成。机器代码可以直接由硬件执行。

    抽象看本质:人与计算机的差距

    不管是最近在看《黑暗时光》的《黑暗时光》作者刘伟鹏,还是前段时间听了《用产品思维写文章》讲座的阿灿,或者其他很多聪明人。

    他们都强调“抽象看本质”的能力,可以从事物本身中抽象出共同的属性,看本质。

    这也是很多人所说的“跳出框框看看”的思维方式。

    “编译”或“解释”。

    本质还是“人与计算机的交流形式”,人类语言最终转化为机器语言。

    一句“Hello World”,经过一系列的“编译”和“解读”,最终转化为一系列包含机器指令的0和1。机器傻傻执行后,它会告诉你结果。

    在这样的过程中,我们需要大量的翻译人员。

    有的翻译人员可以做同声传译(interpretation),但有的翻译人员只能把我们的意图写下来,然后全部翻译(编译)到电脑上。

    往往翻译者能力有限,只能将你的语言翻译成另一种低级语言,然后再由懂这种语言的翻译者翻译更接近计算机能理解的语言。

    用一句话描述“编译”和“解释”?

    不像这张图那么简单:

    编译:将整个程序源代码翻译成另一段代码,然后等待执行。在运行之前,产品是“另一个代码”。

    Interpret 解释:逐行读取程序源代码,然后执行。它发生在运行时,产品是“运行结果”。

    参考

    关于这篇文章

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 汇编语言转换成机器码 Acompileristhe

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论