Solidity内联汇编简明指南
在用Solidity开发以太坊智能合约时,使用汇编可以直接与EVM交互,降低gas开销成本,更精细的控制智能合约的行为,因此值得Solidity开发者学习并加以利用。本文是Solidity汇编开发的简明教程,旨在帮助你快速熟悉如何在Solidity智能合约代码中嵌入汇编代码。 以太坊教程链接: Dapp入门 | 电商Dapp实战 | Token实战 | Php对接 | Java对接 | Python对接 | C#对接 | Dart对接 2、以太坊虚拟机和堆栈结构机器 以太坊虚拟机EVM有自己的指令集,该指令集中目前包含了144个操作码,详情参考 Geth源代码 这些指令是Solidity抽象出来的,可以在Solidity内联使用。例如: contract Assembler { function do_something_cpu() public { assembly { // start writing evm assembler language } } } EVM是一个栈虚拟机,栈这种数据结构只允许两个操作:压入(PUSH)或弹出(POP)数据。最后压入的数据位于栈顶,因此将被第一个弹出,这被称为后进先出(LIFO:Last In, First Out): 栈虚拟机将所有的操作数保存在栈上,关于栈虚拟机的详细信息可以参考 stack machine 基础 3