汇编快速入门

本文讲的是汇编快速入门,

本文是 WebAssembly 系列文章的第三部分。如果你还没有阅读过前面的文章,我们建议你从头开始

理解汇编和编译器如何生成它的有助于你后续理解 WebAssembly 的工作原理,

介绍 JIT 的文章里,我谈到了与机器交流的方式和与外星人通信是相似的。

一个人用源代码示意,外星人以二进制回应

我现在真想看看外星人大脑的思考方式——即机器大脑解析和理解通信的机制。

大脑中有一部分专门用来思考(例如做加减或其他逻辑运算),一部分提供短期记忆存储,还有一部分提供长期记忆存储。

这几个不同的部分都有各自的名称:

  • 负责思维的部分称为算术逻辑单元 (ALU)。
  • 短期存储由寄存器提供。
  • 长期存储由随机存取存储器 (RAM) 提供。

图为 CPU,包含 ALU、寄存器和 RAM

机器码中的句子被称为指令。

当一条指令进入大脑时会发生什么?它会被分解成带不同含义的不同部分。

指令分解的方式是特定于当前大脑构造的。

例如,这种结构的大脑可能总是将前六个字节传送给 ALU。ALU 根据接收到的序列中 1 和 0 的排列,就会明白需要将两个东西加在一起。

这个字段称为操作码(opcode),它的作用是告诉 ALU 要执行的操作。

从 16 字节指令中取出 6 个字节并传送给 ALU

接下来大脑会取后续两个三字节的字段来确定要相加的两个数。这两个数会存储在寄存器中。

两个 3 字节字段被解码用以确定源寄存器

注意这里机器码上方的注释,有助于我们理解这个过程。这就叫做汇编。这段代码称为符号机器码。符号机器码是人类理解机器码的一种方式。

你会发现汇编和这台机器的机器码有很直接的关系。因此不同的机器架构对应有不同的汇编方式。当你遇到使用不同架构的机器时,可能就得按它们自己的方式进行汇编。

因此,我们的翻译对象并不止一个。机器码不止一种语言,有许多不同种类的机器码。就像我们人类会说不同的语言一样,机器也会使用不同的语言。

随着人类和外星人之间的翻译问题解决,你也可以将英语、俄语、普通话等语言转化成外星文A、外星文B了。对编程而言,就是将 C、C++、Rust 等语言转化成 x86、ARM。

如果你想将任意一种高级语言编译成对应任意体系结构的汇编语言,一种方法是创建一整套不同语言到不同汇编的转化器。

图中左侧为编程语言 C、C++ 和 Rust,右侧为汇编语言 x86 和 ARM,各组合分别以箭头连接

但这样的做法非常低效。大部分编译器会在中间放置至少一个中间层。编译器接收高级编程语言并将其转化成相对底层的形式,转化结果也不能和机器码一样直接运行。这类形式称为(IR)。

图中解释了高级语言和汇编语言以及中间表示(IR)的关系,箭头由高级编程语言指向 IR,又由 IR 指向汇编语言

这意味着编译器可以将任意一种高级编程语言翻译成一种 IR 语言。编译器的另一部分将得到的 IR 内容编译成特定于目标架构的语言。

编译器的前端部分将高级编程语言翻译成 IR 语言,再由后端将它们从 IR 语言编译成目标架构的汇编代码。

与上图相同,增加了前端和后端的注释

总结

以上就是汇编的简要说明,以及编译器将高级程序语言转成汇编的过程。在下一篇文章里,我们将会看到 WebAssembly 是如何实现的。






原文发布时间为:2017年3月16日


本文来自合作伙伴掘金,了解相关信息可以关注掘金网站。

时间: 2024-09-11 03:08:15

汇编快速入门的相关文章

JIT 编译器快速入门

本文讲的是JIT 编译器快速入门, 原文地址:A crash course in just-in-time (JIT) compilers 原文作者:Lin Clark 译文出自:掘金翻译计划 译者:zhouzihanntu 校对者:Tina92.Germxu 本文是 WebAssembly 系列文章的第二部分.如果你还没有阅读过前面的文章,我们建议你从头开始. JavaScript 刚面世时运行速度是很慢的,而 JIT 的出现令其性能快速提升.那么问题来了,JIT 是如何运作的呢? JavaS

《R语言游戏数据分析与挖掘》一2.1 开发环境准备和快速入门

2.1 开发环境准备和快速入门 2.1.1 R语言简介 R语言的前身是S语言,S语言是由AT &T Bell实验室的Rick Becker.John Chambers和Allan Wilks开发的一种用来进行数据探索.统计分析.作图的解释型语言.最初S语言的实现版本主要是S-PLUS.S-PLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善.而R语言最初由来自新西兰大学的Ross Ihaka和Robert Gentleman开发(由于他们的名字都以R开头,所以该软

数据库快速入门教程--视频

数据库快速入门教程--视频 下载地址:http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240579 本课程是这个课程体系的核心之一,为软件开发人员所需数据库知识的学习教材,而不是培训一个DBA(数据库管理员),更具体的说是为Web开发程序员所需数据库知识的学习教材.基于培养程序员的目标,本课程对数据库和SQL语句的相关知识进行了深刻地阐明和分析,学习的重点是标准SQL语句的学习的掌握.常用数据库MySQL

json快速入门学习教程

JSON快速入门 计算机语言中三种数据 1.标量 一个单独的字符串或者数字 比如"成都":7  2.序列 若干相关的数据按一定的顺序并列在一起(数组或列表) 比如"北京,成都":7 8 9 3.映射 名/值对 即数据名称与相对应的值 又称散列(hash)或字典 字典等等 比如 "四川省会:成都" JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 JSON的四个基本规则 (1)并列的数据之刘用逗号(&quo

AJAX快速入门之HTTP协议基础

ajax|快速入门 要很好地领会Ajax技术的关键是了解超文本传输协议(HTTP),该协议用来传输网页.图像以及因特网上在浏览器与服务器间传输的其他类型文件.只要你在浏览器上输入一个URL,最前面的http://就表示使用HTTP来访问指定位置的信息. (大部分浏览器还支持其他一些不同的协议,其中FTP就是一个典型例子.) 注意:本文中只涉及HTTP协议,这是Ajax开发人员关心的方面,它可作为HTTP的参考手册或指南. HTTP由两部分组成:请求和响应.当你在Web浏览器中输入一个URL时,浏

HTML 4.0 语言快速入门参考教程

参考|教程|快速入门 所有的万维网文件都是由超文本标志语言HTML所创建的.在这种语言中,可以使用各种标记对文件进行处理.这些标记决定了文件内容的外观.结构以及交互性等方面,他们的共同之处就是都使用"<>",例如段落标记<p>,图片标记<imp>等. 在浏览器中,是看不到任何HTML标记的,但是在浏览器中所看到的网页效果却都是由这些标记生成的. 在大多数情况下,在创建站点时并不需要对HTML标记进行掌握,因为在FrontPage 2000这样的软件中

Ajax.Net快速入门

ajax|快速入门 现在的项目准备用ajax,用ajax.net实现,而不是atlas,所以先看下ajax.net,Ajax.Net现在的最新版本是AjaxPro5.11.4.2,下载地址是:www.schwarz-interactive.de 首先我们新建个项目,名字是AjaxPro,我用的是vs2005beta2版本. 右击站点名字点add reference添加对我们刚刚下载来的那个叫AjaxPro.2.dll的引用,如果你用的是vs2003,则添加对AjaxPro.dll的引用,然后我们

XML轻松学习手册(1)XML快速入门

xml|快速入门 前言 XML越来越热,关于XML的基础教程网络上也随处可见.可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章.首先有两点是需要肯定的: 第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会: 第二:新知识肯定会有很多新概念,尝试理解和接受,您才可能提高.不要害怕和逃避,毕竟我们还年轻. 提纲 本文共分五大部分.分别是XM

博阅RSS阅读器快速入门

rss|快速入门 博阅RSS阅读器是为信息时代尽快获取所需信息而打造的一款简单易用的RSS阅读器.通过它您可以管理.获取.阅读 格式的信息.管理信息就是您可以根据自己的需要来确定和管理信息来源,获取信息就是您可以根据自己的需要从定制的信息源中来更新获取信息,阅读信息是指您可以方便的在阅读器中查看信息列表.摘要和详细内容.总之,您可以通过博阅RSS阅读器及时的获得你所要的各种信息. 软件资料 软件名称:博阅RSS阅读器 软件版本:V1.0 软件大小:20.26 MB 软件性质:免费软件 支持平台: