以太坊虛拟機介紹
近期打算寫一些關于以太坊虛拟機(後面簡稱EVM)的文章,這是其中的第一篇。這一系列文章想站在EVM指令集的角度,帶領讀者逐漸了解EVM工作原理,進而了解以太坊區塊鍊技術細節。由于網上介紹以太坊的文章也比較多,是以這一系列文章将最大程度減少不必要的廢話,直接提供文章想要表達的資訊。
EVM基本資訊
程式設計語言虛拟機一般有兩種類型,基于棧,或者基于寄存器。大部分我們所熟知的語言都采用基于棧的虛拟機,比如最著名的Java虛拟機。在遊戲領域非常流行的Lua語言則采用了基于寄存器的虛拟機。和JVM一樣,EVM也是基于棧的虛拟機。
既然是支援棧的虛拟機,那麼EVM肯定首先得有個棧。為了友善進行密碼學計算,EVM采用了32位元組(256比特)的字長。EVM棧以字(Word)為機關進行操作,最多可以容納1024個字。這就是我們在這篇文章裡需要了解的EVM資訊,在後面的文章裡,我們會逐漸介紹更多的EVM細節。下面是EVM棧的示意圖:

EVM指令集
和JVM一樣,EVM執行的也是位元組碼。由于操作碼被限制在一個位元組以内,是以EVM指令集最多隻能容納256條指令。目前EVM已經定義了約142條指令,還有100多條指令可供以後擴充。這142條指令包括算術運算指令,比較操作指令,按位運算指令,密碼學計算指令,棧、memory、storage操作指令,跳轉指令,區塊、智能合約相關指令等。我們會在後面的文章裡逐漸讨論這些指令,下面是已經定義的EVM操作碼分布圖(灰色區域是目前還沒有定義的操作碼):
其他文章
以太坊虛拟機介紹2-棧操作指令
以太坊虛拟機介紹3-算術運算指令
以太坊虛拟機介紹4-位移運算指令
以太坊虛拟機介紹5-比較操作指令
以太坊虛拟機介紹6-密碼學運算指令
以太坊虛拟機介紹7-存儲操作指令
…
廣告
如果大家對程式設計語言虛拟機有更多的興趣,請關注我寫的《自己動手寫Java虛拟機》,以及馬上将要出版的《自己動手實作Lua:虛拟機、編譯器、标準庫》。