[譯][A crash course in WebAssembly] assembly


title: [A crash course in WebAssembly] assembly前端

date: 2018-3-22 23:58:00web

categories: 翻譯編程

tags: WebAssembly後端

source: 原文地址架構

auther: Lin Clarkdom


[A carsh course to WebAssembly] assembly


這是WebAssembly系列中的第三部分。若是您尚未閱讀其餘文章,咱們建議您[從頭開始](starting from the beginning)。編程語言

爲了理解WebAssembly是如何工做的,對彙編的理解是必須的,這篇文章有助於理解assembly是什麼以及編譯器如何生成它。ide

在上篇講JIT的文章中,我談到了與機器進行通訊就像是與外星人進行交流。this

我想如今看看這個外星人的大腦是如何工做的————這個機器的大腦如何解析和理解傳遞給它的信息。編碼

這個大腦的一部分專門用於思考,好比加法和減法,或者邏輯運算。還有一部分大腦提供短時間記憶,另外一部分提供長期記憶。

這些不一樣的部分有不一樣的名字:

  • The part that does the thinking is the Arithmetic-logic Unit (ALU).
  • The short term memory is provided by registers.
  • The longer term memory is the Random Access Memory (or RAM).

機器代碼中的句子稱爲指令(instruction)。

當一條指令進入大腦時發生了什麼呢?指令被劃分爲不一樣的部分而且表明了不一樣的意義。

指令的分割方式取決於大腦的佈線方式(the wiring of this brain)。

例如,像這樣連線的大腦可能老是會佔用前六位,並將它傳送給ALU。 ALU會根據1和0的位置來肯定它須要將兩件事情加在一塊兒。

這塊被稱爲「操做碼(opcode)」或operation code,由於它告訴ALU要執行的操做。

而後,這個大腦會分別接下來的兩個三位數據塊,以肯定它應該添加哪兩個數字。這些將是寄存器的地址。

請注意機器代碼上方的註釋,這使得咱們人類更容易理解正在發生的事情。這就是assembly。它被稱爲符號機器碼。這是人類理解機器碼的一種方式。它被稱爲符號機器碼。這是人類理解機器碼的一種方式。

你能夠在這裏看到,這個機器的assembly和機器碼之間有一個很是直接的關係。正由於如此,您能夠擁有不一樣種類的機器體系結構。當你在機器內部有不一樣的架構時,它可能須要本身的裝配方言(dialect of assembly)。

所以咱們不會只有一個翻譯的目標。這不僅是一種被稱爲機器碼的語言。就像咱們人與人之間也會說不一樣的語言,機器碼也有許多種。

要是人類語翻譯到外星語,你可能使用的是英語、俄語而後轉換成外星文A、外星文B,從編程的角度來看,這就像從C或C++或Rust到x86或到ARM。

你若是想要可以將一個高級編程語言向下編譯到一個彙編語言(這對應於不一樣的體系結構),作到這一點的一種方法是建立一大堆不一樣的編譯器,將每種彙編碼映射到機器碼。

這會是十分低效的。爲了解決這個問題,大多數編譯器至少添置一箇中間層,編譯器會獲取高級編程語言並將其編譯到並不那麼高級也不是機器碼的中間碼,這個中間碼被稱爲 IR(intermediate representation)

這意味着編譯器能夠獲取任何高級語言而且翻譯到一種IR語言。從那裏開始,編譯器的另外一部分能夠採用該IR並將其編譯爲特定於目標體系結構的內容。而後,另外一部分的編譯器能夠將IR語言向下編譯到目標架構。

編譯器的前端將高級語言翻譯到IR,編譯器的後端將IR翻譯到目標架構的彙編碼。

結論

這就是assembly究竟是什麼,而且編譯器是如何將高級編程語言編譯到彙編碼的。在下一篇文章中,咱們會看到WebAssembly如何適應這種處理模型。

相關文章
相關標籤/搜索