成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

圖說 WebAssembly(三):什么是匯編

劉福 / 1862人閱讀

摘要:為了更好的理解,我們有必要去先理解什么是匯編,以及編譯器是如何產(chǎn)生匯編的。什么是匯編現(xiàn)在,我們來看看外星人的大腦是如何工作的。這些注釋就是匯編,也稱為符號(hào)機(jī)器碼。結(jié)束以上的內(nèi)容就是什么是匯編以及它是如何從高級(jí)編程語言翻譯過來的。

本文是圖說 WebAssembly 系列文章的第三篇。如果您還未閱讀之前的文章,建議您從第一篇入手。

為了更好的理解 WebAssembly ,我們有必要去先理解什么是匯編(Assembly),以及編譯器是如何產(chǎn)生匯編的。
因?yàn)?WebAssembly 在瀏覽器中的作用跟匯編類似,這也是為什么 WebAssembly 稱為 WebAssembly 的原因。

在上一篇文章中,我們提到,我們跟計(jì)算機(jī)的交流就像是跟外星人的交流。

什么是匯編

現(xiàn)在,我們來看看外星人的大腦是如何工作的。類比一下就是,計(jì)算機(jī)的大腦如何分析并理解我們跟它交流的內(nèi)容。

計(jì)算機(jī)的大腦中有一塊區(qū)域是專門負(fù)責(zé)思考的,這個(gè)思考就是我們所說的加法、減法和其他邏輯操作。
在這個(gè)區(qū)域的附近,也有一塊區(qū)域是負(fù)責(zé)短期記憶的。當(dāng)然,相對(duì)的,也存在負(fù)責(zé)長(zhǎng)期記憶的區(qū)域。

人類給這些區(qū)域分別取了獨(dú)特的名字:

負(fù)責(zé)思考的區(qū)域稱為算術(shù)邏輯單元(Arithmetic-logic Unit, ALU)

負(fù)責(zé)短期記憶的區(qū)域稱為寄存器(Register)

負(fù)責(zé)長(zhǎng)期記憶的區(qū)域稱為隨機(jī)存儲(chǔ)器(Random Access Memory, RAM),也就是內(nèi)存

機(jī)器語言中的句子我們把它稱為指令

當(dāng)這些指令傳給計(jì)算機(jī)的大腦時(shí)會(huì)發(fā)生什么呢?
計(jì)算機(jī)會(huì)把指令拆分成不同的部分,每部分都有它們自己獨(dú)特的含義。

計(jì)算機(jī)拆分指令的方式跟計(jì)算機(jī)大腦內(nèi)部的實(shí)現(xiàn)相關(guān)。

舉例來說,一種實(shí)現(xiàn)方式可能總是取出最開始的 6 位數(shù)據(jù),并把它送給 ALU。
然后, ALU 根據(jù)這些 0 和 1 發(fā)現(xiàn),原來它的意思是要把兩個(gè)整數(shù)加起來。

我們把這 6 位數(shù)據(jù)組成的數(shù)據(jù)塊稱為操作碼(Operation Code),因?yàn)楦嬖V ALU 需要做什么操作。

當(dāng)計(jì)算機(jī)大腦知道是要做加法操作后,它會(huì)把接下來的兩個(gè) 3 位數(shù)據(jù)塊取出來,以此來定位是哪兩個(gè)數(shù)要相加。取出的兩個(gè) 3 位數(shù)據(jù)塊對(duì)應(yīng)的就是寄存器的地址,寄存器中保存的數(shù)據(jù)就是待相加的整數(shù)。

注意上圖中我們對(duì)機(jī)器碼的注釋,根據(jù)這些注釋人類可以很簡(jiǎn)單地明白其中發(fā)生了什么。
這些注釋就是匯編,也稱為符號(hào)機(jī)器碼。它是人類把機(jī)器碼變成可直接閱讀的方式。

匯編的生成

你可能已經(jīng)發(fā)現(xiàn),匯編跟該機(jī)器的機(jī)器碼有著相當(dāng)直接的關(guān)系。比如上面說的 6 位、3 位數(shù)據(jù)塊等,換一臺(tái)機(jī)器可能就變成了 7 位、4 位等。
因此,實(shí)際上有很多種不同的匯編,分別對(duì)應(yīng)不同的計(jì)算機(jī)架構(gòu)。當(dāng)你有一臺(tái)不同架構(gòu)的計(jì)算機(jī)時(shí),很可能你就得使用它專有的匯編。

所以,我們的翻譯目標(biāo)不止一個(gè)。
它并不僅僅是一種稱為機(jī)器碼的語言,而是多種不同的機(jī)器碼。這就像不同國(guó)家的人們說不同的語言一樣,不同架構(gòu)的計(jì)算機(jī)也使用不同的機(jī)器語言。

在人類和外星人之間的語言翻譯中,你可能要從英語、或者俄語、或者漢語翻譯為外星語 A、或者外星語 B。
編程語言領(lǐng)域也一樣,我們需要把 C、C++、Rust 翻譯為 x86 或者 ARM 架構(gòu)的匯編。

對(duì)應(yīng)不同架構(gòu)的計(jì)算機(jī),我們需要一種能夠把任何一種高級(jí)編程語言翻譯為不同匯編的能力。
其中一種辦法就是創(chuàng)建所有可能的映射關(guān)系,然后實(shí)現(xiàn)每種語言到每種匯編的翻譯。

但這種方法是相當(dāng)?shù)托У?。為了提升效率,大多?shù)的編譯器都會(huì)在兩者之間新增一個(gè)中間層。
這種編譯器會(huì)把高級(jí)編程語言翻譯成一種介于高級(jí)語言和機(jī)器碼之間的中間產(chǎn)物,稱為中間代碼(Intermediate Representation,IR)。

這樣的話,編譯器就可以接受任何一種高級(jí)語言,然后把它翻譯成中間代碼。
之后,編譯器的另一部分再把中間代碼變成特定架構(gòu)計(jì)算機(jī)的匯編。

按照中間代碼的生成可以把編譯編譯流程劃分為前端和后端。
編譯器前端接收高級(jí)編程語言,輸出中間代碼;編譯器后端則是接收中間代碼,輸出目標(biāo)架構(gòu)的匯編代碼。

結(jié)束

以上的內(nèi)容就是什么是匯編以及它是如何從高級(jí)編程語言翻譯過來的。
在下一篇文章中,我們將看到 WebAssembly 是如何生成的。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94768.html

相關(guān)文章

  • 圖說 WebAssembly(一):序言

    摘要:性能簡(jiǎn)史在年,被創(chuàng)造出來時(shí)并不是沖著性能去的。而且在之后的十年發(fā)展中,它的性能一直是很低的。的引入成就了性能提升的一個(gè)轉(zhuǎn)折點(diǎn),其執(zhí)行速度比以往快了之多。性能提升也使得在全新的問題上使用成為可能?,F(xiàn)在,極可能是下一個(gè)性能轉(zhuǎn)折點(diǎn)。 你可能已經(jīng)聽說 WebAssembly 代碼跑起來非??臁5悄阒肋@是為什么嗎?在本系列文章中,我們將探究其原因。 何為 WebAssembly WebAss...

    codergarden 評(píng)論0 收藏0
  • 圖說 WebAssembly(四):快速入門

    摘要:本文是圖說系列文章的第四篇。它們表示一種可以在普遍流行機(jī)器上高效使用的指令集合。這是因?yàn)槭且环N稱為堆棧機(jī)器。盡管是根據(jù)堆棧機(jī)器來設(shè)計(jì)的,但是這并不是它在真實(shí)物理機(jī)器上工作的方式。這些內(nèi)容稱為段。 本文是圖說 WebAssembly 系列文章的第四篇。如果您還未閱讀之前的文章,建議您從第一篇入手。 WebAssembly 是一種使得除 JavaScript 以外的編程語言也能運(yùn)行在網(wǎng)頁上...

    BoYang 評(píng)論0 收藏0
  • 圖說 WebAssembly(六):現(xiàn)狀與展望

    摘要:現(xiàn)狀年月日,主流的四大瀏覽器達(dá)成了共識(shí)并宣布的最小可行產(chǎn)品已經(jīng)完成。更快的函數(shù)調(diào)用當(dāng)前,在中調(diào)用函數(shù)比想象的要慢。直接操作目前,沒有任何方式能夠操作。這就導(dǎo)致了部分應(yīng)用可能會(huì)因此而推遲發(fā)布時(shí)間。結(jié)束現(xiàn)如今已經(jīng)相當(dāng)快速。 本文是圖說 WebAssembly 系列文章的最后一篇。如果您還未閱讀之前的文章,建議您從第一篇入手。 現(xiàn)狀 2017 年 2 月 28 日,主流的四大瀏覽器達(dá)成了共識(shí)...

    clasnake 評(píng)論0 收藏0
  • WebAssembly 系列()編譯器如何生成匯編

    摘要:如果對(duì)沒概念,建議先讀這里中文文章。理解什么是匯編,以及編譯器如何生成它,對(duì)于理解是很有幫助的。舉個(gè)例子,大腦會(huì)將指令最開始的比特通過管道送到中。 作者:Lin Clark 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58c55a3ba6d8a07e449fdd23 英文原文:A crash course i...

    cc17 評(píng)論0 收藏0
  • 圖說 WebAssembly(五):高性能原因

    摘要:本文是圖說系列文章的第五篇。這樣的話,使用的開發(fā)者也不需要做任何適配,但是它們卻能獲得更高性能。該圖并不是用來準(zhǔn)確的衡量其性能的。運(yùn)行編寫出高性能的代碼是可能的。這種清理工作由引擎自動(dòng)進(jìn)行,稱為垃圾回收。 本文是圖說 WebAssembly 系列文章的第五篇。如果您還未閱讀之前的文章,建議您從第一篇入手。 在上一篇文章中,我們說到了使用 WebAssembly 和 JavaScript...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<