开发者社区> 玄学酱> 正文

汇编快速入门

简介: 本文讲的是汇编快速入门,理解汇编和编译器如何生成它的有助于你后续理解 WebAssembly 的工作原理,
+关注继续查看
本文讲的是汇编快速入门,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

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






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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C语言入门(一)——程序的基本概念
C语言入门(一)——程序的基本概念
51 0
C语言从入门到精通1.2开发环境的配置
1.2开发环境配置 我们在入门阶段先使用较为简单的DEV C++进行代码的编写 • 官方下载:https://sourceforge.net/projects/orwelldevcpp/ 下载完成后双击打开exe文件即可开始安装运行 打开后会让我们选择语言,在此没有中文安装完成后有中文所以在此需要先选择英文 选择我同意用户协议 选择所需的、功能默认即可 选择安装路径 点击Install安装即可 安装完成后点击Finsh运行即可 在此选择简体中文继续 在这里选择字体图表等默认即可 点击OK即可进入 点击文件新建,源代码即可开始写我们的第一个C语言程序 第一个C语言程序,在此读者不必全部理解代码的
16 0
Win32汇编:汇编基本知识总结
汇编语言是所有程序设计语言中最古老的,它与计算机机器语言最为接近,通过汇编语言可以直接访问计算机的硬件,能够直接与CPU对话,可以说汇编语言是所有编程语言中语法格式最自由的,但自由的代价就是需要了解计算机体系结构和操作系统的大量细节,每编写一段程序都需要考虑各种硬件的状态,从而导致使用汇编写程序效率非常低.
76 0
【汇编实战开发笔记】一段汇编代码如何“反编译”成C代码?
如果给你一段汇编代码,要你反编译成C语言代码,你会怎么做?
48 0
【汇编语言王爽】进阶-笔记 p22--p40(上)
【汇编语言王爽】进阶-笔记 p22--p40
17 0
【汇编语言王爽】进阶-笔记 p22--p40(下)
【汇编语言王爽】进阶-笔记 p22--p40
21 0
关于汇编语言入门的几个案例
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。...
87 0
一. 汇编概述
机器语言--->汇编语言--->C语言之间的关系
73 0
C语言基础知识快速入门(全面)(二)
C语言就是一门计算机语言,广泛应用与底层开发,使用语言写代码程序,解决问题 所以说对于计算机这一专业来说C语言和学好C语言相当的重要
58 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python 脚本速查手册
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载