热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebAssembly系列(三)编译器怎样天生汇编

作者:LinClark编译:胡子大哈翻译原文:http:huziketang.comblogpostsdetail?postId58c55a3ba6d8a07e449fdd

作者:Lin Clark

编译:胡子大哈

翻译原文:http://huziketang.com/blog/posts/detail?postId=58c55a3ba6d8a07e449fdd23

英文原文:A crash course in assembly

转载请说明出处,保存原文链接以及作者信息

本文是关于 WebAssembly 系列的第三篇文章。假如你没有读先前文章的话,发起先读这里。假如对 WebAssembly 没观点,发起先读这里(中文文章)。

明白什么是汇编,以及编译器怎样天生它,关于明白 WebAssembly 是很有协助的。

在上一篇关于 JIT 的文章中,我引见了和计算机打交道,就像同外星人打交道一样。

《WebAssembly 系列(三)编译器怎样天生汇编》

如今来思索一下“外星人”的大脑是怎样事情的——机械的“大脑”是怎样对我们输入给它的内容举行剖析和明白的。

“大脑”中,有一部份担任思索——处置惩罚加法、减法或许逻辑运算。另有其他的部份离别担任短暂影象和历久影象的。

这些差别的部份都有本身的名字:

  • 担任思索的部份叫做算数逻辑单位(ALU)

  • 寄存器供应短暂影象功用

  • 随机存取存储器(RAM)供应历久影象功用

《WebAssembly 系列(三)编译器怎样天生汇编》

机械代码中的语句称作指令。

那末在指令进入“大脑”今后都发生了什么呢?它们会被切分为差别的部份传送到差别的单位举行处置惩罚。

“大脑”切分指令经由过程差别衔接线路举行。举个例子,“大脑”会将指令最最先的 6 比特经由过程管道送到 ALU 中。而 ALU 会经由过程 0 和 1 的位置来决议对两个数做加法。

这串 01 串就叫做“操纵码”,它通知了 ALU 要实行什么样的操纵。

《WebAssembly 系列(三)编译器怎样天生汇编》

然后“大脑”会取背面两个一连的 3 比特 01 串来肯定把哪两个数加到一同,而这 3 比特指的是寄存器的地点。

《WebAssembly 系列(三)编译器怎样天生汇编》

注重看上面机械码的解释:“ADD R1 R2”,这关于人类来说很轻易明白其寄义。这就是汇编,也叫标记机械码,它使人类也能看懂机械代码的寄义。

能够看到汇编和这台机械的机械码之间有直接的映照关联。恰是由于云云,具有差别机械构造的计算机会有差别的汇编体系。假如你有一个机械,它有本身的内部构造,那末它就须要它所独占的汇编言语。

从上面的剖析能够晓得我们举行机械码的翻译并非只要一种,差别的机械有差别的机械码,就像我们人类也说林林总总的言语一样,机械也“说”差别的言语。

人类和外星人之间的言语翻译,可能会从英语、德语或中文翻译到外星语 A 或许外星语 B。而在顺序的天下里,则是从 C、C++ 或许 JAVA 翻译到 x86 或许 ARM。

你想要从恣意一个高等言语翻译到浩瀚汇编言语中的一种(依靠机械内部构造),个中一种体式格局是建立差别的翻译器来完成种种高等言语到汇编的映照。

《WebAssembly 系列(三)编译器怎样天生汇编》

这类翻译的效力实在太低了。为了处理这个题目,大多数编译器都会在中心多加一层。它会把高等言语翻译到一个低层,而这个低层又没有低到机械码这个层级。这就是中心代码( intermediate representation,IR)。

《WebAssembly 系列(三)编译器怎样天生汇编》

这就是说编译器会把高等言语翻译到 IR 言语,而编译器别的的部份再把 IR 言语编译成特定目的构造的可实行代码。

从新总结一下:编译器的前端把高等言语翻译到 IR,编译器的后端把 IR 翻译成目的机械的汇编代码。

《WebAssembly 系列(三)编译器怎样天生汇编》

总结

本文引见了什么是汇编以及编译器是怎样把高等言语翻译成汇编言语的,在下一篇文章中,我们来引见 WebAssembly 的事情道理。

我近来正在写一本《React.js 小书》,对 React.js 感兴趣的童鞋,迎接指导。


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 本文介绍了自学Vue的第01天的内容,包括学习目标、学习资料的收集和学习方法的选择。作者解释了为什么要学习Vue以及选择Vue的原因,包括完善的中文文档、较低的学习曲线、使用人数众多等。作者还列举了自己选择的学习资料,包括全新vue2.5核心技术全方位讲解+实战精讲教程、全新vue2.5项目实战全家桶单页面仿京东电商等。最后,作者提出了学习方法,包括简单的入门课程和实战课程。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Ihaveaforminadirectivetemplate:我在指令模板中有一个表单:<formn ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
  • 认识Vue关于Vue的描述有不少,不外乎都会拿来与Angular和React对比,同样头顶MVVM双向数据驱动设计模式光环的Angular自然被对比的最多,但到目前为止,Angul ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
author-avatar
用户0a8xoj91q0
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有