(轉)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/

相關文章
相關標籤/搜索