成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

WebAssembly 系列(三)編譯器如何生成匯編

cc17 / 1429人閱讀

摘要:如果對(duì)沒(méi)概念,建議先讀這里中文文章。理解什么是匯編,以及編譯器如何生成它,對(duì)于理解是很有幫助的。舉個(gè)例子,大腦會(huì)將指令最開(kāi)始的比特通過(guò)管道送到中。

作者:Lin Clark

編譯:胡子大哈

翻譯原文:http://huziketang.com/blog/posts/detail?postId=58c55a3ba6d8a07e449fdd23

英文原文:A crash course in assembly

轉(zhuǎn)載請(qǐng)注明出處,保留原文鏈接以及作者信息

本文是關(guān)于 WebAssembly 系列的第三篇文章。如果你沒(méi)有讀先前文章的話,建議先讀這里。如果對(duì) WebAssembly 沒(méi)概念,建議先讀這里(中文文章)。

理解什么是匯編,以及編譯器如何生成它,對(duì)于理解 WebAssembly 是很有幫助的。

在上一篇關(guān)于 JIT 的文章中,我介紹了和計(jì)算機(jī)打交道,就像同外星人打交道一樣。

現(xiàn)在來(lái)思考一下“外星人”的大腦是如何工作的——機(jī)器的“大腦”是如何對(duì)我們輸入給它的內(nèi)容進(jìn)行分析和理解的。

“大腦”中,有一部分負(fù)責(zé)思考——處理加法、減法或者邏輯運(yùn)算。還有其他的部分分別負(fù)責(zé)短暫記憶和長(zhǎng)期記憶的。

這些不同的部分都有自己的名字:

負(fù)責(zé)思考的部分叫做算數(shù)邏輯單元(ALU)

寄存器提供短暫記憶功能

隨機(jī)存取存儲(chǔ)器(RAM)提供長(zhǎng)期記憶功能

機(jī)器代碼中的語(yǔ)句稱(chēng)作指令。

那么在指令進(jìn)入“大腦”以后都發(fā)生了什么呢?它們會(huì)被切分為不同的部分傳送到不同的單元進(jìn)行處理。

“大腦”切分指令通過(guò)不同連接線路進(jìn)行。舉個(gè)例子,“大腦”會(huì)將指令最開(kāi)始的 6 比特通過(guò)管道送到 ALU 中。而 ALU 會(huì)通過(guò) 0 和 1 的位置來(lái)決定對(duì)兩個(gè)數(shù)做加法。

這串 01 串就叫做“操作碼”,它告訴了 ALU 要執(zhí)行什么樣的操作。

然后“大腦”會(huì)取后面兩個(gè)連續(xù)的 3 比特 01 串來(lái)確定把哪兩個(gè)數(shù)加到一起,而這 3 比特指的是寄存器的地址。

注意看上面機(jī)器碼的注釋?zhuān)骸癆DD R1 R2”,這對(duì)于人類(lèi)來(lái)講很容易理解其含義。這就是匯編,也叫符號(hào)機(jī)器碼,它使人類(lèi)也能看懂機(jī)器代碼的含義。

可以看到匯編和這臺(tái)機(jī)器的機(jī)器碼之間有直接的映射關(guān)系。正是因?yàn)槿绱?,擁有不同機(jī)器結(jié)構(gòu)的計(jì)算機(jī)會(huì)有不同的匯編系統(tǒng)。如果你有一個(gè)機(jī)器,它有自己的內(nèi)部結(jié)構(gòu),那么它就需要它所獨(dú)有的匯編語(yǔ)言。

從上面的分析可以知道我們進(jìn)行機(jī)器碼的翻譯并不是只有一種,不同的機(jī)器有不同的機(jī)器碼,就像我們?nèi)祟?lèi)也說(shuō)各種各樣的語(yǔ)言一樣,機(jī)器也“說(shuō)”不同的語(yǔ)言。

人類(lèi)和外星人之間的語(yǔ)言翻譯,可能會(huì)從英語(yǔ)、德語(yǔ)或中文翻譯到外星語(yǔ) A 或者外星語(yǔ) B。而在程序的世界里,則是從 C、C++ 或者 JAVA 翻譯到 x86 或者 ARM。

你想要從任意一個(gè)高級(jí)語(yǔ)言翻譯到眾多匯編語(yǔ)言中的一種(依賴(lài)機(jī)器內(nèi)部結(jié)構(gòu)),其中一種方式是創(chuàng)建不同的翻譯器來(lái)完成各種高級(jí)語(yǔ)言到匯編的映射。

這種翻譯的效率實(shí)在太低了。為了解決這個(gè)問(wèn)題,大多數(shù)編譯器都會(huì)在中間多加一層。它會(huì)把高級(jí)語(yǔ)言翻譯到一個(gè)低層,而這個(gè)低層又沒(méi)有低到機(jī)器碼這個(gè)層級(jí)。這就是中間代碼( intermediate representation,IR)。

這就是說(shuō)編譯器會(huì)把高級(jí)語(yǔ)言翻譯到 IR 語(yǔ)言,而編譯器另外的部分再把 IR 語(yǔ)言編譯成特定目標(biāo)結(jié)構(gòu)的可執(zhí)行代碼。

重新總結(jié)一下:編譯器的前端把高級(jí)語(yǔ)言翻譯到 IR,編譯器的后端把 IR 翻譯成目標(biāo)機(jī)器的匯編代碼。

總結(jié)

本文介紹了什么是匯編以及編譯器是如何把高級(jí)語(yǔ)言翻譯成匯編語(yǔ)言的,在下一篇文章中,我們來(lái)介紹 WebAssembly 的工作原理。

我最近正在寫(xiě)一本《React.js 小書(shū)》,對(duì) React.js 感興趣的童鞋,歡迎指點(diǎn)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/86930.html

相關(guān)文章

  • 圖說(shuō) WebAssembly):什么是匯編

    摘要:為了更好的理解,我們有必要去先理解什么是匯編,以及編譯器是如何產(chǎn)生匯編的。什么是匯編現(xiàn)在,我們來(lái)看看外星人的大腦是如何工作的。這些注釋就是匯編,也稱(chēng)為符號(hào)機(jī)器碼。結(jié)束以上的內(nèi)容就是什么是匯編以及它是如何從高級(jí)編程語(yǔ)言翻譯過(guò)來(lái)的。 本文是圖說(shuō) WebAssembly 系列文章的第三篇。如果您還未閱讀之前的文章,建議您從第一篇入手。 為了更好的理解 WebAssembly ,我們有必要去先...

    劉福 評(píng)論0 收藏0
  • WebAssembly 系列(四)WebAssembly 工作原理

    摘要:但是它們其實(shí)并不是二選一的關(guān)系并不是只能用或者。正因?yàn)槿绱?,指令有時(shí)也被稱(chēng)為虛擬指令。這是因?yàn)槭遣捎没跅5奶摂M機(jī)的機(jī)制。聲明模塊的全局變量。。下文預(yù)告現(xiàn)在你已經(jīng)了解了模塊的工作原理,下面將會(huì)介紹為什么運(yùn)行的更快。 作者:Lin Clark 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58c77641a6d8...

    stormzhang 評(píng)論0 收藏0
  • WebAssembly 系列(一)生動(dòng)形象地介紹 WebAssembly

    摘要:但是為什么執(zhí)行的更快呢在這個(gè)系列文章中,我會(huì)為你解釋這一點(diǎn)。所以當(dāng)人們說(shuō)更快的時(shí)候,一般來(lái)講是與相比而言的。被人們廣為傳播的性能大戰(zhàn)在年打響。性能的提升使得的應(yīng)用范圍得到很大的擴(kuò)展?,F(xiàn)在通過(guò),我們很有可能正處于第二個(gè)拐點(diǎn)。 作者:Lin Clark 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58ce8036...

    wangbjun 評(píng)論0 收藏0
  • WebAssembly 為什么比 asm.js 快?

    摘要:并且于年月日,四個(gè)主要的瀏覽器一致同意宣布的版本已經(jīng)完成,即將推出一個(gè)瀏覽器可以搭載的穩(wěn)定版本。因此本文著重介紹為什么比更快。本文主要表達(dá)的是為什么應(yīng)該是更快的。則不同,它是由幾大主要的瀏覽器廠商共同設(shè)計(jì)的。 作者:Alon Zakai 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58ce80d2a6d8a0...

    Binguner 評(píng)論0 收藏0
  • JavaScript 工作原理之六-WebAssembly 對(duì)比 JavaScript 及其使用場(chǎng)景

    摘要:現(xiàn)在,我們將會(huì)剖析的工作原理,而最重要的是它和在性能方面的比對(duì)加載時(shí)間,執(zhí)行速度,垃圾回收,內(nèi)存使用,平臺(tái)訪問(wèn),調(diào)試,多線程以及可移植性。目前,是專(zhuān)門(mén)圍繞和的使用場(chǎng)景設(shè)計(jì)的。目前不支持多線程。 原文請(qǐng)查閱這里,略有改動(dòng),本文采用知識(shí)共享署名 4.0 國(guó)際許可協(xié)議共享,BY Troland。 本系列持續(xù)更新中,Github 地址請(qǐng)查閱這里。 這是 JavaScript 工作原理的第六章...

    jay_tian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<