以太坊虚拟机介绍


EVM基本信息

编程语言虚拟机一般有两种类型,

  • 基于栈,
  • 基于寄存器。

大部分我们所熟知的语言都采用基于栈的虚拟机,比如最著名的Java虚拟机。

在游戏领域非常流行的Lua语言则采用了基于寄存器的虚拟机。

和JVM一样,EVM也是基于栈的虚拟机。

既然是支持栈的虚拟机,那么EVM肯定首先得有个栈。

为了方便进行密码学计算,EVM采用了32字节(256比特)的字长。


EVM栈以字(Word)为单位进行操作,最多可以容纳1024个字。


这就是我们在这篇文章里需要了解的EVM信息,在后面的文章里,我们会逐步介绍更多的EVM细节。

下面是EVM栈的示意图:

区块链 以太坊 虚拟机 EVM 为什么256条指令_指令集



EVM指令集

和JVM一样,EVM执行的也是字节码。

如0xF0,16进制,8位。

由于操作码被限制在一个字节(8bit)以内,所以EVM指令集最多只能容纳256条指令(指一行)。

目前EVM已经定义了约142条指令,还有100多条指令可供以后扩展。

这142条指令包括

  • 算术运算指令,
  • 比较操作指令,
  • 按位运算指令,
  • 密码学计算指令,
  • 栈、
  • memory、
  • storage操作指令,
  • 跳转指令,
  • 区块、
  • 智能合约相关指令

等。

我们会在后面的文章里逐步讨论这些指令,下面是已经定义的EVM操作码分布图(灰色区域是目前还没有定义的操作码):



区块链 以太坊 虚拟机 EVM 为什么256条指令_操作码_02