(转)WASM(WebAssember)快速了解第三篇——快速了解装配器

这是有关WebAssembly的系列文章的第三部分,若是您尚未阅读其余文章,咱们建议从头开始html

要了解WebAssembly的工做方式,它有助于了解什么是程序集以及编译器如何生成它。前端

有关JIT文章中,我谈到了与机器进行通讯就像与外星人进行通讯同样。web

我如今想看看外星人的大脑是如何工做的-机器的大脑是如何解析和理解进入其中的通讯的。编程

大脑中有一部分专门用于思考-诸如加减法或逻辑运算之类的东西。大脑附近还有一部分能够提供短时间记忆,另外一部分能够提供长期记忆。后端

这些不一样的部分具备名称。编程语言

  • 进行思考的部分是算术逻辑单元(ALU)。
  • 短时间存储器由寄存器提供。
  • 长期存储器是随机存取存储器(或RAM)。

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

这些指令之一进入大脑会发生什么?它分为不一样的部分,这些部分表明不一样的含义。翻译

拆分此指令的方式特定于此大脑的连线。htm

例如,像这样接线的大脑可能始终会占用前六位并将其输送到ALU。ALU将根据1和0的位置肯定须要将两件事加在一块儿。blog

该块称为“操做码”或操做代码,由于它告诉ALU要执行什么操做。

而后,该大脑将取下三个三位的下两个块,以肯定应该将其相加的两个数字。这些将是寄存器的地址。

 

请注意此处机器代码上方的注释,这些注释使咱们人类更容易理解正在发生的事情。这就是组装。这就是符号机器代码。这是人类理解机器代码的一种方式。

您能够在这里看到程序集和该机器的机器代码之间存在很是直接的关系。所以,针对不一样类型的机器体系结构,可使用不一样种类的组件。当机器内部具备不一样的体系结构时,可能须要使用本身的汇编方言。

所以,咱们不只有一个翻译目标。这不单单是一种称为机器代码的语言。这是许多不一样种类的机器代码。就像咱们说不一样的语言同样,机器也说不一样的语言。

使用人类到外星人的翻译,您可能会从英语,俄语,普通话到外语A或外语B。在编程方面,这就像从C或C ++或Rust到x86或ARM。

您但愿可以将这些高级编程语言中的任何一种翻译为这些汇编语言中的任何一种(对应于不一样的体系结构)。一种方法是建立一大堆不一样的翻译器,这些翻译器能够从每种语言到每种程序集。

那将是很是低效的。为了解决这个问题,大多数编译器在二者之​​间至少放置了一层。编译器将采用这种高级编程语言,并将其转换为不那么高级的语言,但也没法在机器代码级别工做。这就是所谓的中间表示(IR)。

 

这意味着编译器能够采用这些高级语言中的任何一种并将其翻译为一种IR语言。从那里,编译器的另外一部分能够获取该IR并将其编译为特定于目标体系结构的内容。

编译器的前端将高级编程语言转换为IR。编译器的后端从IR到目标体系结构的汇编代码。

结论

这就是汇编语言,以及编译器如何将高级编程语言转换为汇编语言。在接下来的文章中,咱们将看到如何WebAssembly在此相符。

转自:https://hacks.mozilla.org/2017/02/a-crash-course-in-assembly/

相关文章
相关标签/搜索